'TemplateType ID', 'menu_id' => 'First Level Menu ID', 'position' => 'Second Level Menu Position' ); function getMenuTemplatetypesIds ($menu_id=null) { $submenu_types_ids = array(); if (is_null($menu_id)) { $submenus = $this->find_all(); } else { $submenus = $this->where('menu_id', $menu_id)->find_all(); } foreach ($submenus as $submenu) { $submenu_types_ids[] = $submenu->aliasid; } return $submenu_types_ids; } function getSubmenu ($menu_id) { $result = array(); $i = 0; foreach ($this->where('menu_id', $menu_id)->orderby('position', 'sort')->find_all() as $element) { $model = ORM::factory($this->catalogToModel($element->catalog_name), $element->aliasid); if ($model->isExist()) { $item = new stdClass (); $item->id = $element->aliasid; $item->title = $model->list_name; $item->visibility = $model->isVisible(); { if ('types' == $element->catalog_name) { $type = new Theme_Link_Catalog_Type (); $type->setMacrophage(new Theme_Macrophage()); $type->setRecord($model); $type->setUrlPattern(Setting_Model::get(Setting_Model::S_ROUTE_TYPE_FIRST)); $url = $type->getUrl(); } $item->url = $url; } $item->catalog_name = $element->catalog_name; $result [] = $item; } } return $result; } function catalogToModel ($catalog_name) { $conversion = array( 'types'=>'templatetype', 'user_pages'=>'userpage', ); if (isset($conversion [$catalog_name])) { return $conversion [$catalog_name]; } return $catalog_name; } function updateVirtualMenuTypes ($menu_id, $types) { foreach( $types as $position => $type_id) { $submenu = $this->where('menu_id', $menu_id)->where('aliasid', $type_id)->find(); if($submenu->isExist()) { if($submenu->position != $position) { $submenu->position = $position; $submenu->save(); } } else { $this->catalog_name = "types"; $this->aliasid = $type_id; $this->menu_id = $menu_id; $this->position = $position; $this->save(); } } $this->deleteNotActiveSubmenu($types, 'aliasid', 'menu_id', $menu_id); } function checkVirtualMenuSubmenus ($virtual_menu, $submenu_types) { $virtual_menu_id = (int) $virtual_menu->id; $active_types_ids = array(); foreach ($submenu_types as $type) { $active_types_ids[] = $type->templatetype_id; $aliasid = $this->where('aliasid', $type->templatetype_id)->find(); if ($aliasid->isExist()) { if ($aliasid->menu_id != $virtual_menu_id) { if (ORM::factory('templatetype')->isTypeExists($type)) { $aliasid->menu_id = $virtual_menu_id; $aliasid->save(); } } } else { if (ORM::factory('templatetype')->isTypeExists($type)) { $this->catalog_name = 'types'; $this->aliasid = $type->templatetype_id; $this->menu_id = $virtual_menu_id; $this->sort = 0; $this->id = ''; $this->save(); } } } $this->deleteNotActiveSubmenu($active_types_ids, 'aliasid', 'menu_id', $virtual_menu_id); } function deleteNotActiveSubmenu ($active_ids_list, $active_filed, $where_model_field=null, $where_model_value=null) { if (!(is_null($where_model_field) && is_null($where_model_value))) { $records = $this->where($where_model_field, $where_model_value)->find_all(); } else { $records = $this->find_all(); } foreach ($records as $record) { if (!in_array($record->$active_filed, $active_ids_list)) { $record->delete(); } } } }