Файл: system/controllers/forms/model.php
Строк: 144
<?php
class modelForms extends cmsModel {
public function addForm($form){
cmsCache::getInstance()->clean('forms.form');
$form['hash'] = hash('sha512', string_random().serialize($form));
return $this->insert('forms', $form, true);
}
public function updateForm($id, $form){
cmsCache::getInstance()->clean('forms.form');
return $this->update('forms', $id, $form, false, true);
}
public function deleteForm($id){
cmsCache::getInstance()->clean('forms.form');
cmsCache::getInstance()->clean('forms.fields');
$this->filterEqual('form_id', $id);
$this->deleteFiltered('forms_fields');
return $this->delete('forms', $id);
}
public function getForm($id){
$this->useCache('forms.form');
if(is_numeric($id)){
$this->filterEqual('id', $id);
} else {
if(strlen($id) === 128){
$this->filterEqual('hash', $id);
} else {
$this->filterEqual('name', $id);
}
}
$form = $this->getItem('forms');
if(!$form){ return false; }
$form['options'] = cmsModel::stringToArray($form['options']);
$form['params'] = [
'action' => !empty($form['options']['action']) ? $form['options']['action'] : href_to('forms', 'send_ajax', $form['hash']),
'hide_toolbar' => true,
'tpl_form' => $form['tpl_form'],
'form_class' => 'icms-forms__'.$form['name'],
'submit' => ['title' => LANG_SEND],
'method' => !empty($form['options']['method']) ? $form['options']['method'] : 'ajax'
];
return $form;
}
public function getFormFields($enabled = true){
$this->useCache('forms.fields');
if($enabled){
$this->filterEqual('is_enabled', 1);
}
$this->orderBy('ordering', 'asc');
$fields = $this->get('forms_fields', function($item, $model) {
$item['options'] = cmsModel::stringToArray($item['options']);
$item['default'] = $item['values'];
$rules = array();
if (!empty($item['options']['is_required'])) { $rules[] = array('required'); }
if (!empty($item['options']['is_digits'])) { $rules[] = array('digits'); }
if (!empty($item['options']['is_number'])) { $rules[] = array('number'); }
if (!empty($item['options']['is_alphanumeric'])) { $rules[] = array('alphanumeric'); }
if (!empty($item['options']['is_email'])) { $rules[] = array('email'); }
if (!empty($item['options']['is_url'])) { $rules[] = array('url'); }
$item['rules'] = $rules;
return $item;
}, 'name');
// чтобы сработала мультиязычность, если необходима
// поэтому перебираем тут, а не выше
if($fields){
foreach ($fields as $name => $field) {
$field_class = 'field' . string_to_camel('_', $field['type']);
$field['handler'] = new $field_class($field['name']);
$field['handler_title'] = $field['handler']->getTitle();
$field_property = $field; unset($field_property['type']);
$field['handler']->setOptions($field_property);
$fields[$name] = $field;
}
}
return $fields;
}
public function getFormField($id, $by_field = 'id'){
$this->useCache('forms.fields');
return $this->getItemByField('forms_fields', $by_field, $id, function($item, $model){
$item['options'] = cmsModel::stringToArray($item['options']);
$field_class = 'field' . string_to_camel('_', $item['type']);
$handler = new $field_class($item['name']);
$item['parser_title'] = $handler->getTitle();
$handler->setOptions($item);
$item['parser'] = $handler;
return $item;
});
}
public function getFormFieldsets($form_id){
$this->useCache('forms.fields');
$this->filterEqual('form_id', $form_id);
$this->groupBy('fieldset');
if (!$this->order_by){ $this->orderBy('fieldset'); }
$fieldsets = $this->selectOnly('fieldset')->get('forms_fields', function($item, $model){
if(!$item['fieldset']){ return false; }
return $item['fieldset'];
}, false);
return (array)$fieldsets;
}
public function addFormField($field){
$this->filterEqual('form_id', $field['form_id']);
$field['ordering'] = $this->getNextOrdering('forms_fields');
$field['id'] = $this->insert('forms_fields', $field, true);
cmsCache::getInstance()->clean('forms.fields');
return $field['id'];
}
public function updateFormField($id, $field){
$result = $this->update('forms_fields', $id, $field, false, true);
if ($result){
$field['id'] = $id;
}
cmsCache::getInstance()->clean('forms.fields');
return $result;
}
public function deleteFormField($id, $form_id){
$this->delete('forms_fields', $id, 'id');
$this->filterEqual('form_id', $form_id);
$this->reorder('forms_fields');
cmsCache::getInstance()->clean('forms.fields');
return true;
}
public function reorderFormFields($fields_ids_list){
$this->reorderByList('forms_fields', $fields_ids_list);
cmsCache::getInstance()->clean('forms.fields');
return true;
}
public function deleteController($id) {
$this->db->dropTable('forms');
$this->db->dropTable('forms_fields');
cmsCache::getInstance()->clean('forms.form');
cmsCache::getInstance()->clean('forms.fields');
return parent::deleteController($id);
}
}