public static function f_loadTypes($params = array()) { $result = array(); $typesTable = new K_Tree_Types_Model(); $types = $typesTable->select()->fetchArray(); $typeClass = 'Type_Controller_' . ucfirst($params['tree_type']); if ($params['tree_type'] == 'list') { $list = K_CupItems::getItems($params['tree_id'], $params['tree_type']); $listTypes = array_map('trim', explode(',', $list[0]['types'])); for ($i = 0, $j = 0; $i < sizeof($types); $i++) { if (in_array($types[$i]['type_name'], $listTypes)) { $result[$j] = new stdClass(); $result[$j]->value = $types[$i]['type_name']; $result[$j]->baseline = 'undefined'; $j++; } } } else { for ($i = 0, $j = 0; $i < sizeof($types); $i++) { if (isset($typeClass::$allowedChildren[0])) { if ($typeClass::$allowedChildren[0] == 'all' && sizeof($typeClass::$allowedChildren) == 1 || $typeClass::$allowedChildren[0] == 'all' && !in_array($types[$i]['type_name'], $typeClass::$allowedChildren) || $typeClass::$allowedChildren[0] != 'all' && in_array($types[$i]['type_name'], $typeClass::$allowedChildren)) { $result[$j] = new stdClass(); $result[$j]->value = $types[$i]['type_name']; $result[$j]->baseline = 'undefined'; $j++; } } } } return $result; }
/** * Загружает структуру формы для типа итема * * * */ public static function loadTypeStructure($type, $formMethodsClass = false, $formMethodsParams = array()) { if ($type) { try { $typesTable = new K_Tree_Types_Model(); $typeData = $typesTable->select()->where('`type_name`="' . $type . '"')->fetchRow(); $unserializedFormData = unserialize($typeData['type_fields']); $unserializedFormData = json_decode($unserializedFormData['form_structure']); for ($i = 0; $i < sizeof($unserializedFormData); $i++) { if ($unserializedFormData[$i]->type == 'select') { if (!empty($unserializedFormData[$i]->values->method) && $formMethodsClass !== false) { if (method_exists($formMethodsClass, 'f_' . $unserializedFormData[$i]->values->method)) { $className = $formMethodsClass; $methodName = 'f_' . $unserializedFormData[$i]->values->method; $data = $className::$methodName(isset($formMethodsParams[$unserializedFormData[$i]->values->method]) ? $formMethodsParams[$unserializedFormData[$i]->values->method] : array()); $unserializedFormData[$i]->options = $data; } } } } $resultData = array('form_structure' => json_encode($unserializedFormData)); return $resultData; } catch (Exception $err) { K_Debug::get()->addError('Model K_Tree_Types_Model not found'); } } else { K_Debug::get()->addError('Element ' . $treeId . ' was not loaded. Node required'); } }
public static function typeExists($type) { $typesModel = new K_Tree_Types_Model(); $suchTypeCount = $typesModel->select()->where('`type_name`="' . $type . '"')->count(); return $suchTypeCount; }
public function updateElementAction() { $this->disableRender = true; $values = array(); $treeTable = new K_Tree_Model(); $elementId = $this->getParam('id'); $node = K_tree::getNode($elementId); $typeModelName = 'Type_Model_' . ucfirst($node['tree_type']); $typeModel = new $typeModelName(); $query = new K_Db_Query(); $columns = $query->q('SHOW COLUMNS FROM `type_' . $node['tree_type'] . '`'); foreach ($columns as $c_key => $column) { $columns[$c_key] = $column->toArray(); foreach ($_POST as $p_key => $value) { if ('type_' . $node['tree_type'] . '_' . $p_key == $columns[$c_key]['Field']) { $values['type_' . $node['tree_type'] . '_' . $p_key] = $value; } elseif ($columns[$c_key]['Field'] == 'type_' . $node['tree_type'] . '_aaccess') { $values['type_' . $node['tree_type'] . '_aaccess'] = ''; } } } $form = new K_Form(); $uploadDir = WWW_PATH . '/upload'; $typeFiles = $form->getFiles(); $typesModel = new K_Tree_Types_Model(); $typeData = $typesModel->select('type_fields')->where('`type_name`="' . $node['tree_type'] . '"')->fetchRow(); $typeData = $typeData->toArray(); $typeData = unserialize($typeData['type_fields']); $typeData = json_decode($typeData['form_structure']); if ($form->hasFiles()) { $typeFiles = $form->getFiles(); } foreach ($typeData as $key => $value) { /* если необходимо добавлять текущее время к дате if($value->values->name == 'date'){ $dates = K_date::dateParse($_POST['date']); $values['type_' . $node['tree_type'] . '_date'] = date('Y-m-d',$dates['ts']) .' '.date('G:i:s',time()); } */ // var_dump($typeFiles); if ($value->type == 'file' || $value->type == 'multifile') { if ($value->type == 'multifile') { $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow(); $currentTypeData = $currentTypeData->toArray(); // массив файлов сохранённый в базе; if ($filesArray = unserialize($currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name])) { $i = 0; $fcount = count($filesArray); for ($i = 0; $i < $fcount; $i++) { $isDelete = false; if ($_POST[$value->values->name . '_delete_' . $i] || $typeFiles[$value->values->name . '_f_' . $i]) { $currentLastLoadedFile = $uploadDir . '/' . $filesArray[$i]['f']; if (is_file($currentLastLoadedFile)) { unlink($currentLastLoadedFile); } unset($filesArray[$i]); $isDelete = true; } if (!$isDelete && $_POST[$value->values->name . '_t_' . $i]) { $filesArray[$i]['t'] = $_POST[$value->values->name . '_t_' . $i]; } } } foreach ($typeFiles as $k => $v) { if (preg_match('/^' . $value->values->name . '_f_([0-9]*)$/s', $k, $m)) { if (is_dir($uploadDir)) { $pathData = $form->moveUploadedFile($k, $uploadDir, md5(time() . rand()), true); /* if ($value->values->filter) { $filters = explode('|', $value->values->filter); foreach ($filters as $filter) { $filter = explode(':', $filter); if ($filter[0] == 'image') { $pathData['path'] = '/images/'.$pathData['filename'].'&'.$filter[1]; } } }*/ } else { $this->putAjax('Директории для загрузки не существует "' . $k . '"!'); } if ($pathData) { $fileOne['f'] = $pathData['filename']; if (!empty($_POST[$value->values->name . '_t_' . $m[1]])) { $fileName = $_POST[$value->values->name . '_t_' . $m[1]]; } else { $fileName = $v['name']; } $fileOne['t'] = $fileName; $filesArray[] = $fileOne; } else { $this->putAjax('Не удалось загрузить файл "' . $k . '"!'); } } } //упорядочим массив $filesArrayOrdered = array(); foreach ($filesArray as $v) { if (isset($v)) { $filesArrayOrdered[] = $v; } } $values['type_' . $node['tree_type'] . '_' . $value->values->name] = count($filesArrayOrdered) ? serialize($filesArrayOrdered) : ''; } else { if ($_POST[$value->values->name . '_delete']) { $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow(); $currentTypeData = $currentTypeData->toArray(); $currentLastLoadedFile = $uploadDir . '/' . $currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name]; if (is_file($currentLastLoadedFile)) { unlink($currentLastLoadedFile); } $values['type_' . $node['tree_type'] . '_' . $value->values->name] = ''; } else { if ($form->hasFiles() && isset($typeFiles[$value->values->name])) { if (is_dir($uploadDir)) { $currentTypeData = $typeModel->select()->where('`type_' . $node['tree_type'] . '_id`=' . (int) $node['tree_id'])->fetchRow(); $currentTypeData = $currentTypeData->toArray(); $currentLastLoadedFile = $uploadDir . '/' . $currentTypeData['type_' . $node['tree_type'] . '_' . $value->values->name]; if (is_file($currentLastLoadedFile)) { unlink($currentLastLoadedFile); } $pathData = $form->moveUploadedFile($value->values->name, $uploadDir, md5(time() . rand()), true); /* if ($value->values->filter) { $filters = explode('|', $value->values->filter); foreach ($filters as $filter) { $filter = explode(':', $filter); if ($filter[0] == 'image') { $pathData['path'] = '/images/'.$pathData['filename'].'&'.$filter[1]; } } }*/ } else { $this->putAjax('Директории для загрузки не существует "' . $value->values->name . '"!'); } if ($pathData) { $values['type_' . $node['tree_type'] . '_' . $value->values->name] = $pathData['filename']; } else { $this->putAjax('Не удалось загрузить файл "' . $value->values->name . '"!'); } } else { if ($value->values->filter == 'required' && !isset($typeFiles[$value->values->name])) { $this->putAjax('Файл "' . $value->values->name . '" не был загружен!'); } else { if (!$values['type_' . $node['tree_type'] . '_' . $value->values->name]) { unset($values['type_' . $node['tree_type'] . '_' . $value->values->name]); } } } } } } } $typeModel->update($values, '`type_' . $node['tree_type'] . '_id`=' . (int) $elementId); echo 'Данные сохранены! <script type="text/javascript"> $(document).ready(function(){ setTimeout(function(){ loadTabs(' . (int) $elementId . '); }, 2000); }); </script> '; }
public static function delete($typeName) { $typesTable = new K_Tree_Types_Model(); $typesTable->select()->where('`type_name` = "' . $typeName . '"')->remove(); $query = new K_Db_Query(); $query->q('DROP TABLE IF EXISTS `type_' . $typeName . '`'); unlink(APP_PATH . '/typebloks/controller/' . $typeName . '.php'); unlink(APP_PATH . '/typebloks/templates/' . $typeName); unlink(APP_PATH . '/types/controller/' . $typeName . '.php'); unlink(APP_PATH . '/types/model/' . $typeName . '.php'); unlink(APP_PATH . '/admin/controller/gui/' . $typeName . '.php'); }
public static function f_loadAllTypes($params = array()) { $result = array(); $typesTable = new K_Tree_Types_Model(); $types = $typesTable->select()->fetchArray(); $result[0] = new stdClass(); $result[0]->value = 'Все'; $result[0]->baseline = 'undefined'; $result[1] = new stdClass(); $result[1]->value = 'Нет'; $result[1]->baseline = 'undefined'; for ($i = 0, $j = 2; $i < sizeof($types); $i++, $j++) { $result[$j] = new stdClass(); $result[$j]->value = $types[$i]['type_name']; $result[$j]->baseline = 'undefined'; } return $result; }