コード例 #1
0
ファイル: __grouplist.php プロジェクト: sunfun/Bagira.CMS
 public function defAction()
 {
     // Формируем список классов для быстрого добавления
     $types = ormClasses::get('user')->getAllInheritors();
     if (count($types) > 1) {
         $class_list = '';
         while (list($id, $name) = each($types)) {
             $bclass = ormClasses::get($id);
             $class_list .= '<li><a href="' . system::au() . '/users/user_add/0/' . $bclass->getSName() . '" >' . $bclass->getName() . '</a></li>';
         }
         $java = '<script> $("#usel").parent().css("width", "150px"); </script>';
         ui::newButton(lang::get('BTN_NEW_USER'), "/users/user_add", 'class_list', '<ul id="usel">' . $class_list . '</ul>' . $java);
     } else {
         ui::newButton(lang::get('BTN_NEW_USER'), "/users/user_add");
     }
     ui::newButton(lang::get('BTN_NEW_UGROUP'), "/users/group_add");
     $sel = new ormSelect('user_group');
     $sel->orderBy('name', asc);
     $table = new uiTable($sel);
     $table->showSearch(true);
     $table->addColumn('name', lang::get('USERS_TABLE_FIELD_5'), 0, true);
     $table->addColumn('children', lang::get('USERS_TABLE_FIELD_6'), 0, true, true, 'count');
     $table->defaultRight('userlist');
     $table->addRight('userlist', 'users', single);
     $table->addRight('group_upd', 'edit', single);
     $table->addRight('group_act', 'active', multi);
     $table->addRight('group_del', 'drop', multi);
     $table->setDelMessage(lang::get('USERS_DEL_TITLE2'), lang::get('USERS_DEL_TEXT2'));
     $table->setMultiDelMessage(lang::get('USERS_DEL_TITLE_MULTI2'), lang::get('USERS_DEL_TEXT_MULTI2'));
     return $table->getHTML();
 }
コード例 #2
0
ファイル: __val.php プロジェクト: sunfun/Bagira.CMS
 public function proc_upd()
 {
     if (isset($_POST['objchange'])) {
         // Обработчик мультиформы
         $form = new ormMultiForm('change');
         $class = ormClasses::get($form->getParam(0));
         if (!$class->isInheritor('handbook') || $class->getSName() == 'handbook') {
             system::redirect('/reference');
         }
         if (!user::issetRight('val_add')) {
             $form->withoutAdditions();
         }
         if (!user::issetRight('val_del')) {
             $form->withoutRemoving();
         }
         $form->process();
         if ($_POST['parram'] == 'apply') {
             system::redirect('/reference/values/' . $class->id());
         } else {
             system::redirect('/reference');
         }
     } else {
         // Обработчик для еденичного изменения класса
         $mini_action = substr(system::action(), -3);
         if (system::action() == "proc_upd") {
             // Говорим какой объект нужно изменить
             $obj = ormObjects::get(system::POST('obj_id'));
         } else {
             if (system::action() == "proc_add") {
                 // Говорим какой объект нужно создать
                 $obj = new ormObject();
                 $obj->setClass(system::POST('class_id'));
             }
         }
         // Если произошли ошибки, перенаправляем на главную страницу модуля
         if ($obj->issetErrors()) {
             system::redirect('/reference/values/' . system::POST('class_id'));
         }
         // Присваиваем пришедшие значения полям в объекте
         $obj->loadFromPost($mini_action);
         // Сохраняем изменения
         $obj_id = $obj->save();
         // Если объект не сохранился, выводим пользователю текст ошибки.
         if ($obj_id === false) {
             system::savePostToSession();
             ui::MessageBox(lang::get('TEXT_MESSAGE_ERROR'), $obj->getErrorListText());
             ui::selectErrorFields($obj->getErrorFields());
             $obj_id = empty($_POST['obj_id']) ? system::POST('class_id') : system::POST('obj_id');
             system::redirect('/reference/val_' . $mini_action . '/' . $obj_id);
         }
         // Если данные изменились корректно перенаправляем на соответствующию страницу
         if ($_POST['parram'] == 'apply') {
             system::redirect('/reference/val_upd/' . $obj_id);
         } else {
             system::redirect('/reference/values/' . $obj->getClass()->id());
         }
     }
 }
コード例 #3
0
ファイル: __values.php プロジェクト: sunfun/Bagira.CMS
 public function defAction()
 {
     if (!system::issetUrl(2)) {
         system::redirect('/reference');
     }
     if ($class = ormClasses::get(system::url(2))) {
         if (!$class->isInheritor('handbook') || $class->getSName() == 'handbook') {
             system::redirect('/reference');
         }
         ui::setNaviBar(lang::right('values'));
         ui::setHeader($class->getName());
         ui::setBackButton('/reference');
         if (user::issetRight('val_upd')) {
             $count = 0;
             $fields = $class->loadFields();
             foreach ($fields as $field) {
                 if ($field['f_view'] == 1) {
                     $count++;
                 }
             }
         } else {
             $count = 4;
         }
         $sel = new ormSelect($class->getSName());
         if ($count > 5) {
             ui::newButton(lang::get('BTN_NEW_LIST'), '/reference/val_add/' . system::url(2));
             $table = new uiTable($sel);
             $table->showSearch(true);
             $table->addColumn('name', 'Имя объекта');
             $table->addColumn('id', '#', 200);
             $table->defaultRight('val_upd');
             $table->addRight('val_upd', 'edit', single);
             $table->addRight('val_del', 'drop', multi);
             return $table->getHTML();
         } else {
             ui::newButton(lang::get('BTN_SAVE'), "javascript:sendForm('save');");
             ui::newButton(lang::get('BTN_APPLY'), "javascript:sendForm('apply');");
             $form = new ormMultiForm('change');
             $form->setData($sel);
             $form->showColumnID();
             $form->setRight('val_proc_upd');
             $form->moreParam(system::url(2));
             if (!user::issetRight('val_upd') || !user::issetRight('val_add')) {
                 $form->withoutAdditions();
             }
             if (!user::issetRight('val_del')) {
                 $form->withoutRemoving();
             }
             return $form->getHTML();
         }
     } else {
         system::redirect('/reference');
     }
 }
コード例 #4
0
ファイル: __tree.php プロジェクト: sunfun/Bagira.CMS
 private function createTree($parent, $TEMPLATE)
 {
     $items = '';
     while ($obj = ormClasses::getInheritor($parent)) {
         page::assign('subitem', $this->createTree($obj->id(), $TEMPLATE));
         page::assign('obj.id', $obj->id());
         page::assign('obj.url', system::au() . '/constructor/class_upd/' . $obj->id());
         page::assign('obj.name', $obj->getName());
         page::assign('obj.sname', $obj->getSName());
         page::assign('obj.parent', $obj->getParentId());
         $pach = '/css_mpanel/tree/images/classes/';
         $ico = file_exists(ROOT_DIR . $pach . $obj->getSName() . '.png') ? $obj->getSName() . '.png' : 'file1.gif';
         page::assign('obj.ico', $pach . $ico);
         $rights = '';
         reset($this->rights);
         while (list($right, $pict) = each($this->rights)) {
             $modul = $right == 'values' ? 'reference' : 'constructor';
             if (user::issetRight($right, $modul) || $pict == 'empty') {
                 if ($pict == 'empty') {
                     $rights .= page::parse($TEMPLATE['empty_right']);
                 } else {
                     $parse = true;
                     if ($right == 'values') {
                         $parse = $obj->isInheritor('handbook') && $obj->getSName() != 'handbook';
                     }
                     if ($right == 'class_del') {
                         $parse = !$obj->isSystem();
                     }
                     if ($parse) {
                         $del_button = $right == 'class_del' ? 'class="del_button"' : '';
                         page::assign('del_button', $del_button);
                         page::assign('right.url', system::au() . '/' . $modul . '/' . $right);
                         page::assign('right.title', lang::right($right, $modul));
                         page::assign('right.class', $pict);
                         $rights .= page::parse($TEMPLATE['right']);
                     } else {
                         $rights .= page::parse($TEMPLATE['empty_right']);
                     }
                 }
             }
         }
         page::assign('rights', $rights);
         $items .= page::parse($TEMPLATE['item']);
     }
     if (!empty($items)) {
         page::assign('items', $items);
         return page::parse($TEMPLATE['frame_items']);
     }
 }
コード例 #5
0
ファイル: __settings.php プロジェクト: sunfun/Bagira.CMS
 public function defAction()
 {
     if (file_exists(MODUL_DIR . '/structure/template/settings.tpl')) {
         include MODUL_DIR . '/structure/template/settings.tpl';
     }
     //  ui::newButton(lang::get('BTN_SAVE_ONLY'), "javascript:sendForm('save');");
     ui::newButton(lang::get('BTN_SAVE'), "javascript:sendForm('save');");
     ui::newButton(lang::get('BTN_APPLY'), "javascript:sendForm('apply');");
     if (isset($_SESSION['STRUCTURE_LIST_FLAG']) && $_SESSION['STRUCTURE_LIST_FLAG']) {
         ui::setCancelButton('/structure/list');
     } else {
         ui::setCancelButton('/structure/tree');
     }
     // Основные настройки
     page::assignArray(lang::get('STRUCTURE_FORM_FIELD'));
     page::assign('title_prefix', reg::getKey(ormPages::getPrefix() . '/title_prefix'));
     page::assign('keywords', reg::getKey(ormPages::getPrefix() . '/keywords'));
     page::assign('description', reg::getKey(ormPages::getPrefix() . '/description'));
     ui::CheckBox('cur_date', 1, reg::getKey('/structure/' . domains::curId() . '/cur_date'), lang::get('STRUCTURE_FORM_FIELD', 4));
     ui::CheckBox('no_view_no_edit', 1, reg::getKey(ormPages::getPrefix() . '/no_view_no_edit'), lang::get('STRUCTURE_FORM_FIELD', 7));
     ui::CheckBox('view_as_tree', 1, reg::getKey(ormPages::getPrefix() . '/view_as_tree'), lang::get('STRUCTURE_FORM_FIELD', 18));
     ui::CheckBox('auto_index', 1, reg::getKey(ormPages::getPrefix('search') . '/auto_index'), lang::get('STRUCTURE_FORM_FIELD', 19));
     $file = ROOT_DIR . '/robots_part_' . domains::curDomain()->getName() . '.txt';
     $robots = file_exists($file) ? file_get_contents($file) : '';
     page::assign('robots', $robots);
     // Форма редактирования шаблонов страниц
     $form = new uiMultiForm('page_tpl');
     $form->insideForm();
     $form->setData(templates::getByDestination());
     $form->addColumn('t_name', lang::get('STRUCTURE_TABLE_FIELD_5'), 300);
     $form->addColumn('t_file', lang::get('STRUCTURE_TABLE_FIELD_6'), 300, lang::get('STRUCTURE_TABLE_FIELD_7'));
     page::assign('page_tpl', $form->getHTML());
     // Форма редактирования шаблонов объектов
     $form = new uiMultiForm('obj_tpl');
     $form->insideForm();
     $form->setData(templates::getByDestination(1));
     $form->addColumn('t_name', lang::get('STRUCTURE_TABLE_FIELD_5'), 300);
     $form->addColumn('t_file', lang::get('STRUCTURE_TABLE_FIELD_6'), 300, lang::get('STRUCTURE_TABLE_FIELD_7'));
     page::assign('obj_tpl', $form->getHTML());
     // Управление отображением
     $classes = ormClasses::getPagesClassList();
     ui::SelectBox('no_view_classes', $classes, reg::getList(ormPages::getPrefix() . '/no_view'), 600, '&nbsp;', '', 'selectbox_multi_big');
     ui::SelectBox('no_edit_classes', $classes, reg::getList(ormPages::getPrefix() . '/no_edit'), 600, '&nbsp;', '', 'selectbox_multi_big');
     return page::parse($TEMPLATE['frame']);
 }
コード例 #6
0
ファイル: __userlist.php プロジェクト: sunfun/Bagira.CMS
 public function defAction()
 {
     // Определяем какие кнопки будут
     $types = ormClasses::get('user')->getAllInheritors();
     if (count($types) > 1) {
         $class_list = '';
         while (list($id, $name) = each($types)) {
             $bclass = ormClasses::get($id);
             $class_list .= '<a href="' . system::au() . '/users/user_add/' . system::url(2) . '/' . $bclass->getSName() . '" style="line-height:17px;">' . $bclass->getName() . '</a><br />';
         }
         ui::newButton(lang::get('BTN_NEW_USER'), "/users/user_add/" . system::url(2), 'class_list', $class_list);
     } else {
         ui::newButton(lang::get('BTN_NEW_USER'), "/users/user_add/" . system::url(2));
     }
     ui::setBackButton('/users');
     // Заголовок страницы
     if ($group = ormObjects::get(system::url(2))) {
         ui::setNaviBar($group->name);
         ui::setHeader(lang::right('userlist'));
     }
     // Выбираем пользователей
     $sel = new ormSelect('user');
     if (system::issetUrl(2) && system::url(2) != 0) {
         $sel->where('parents', '=', system::url(2));
     }
     $sel->orderBy('create_date', desc);
     // Строим таблицу
     $table = new uiTable($sel);
     $table->formatValues(true);
     $table->showSearch(true);
     $table->addColumn('login', lang::get('USERS_TABLE_FIELD_1'), 0, true);
     $table->addColumn('surname name', lang::get('USERS_TABLE_FIELD_2'), 0, true);
     $table->addColumn('create_date', lang::get('USERS_TABLE_FIELD_7'), 0, true, true, '', 1);
     $table->addColumn('last_visit', lang::get('USERS_TABLE_FIELD_3'), 0, true, true, '', 1);
     $table->addColumn('parents', lang::get('USERS_TABLE_FIELD_4'), 0, false, true);
     $table->defaultRight('user_upd');
     $table->addRight('user_upd', 'edit', single);
     $table->addRight('user_act', 'active', multi);
     $table->addRight('user_del', 'drop', multi);
     $table->setDelMessage(lang::get('USERS_DEL_TITLE'), lang::get('USERS_DEL_TEXT'));
     $table->setMultiDelMessage(lang::get('USERS_DEL_TITLE_MULTI'), lang::get('USERS_DEL_TEXT_MULTI'));
     return $table->getHTML();
 }
コード例 #7
0
ファイル: __list.php プロジェクト: sunfun/Bagira.CMS
 public function defAction()
 {
     $list = array();
     if ($class = ormClasses::get('handbook')) {
         $mas = $class->getAllInheritors();
         while (list($id, $sname) = each($mas)) {
             if ($sname != 'handbook') {
                 $h = ormClasses::get($sname);
                 $list[] = array('id' => $id, 'empty' => '', 'name' => $h->getName(), 'sname' => $sname);
             }
         }
     }
     $table = new uiTable($list, 1);
     $table->addColumn('empty', '', 20);
     $table->addColumn('name', 'Название справочника', 300);
     $table->addColumn('sname', 'Системное назавание', 300, 0, 0);
     $table->defaultRight('values');
     $table->addRight('values', 'edit', single);
     return $table->getHTML();
 }
コード例 #8
0
ファイル: ormSelect.php プロジェクト: sunfun/Bagira.CMS
 public function getObject()
 {
     if (!isset($this->cache['data'])) {
         $this->cache['data'] = $this->createQuery(1);
     }
     if (!isset($this->cache['num'])) {
         $this->reset();
     }
     $this->cache['num']++;
     if ($this->cache['num'] < count($this->cache['data'])) {
         $obj_data = $this->cache['data'][$this->cache['num']];
         if (($class = ormClasses::get($obj_data['o_class_id'])) && $class->isPage()) {
             return ormPages::get($obj_data);
         } else {
             return ormObjects::get($obj_data);
         }
     }
 }
コード例 #9
0
ファイル: uiTable.php プロジェクト: sunfun/Bagira.CMS
 private function columns($TEMPLATE)
 {
     $columns = '';
     reset($this->columns);
     while (list($key, $column) = each($this->columns)) {
         if (!isset($this->del_columns[$column['field']]) || $this->del_columns[$column['field']] != $this->count) {
             if ($column['title'] === 0) {
                 $column['title'] = ormClasses::get($this->select->getObjectsClass())->getFieldName($column['field']);
             }
             page::assign('title', $column['title']);
             $size = !empty($column['size']) ? 'width="' . $column['size'] . '"' : '';
             page::assign('width', $size);
             if ($column['sortable'] && !strpos($column['field'], ' ') && ($column['field'] != 'children' && $column['field'] != 'parents')) {
                 if ($this->isSelection && $this->select->orderField() == $column['field']) {
                     $parram = $this->select->orderParram();
                     page::assign('sort', $parram);
                     if ($parram == 'asc') {
                         page::assign('sort2', 'desc');
                     } else {
                         if ($parram == 'desc') {
                             page::assign('sort2', 'asc');
                         }
                     }
                 } else {
                     page::assign('sort', 'none');
                     if ($column['first_order'] == 0) {
                         page::assign('sort2', 'asc');
                     } else {
                         page::assign('sort2', 'desc');
                     }
                 }
                 page::assign('field', $column['field']);
                 $sortable = page::parse($TEMPLATE['column_order']);
             } else {
                 $sortable = '';
             }
             page::assign('column_order', $sortable);
             $columns .= page::parse($TEMPLATE['column']);
         }
     }
     page::assign('columns', $columns);
 }
コード例 #10
0
ファイル: tags.php プロジェクト: sunfun/Bagira.CMS
    /**
    * @return array(
                	'count' => 0,     		// Общее количество страниц
                	'pages' => array()      // Результат поиска. Список ID страниц с учетом параметра $limit
                );
    * @param array $tags - список ID тегов
    * @param int $limit - Максимальное количество страниц в результатах поиска
    * @param int $start_pos - Порядковый номер страницы, с которой начнется вывод результатов
    * @param array $classes_filter - Список ORM-классов, по которым ведется поиск
    * @desc Формирует список страниц имеющих указанные теги.
    */
    static function find($tags, $limit = 10, $start_pos = 0, $classes_filter = array())
    {
        if (!empty($tags)) {
            $q_tags = '';
            foreach ($tags as $id) {
                $or = empty($q_tags) ? '' : ' AND ';
                $q_tags .= $or . 't_id = "' . $id . '"';
            }
            // Генерируем sql-запрос
            if (!empty($q_tags)) {
                // Устанавливаем видимость объектов с учестом прав доступа пользователя
                $state = system::$isAdmin && reg::getKey(ormPages::getPrefix() . '/no_view_no_edit') ? '= 2' : '> 0';
                $groups = '';
                $m = user::getGroups();
                while (list($key, $val) = each($m)) {
                    $groups .= ' or r_group_id = "' . $key . '"';
                }
                // Формируем фильтр по классам
                $cf = '';
                if (!empty($classes_filter) && is_array($classes_filter)) {
                    while (list($num, $class) = each($classes_filter)) {
                        if ($c = ormClasses::get($class)) {
                            $or = empty($cf) ? '' : ' OR ';
                            $cf .= $or . 'o_class_id = "' . $c->id() . '"';
                        }
                    }
                    if (!empty($cf)) {
                        $cf = 'and (' . $cf . ')';
                    }
                }
                // Получаем количество объектов
                $sql = 'SELECT count(tr_obj_id) FROM (SELECT tr_obj_id
	            		FROM <<tags>>, <<tags_rels>>, <<rights>>, <<objects>>, <<pages>>
	            		WHERE t_id = tr_tag_id and
	            			tr_obj_id = r_obj_id and
	            			r_state ' . $state . ' and
	            			(
	            				r_group_id is NULL or
	            				r_group_id = "' . user::get('id') . '"
	            				' . $groups . '
	            			) and
	            			(' . $q_tags . ') and
	            			tr_obj_id = o_id and
	            			o_id = p_obj_id and
	            			active = 1 ' . $cf . '
	            		GROUP BY tr_obj_id) t;';
                $count = db::q($sql, value);
                // Получаем список объектов
                if ($count > 0) {
                    $sql = 'SELECT tr_obj_id page_id
		            		FROM <<tags>>, <<tags_rels>>, <<rights>>, <<objects>>, <<pages>>
		            		WHERE  t_id = tr_tag_id and
	            			    tr_obj_id = r_obj_id and
		            			r_state ' . $state . ' and
		            			(
		            				r_group_id is NULL or
		            				r_group_id = "' . user::get('id') . '"
		            				' . $groups . '
		            			) and
		            			(' . $q_tags . ') and
		            			tr_obj_id = o_id and
		            			o_id = p_obj_id and
		            			active = 1 ' . $cf . '
		            		GROUP BY tr_obj_id';
                    if (empty($start_pos)) {
                        $sql .= ' LIMIT ' . $limit . ';';
                    } else {
                        $sql .= ' LIMIT ' . $start_pos . ', ' . $limit . ';';
                    }
                    $mas = db::q($sql, records);
                } else {
                    $mas = array();
                }
                return array('count' => $count, 'pages' => $mas);
            }
        }
    }
コード例 #11
0
ファイル: __settings.php プロジェクト: sunfun/Bagira.CMS
 function getClassName($val, $obj)
 {
     if ($class = ormClasses::get($val)) {
         return $class->getName();
     }
 }
コード例 #12
0
ファイル: ormPage.php プロジェクト: sunfun/Bagira.CMS
 /**
  * @return null
  * @param integer $obj_id - ID объекта, если не указан - дальнейшая работа в режиме добавления.
  * @param boolean $with_rights - Если TRUE, будут учитываться права текущего пользователя.
  * @desc Создание объекта и получение данных.
  */
 public function __construct($obj_id = 0, $with_rights = true)
 {
     if (!empty($obj_id) && is_numeric($obj_id)) {
         $obj_id = system::checkVar($obj_id, isInt);
         if ($with_rights) {
             $where = ormPages::getSqlForRights();
             $table = ', <<rights>>';
             $select = ', MAX(r_state) r_state';
         } else {
             $where = $table = $select = '';
         }
         $sql = 'SELECT *' . $select . '
     	    		FROM <<objects>>, <<pages>>' . $table . '
     				WHERE o_id = "' . $obj_id . '" and
     					  p_obj_id = o_id' . $where . ';';
         $row = db::q($sql, record);
         if ($row !== false && !empty($row)) {
             $this->class = ormClasses::get($row['o_class_id']);
             if ($this->class->isPage()) {
                 $this->id = $obj_id;
                 $this->name = $row['o_name'];
                 $this->create_date = $row['o_create_date'];
                 $this->change_date = $row['o_change_date'];
                 $this->to_trash = $row['o_to_trash'];
                 $this->right_state = isset($row['r_state']) ? $row['r_state'] : 0;
                 // Информация о странице
                 while (list($key, $val) = each($row)) {
                     if (in_array($key, $this->page_fields)) {
                         $this->cur_prop[$key] = $val;
                     }
                 }
             } else {
                 $this->newError(44, 'Вы пытаетесь загрузить обычный объект с ID = ' . $obj_id . '.
                 		Используйте для этого ormObjects::get();!');
             }
         } else {
             $this->newError(45, 'Невозможно загрузить данные ORM-страницы!');
         }
     } else {
         if (is_array($obj_id) && isset($obj_id['o_id']) && isset($obj_id['o_class_id'])) {
             /*
             Загрузка данных в объект из другого источника (ormSelect::getObject(), ormPageCollection::getPageOfSection()).
             Используется для уменьшения дублирующих запросов, например при выборке
             объектов одного класса.
             */
             $this->id = system::checkVar($obj_id['o_id'], isInt);
             $this->class = ormClasses::get($obj_id['o_class_id']);
             if ($this->class->isPage()) {
                 if (isset($obj_id['o_name'])) {
                     $this->name = system::checkVar($obj_id['o_name'], isString);
                 }
                 if (isset($obj_id['o_create_date'])) {
                     $this->create_date = $obj_id['o_create_date'];
                 }
                 if (isset($obj_id['o_change_date'])) {
                     $this->change_date = $obj_id['o_change_date'];
                 }
                 if (isset($obj_id['o_to_trash'])) {
                     $this->to_trash = $obj_id['o_to_trash'];
                 }
                 if (isset($obj_id['r_state'])) {
                     $this->right_state = $obj_id['r_state'];
                 }
                 // Установка значений основных полей
                 $this->loadFields();
                 while (list($key, $field) = each($this->fields)) {
                     if ($field['f_type'] > 1 && $field['f_type'] < 90) {
                         $this->cur_prop[$key] = isset($obj_id[$key]) ? $obj_id[$key] : $this->empty;
                     }
                 }
                 // Информация о странице
                 while (list($key, $val) = each($obj_id)) {
                     if (in_array($key, $this->page_fields)) {
                         $this->cur_prop[$key] = $val;
                     }
                 }
             } else {
                 $this->newError(44, 'Вы пытаетесь загрузить обычный объект с ID = ' . $obj_id['o_id'] . '.
                 		Используйте для этого ormObjects::get();!');
             }
         }
     }
 }
コード例 #13
0
ファイル: macros.php プロジェクト: sunfun/Bagira.CMS
 /**
  * @return HTML
  * @param int $obj_id_or_class - ID раздела сайта или системное название ORM-класса.
  * @param string $group_name - Название группы, поля которой необходимо вывести. Если 0, выводятся все видимые поля.
  * @param boolean $spec - Если 0, выводятся все видимые поля. Если 1, только поля помеченные галочкой "специальное".
  * @param string $templ_name - Шаблон оформления, по которому будет строится список полей
  * @desc МАКРОС: Вернет список полей (значений) раздела сайта в соответствующем оформлении
  */
 public function fieldList($obj_id_or_class, $group_name = 0, $spec = 0, $templ_name = '_fields_list')
 {
     $templ_file = '/structure/objects/' . $templ_name . '.tpl';
     $TEMPLATE = page::getTemplate($templ_file);
     if (!is_array($TEMPLATE)) {
         return page::errorNotFound('structure.fieldList', $templ_file);
     }
     $fields = $obj = '';
     // Определяем класс
     if (is_numeric($obj_id_or_class) && ($obj = ormPages::get($obj_id_or_class))) {
         $class = $obj->getClass();
     } else {
         $class = ormClasses::get($obj_id_or_class);
     }
     // Получаем список полей
     if ($class instanceof ormClass) {
         $spec = !empty($spec) ? $class->loadSpecFields() : $class->loadFields();
     }
     while (list($sname, $field) = each($spec)) {
         if (empty($group_name) || $group_name == $field['fg_sname']) {
             if (empty($field['f_type'])) {
                 // Разделители полей
                 page::assign('size', $field['f_max_size']);
                 page::assign('title', $field['f_name']);
                 if (!empty($field['f_name']) && isset($TEMPLATE['separator_text'])) {
                     $fields .= page::parse($TEMPLATE['separator_text']);
                 } else {
                     $fields .= page::parse($TEMPLATE['separator']);
                 }
             } else {
                 // Парсим поля страницы
                 page::assign('field.id', $field['f_id']);
                 page::assign('field.name', $field['f_name']);
                 page::assign('field.sname', $sname);
                 if ($obj instanceof ormObject) {
                     page::assign('field.value', $obj->__get($sname));
                     page::assign('field._value', $obj->__get('_' . $sname));
                 }
                 if (isset($TEMPLATE['field_' . $sname])) {
                     $fields .= page::parse($TEMPLATE['field_' . $sname]);
                 } else {
                     if ($field['f_type'] > 89 && $field['f_type'] < 101 && isset($TEMPLATE['field_list'])) {
                         $fields .= page::parse($TEMPLATE['field_list']);
                     } else {
                         $fields .= page::parse($TEMPLATE['field']);
                     }
                 }
             }
         }
     }
     if (!empty($fields)) {
         page::assign('fields', $fields);
         return page::parse($TEMPLATE['frame']);
     }
 }
コード例 #14
0
ファイル: __page.php プロジェクト: sunfun/Bagira.CMS
    public function upd()
    {
        // Проверяем наличие шаблонов
        $templs = templates::getByDestination(0, true);
        if (empty($templs)) {
            ui::MessageBox(lang::get('STRUCTURE_TEMPL_NOT_FOUND'), lang::get('STRUCTURE_TEMPL_NOT_FOUND2'));
            system::redirect('/structure/settings#tabs-page_tpl');
        }
        // Указываем для какого объекта строить форму
        if (system::action() == "upd") {
            // Изменение страницы
            if (system::url(2) == 0) {
                system::redirect('/structure/settings');
            }
            $obj = ormPages::get(system::url(2));
            if ($obj instanceof ormPage) {
                $parent_id = $obj->getParentId();
                ui::setHeader($obj->name);
                ui::setNaviBar(lang::get('TEXT_EDIT') . $obj->getClass()->getPadej(1));
            }
            $class_list = '';
            $right = 'page_proc_upd';
        } else {
            if (system::action() == "add") {
                // Добавление страницы
                $class_name = system::issetUrl(3) ? system::url(3) : ormPages::getPopularClass(system::url(2));
                if (!($class = ormClasses::get($class_name))) {
                    system::redirect('/structure/tree');
                }
                if (in_array($class->id(), reg::getList(ormPages::getPrefix() . '/no_edit'))) {
                    system::redirect('/structure/tree');
                }
                if (system::issetUrl(2) && system::url(2) != 0) {
                    $parent = ormPages::get(system::url(2));
                    ui::setNaviBar($parent->name, '/structure/list/' . $parent->id);
                }
                ui::setHeader(lang::get('TEXT_ADD') . $class->getPadej(1));
                // Если это добавление нового объекта
                $obj = new ormPage();
                $obj->setParent(system::url(2));
                $obj->setClass($class_name);
                $obj->view_in_menu = 1;
                $obj->view_submenu = 1;
                $obj->active = 1;
                $obj->in_search = 1;
                $obj->in_index = 1;
                $obj->publ_date = date('d.m.Y H:i:s');
                // Наследуем параметры от родителя
                // Шаблоны
                $parent_id = $obj->issetParents() ? $obj->getParentId() : 0;
                $templ = templates::getPopularForSection($parent_id);
                $def_templ_1 = $obj->getClass()->getDefTemplate(0);
                $def_templ_2 = $obj->getClass()->getDefTemplate(1);
                $obj->template_id = $def_templ_1 != 0 ? $def_templ_1 : $templ[0];
                $obj->template2_id = $def_templ_2 != 0 ? $def_templ_2 : $templ[1];
                $parent_id = system::url(2);
                // Количество элементов на странице
                $this->getPopularValue($obj, 'number_of_items', 10);
                // Способ сортировки
                $this->getPopularValue($obj, 'order_by', '');
                // Формируем список классов для быстрого изменения класса объекта
                $types = ormClasses::get('section')->getAllInheritors();
                $no_edit = reg::getList(ormPages::getPrefix() . '/no_edit');
                $elem_list = $cat_list = '';
                while (list($id, $name) = each($types)) {
                    if (!in_array($id, $no_edit)) {
                        $bc = ormClasses::get($id);
                        $pach = '/css_mpanel/tree/images/';
                        $ico = 'classes/' . $bc->getSName() . '.png';
                        if (!file_exists(ROOT_DIR . $pach . $ico)) {
                            $ico = 'file1.gif';
                        }
                        if ($bc->isInheritor('category') || $bc->getSName() == 'section') {
                            $cat_list .= '
				    	<li><img src="' . $pach . $ico . '">
				    	<a href="' . system::au() . '/structure/page_add/' . $parent_id . '/' . $bc->getSName() . '">' . $bc->getName() . '</a></li>';
                        } else {
                            $elem_list .= '
				    	<li ><img src="' . $pach . $ico . '">
				    	<a href="' . system::au() . '/structure/page_add/' . $parent_id . '/' . $bc->getSName() . '">' . $bc->getName() . '</a></li>';
                        }
                    }
                }
                $class_list = '<ul>' . $cat_list . '</ul><ul>' . $elem_list . '</ul>';
                $right = 'page_proc_add';
            }
        }
        page::assign('right', $right);
        // Если произошли ошибки, перенаправляем на главную страницу модуля
        if (!$obj instanceof ormPage || $obj->issetErrors()) {
            system::redirect('/structure/tree');
        }
        // Устанавливаем кнопки для формы
        if (isset($_SESSION['STRUCTURE_LIST_FLAG']) && $_SESSION['STRUCTURE_LIST_FLAG']) {
            ui::setCancelButton('/structure/list/' . $parent_id);
        } else {
            ui::setCancelButton('/structure/tree');
        }
        if ($obj->isEditable()) {
            ui::newButton(lang::get('BTN_SAVE'), "javascript:sendForm('save');");
            ui::newButton(lang::get('BTN_APPLY'), "javascript:sendForm('apply');");
        }
        // Создаем форму и выводим ее на страницу
        $form = new ormEditForm($obj, $right);
        $form->setORMList($class_list);
        $form->addPadding('param', 9, 1);
        // Выбор шаблона оформления страниц
        $form->addField('param', 10, '', lang::get('STRUCTURE_TEMPLATE'), $this->getTemplateBox('template_id', $templs, $obj->template_id));
        // Выбор шаблона оформления объектов
        $form->addField('param', 11, '', lang::get('STRUCTURE_TEMPLATE2'), $this->getTemplateBox('template2_id', templates::getByDestination(1, true), $obj->template2_id, 1));
        // Выводим ID и URL страницы
        $this->getPageInfo($obj, $form);
        $form->newTabs(lang::get('STRUCTURE_TABS_RIGHT'), rights::getListForObject($obj, system::action()));
        //$form->newTabs(lang::get('STRUCTURE_TABS_RESTORE'), '&nbsp;');
        return $form->getHTML();
    }
コード例 #15
0
ファイル: searchIndex.php プロジェクト: sunfun/Bagira.CMS
    /**
    * @return array(
                	'count' => 0,     		// Общее количество страниц
                	'pages' => array()      // Результат поиска. Список ID страниц с учетом параметра $limit
                );
    * @param string $words - Поисковой запрос
    * @param int $limit - Максимальное количество страниц в результатах поиска
    * @param int $start_pos - Порядковый номер страницы, с которой начнется вывод результатов
    * @param array $classes_filter - Список ORM-классов, по которым ведется поиск
    * @desc Формирует список страниц удовлетворяющих поисковой фразе.
    */
    static function find($words, $limit = 10, $start_pos = 0, $classes_filter = array())
    {
        if (!empty($words)) {
            // Разбиваем запрос на отдельные слова
            $tmp = self::splitString($words);
            $q_words = '';
            foreach ($tmp as $word) {
                $word = self::morphGetRoot($word);
                if (!empty($word) && (strlen($word) > 2 || is_numeric($word))) {
                    $or = empty($q_words) ? '' : ' OR ';
                    $q_words .= $or . 'w_name Like "' . $word . '%"';
                }
            }
            // Генерируем sql-запрос
            if (!empty($q_words)) {
                // Устанавливаем видимость объектов с учестом прав доступа пользователя
                $state = system::$isAdmin && reg::getKey(ormPages::getPrefix() . '/no_view_no_edit') ? '= 2' : '> 0';
                $groups = '';
                $m = user::getGroups();
                while (list($key, $val) = each($m)) {
                    $groups .= ' or r_group_id = "' . $key . '"';
                }
                // Формируем фильтр по классам
                $cf = '';
                if (!empty($classes_filter) && is_array($classes_filter)) {
                    while (list($num, $class) = each($classes_filter)) {
                        if ($c = ormClasses::get($class)) {
                            $or = empty($cf) ? '' : ' OR ';
                            $cf .= $or . 'o_class_id = "' . $c->id() . '"';
                        }
                    }
                    if (!empty($cf)) {
                        $cf = 'and (' . $cf . ')';
                    }
                }
                // Получаем количество объектов
                $sql = 'SELECT count(sr_obj_id) FROM (SELECT sr_obj_id
	            		FROM <<search_words>>, <<search_rankings>>, <<rights>>, <<objects>>, <<pages>>
	            		WHERE w_id = sr_word_id and
	            			sr_lang_id = "' . languages::curId() . '" and
	            			sr_domain_id = "' . domains::curId() . '" and
	            			sr_obj_id = r_obj_id and
	            			r_state ' . $state . ' and
	            			(
	            				r_group_id is NULL or
	            				r_group_id = "' . user::get('id') . '"
	            				' . $groups . '
	            			) and
	            			(' . $q_words . ') and
	            			sr_obj_id = o_id and
	            			o_id = p_obj_id and
	            			active = 1 ' . $cf . '
	            		GROUP BY sr_obj_id) t;';
                $count = db::q($sql, value);
                // Получаем список объектов
                if ($count > 0) {
                    $sql = 'SELECT sr_obj_id page_id, SUM(sr_rank) rank
		            		FROM <<search_words>>, <<search_rankings>>, <<rights>>, <<objects>>, <<pages>>
		            		WHERE w_id = sr_word_id and
		            			sr_lang_id = "' . languages::curId() . '" and
		            			sr_domain_id = "' . domains::curId() . '" and
		            			sr_obj_id = r_obj_id and
		            			r_state ' . $state . ' and
		            			(
		            				r_group_id is NULL or
		            				r_group_id = "' . user::get('id') . '"
		            				' . $groups . '
		            			) and
		            			(' . $q_words . ') and
		            			sr_obj_id = o_id and
		            			o_id = p_obj_id and
		            			active = 1 ' . $cf . '
		            		GROUP BY sr_obj_id
		            		ORDER BY SUM(sr_rank) DESC';
                    if (empty($start_pos)) {
                        $sql .= ' LIMIT ' . $limit . ';';
                    } else {
                        $sql .= ' LIMIT ' . $start_pos . ', ' . $limit . ';';
                    }
                    $mas = db::q($sql, records);
                } else {
                    $mas = array();
                }
                return array('count' => $count, 'pages' => $mas);
            }
        }
    }
コード例 #16
0
ファイル: __list.php プロジェクト: sunfun/Bagira.CMS
    public function defAction()
    {
        $_SESSION['STRUCTURE_LIST_FLAG'] = 1;
        // Если страниц нет, предлагаем добавить новую
        if (ormPages::getCountOfSection(0) == 0) {
            ui::MessageBox(lang::get('STRUCTURE_PAGE_NOT_FOUND'), lang::get('STRUCTURE_PAGE_NOT_FOUND2'));
            system::redirect('/structure/page_add');
        }
        $obj_id = system::issetUrl(2) ? system::url(2) : 0;
        function getPageNotice($page)
        {
            $notice = '';
            if ($page->is_home_page) {
                $notice = lang::get('STRUCTURE_TREE_TEXT12');
            }
            if ($page->other_link != '') {
                $notice = lang::get('STRUCTURE_TREE_TEXT32');
            }
            if (!$page->view_in_menu) {
                if (!empty($notice)) {
                    $notice .= ', ';
                }
                $notice .= lang::get('STRUCTURE_TREE_TEXT22');
            }
            if (!empty($notice)) {
                return '(' . $notice . ')';
            } else {
                return '';
            }
        }
        // Вывод дерева объектов
        $tree = new ormTree(328, 57);
        $tree->setClass('ormPage');
        $tree->setRoot(0, reg::getKey(ormPages::getPrefix() . '/title_prefix'), 'list/0');
        $tree->setNotice('getPageNotice');
        $tree->setRightEdit('list');
        $tree->setRightActive('page_proc_act');
        $tree->setRightRemove('page_proc_moveto');
        $tree->setRightAjaxLoad('list');
        $tree->setDelMessage(lang::get('STRUCTURE_DEL_TITLE'), lang::get('STRUCTURE_DEL_TEXT'));
        $tree->addRight('page_upd', lang::right('page_upd'), 'compose_image');
        $tree->addRight('page_add', lang::right('page_add'), 'add_image');
        //, 'class_list', $class_list
        ui::setLeftPanel($tree->getHTML());
        // Заголовок страницы
        ui::setHeader(lang::right('tree'));
        if (!empty($obj_id) && ($obj = ormPages::get($obj_id))) {
            ui::setNaviBar(lang::right('list'));
            ui::setHeader($obj->name);
            ui::setBackButton('/structure/list/' . $obj->getParentId());
        } else {
            $obj_id = 0;
        }
        // Формируем список классов для быстрого добавления
        $class_name = ormPages::getPopularClass($obj_id);
        $class = ormClasses::get($class_name);
        $types = ormClasses::get('section')->getAllInheritors();
        $no_edit = reg::getList(ormPages::getPrefix() . '/no_edit');
        $elem_list = $cat_list = '';
        while (list($id, $name) = each($types)) {
            if (!in_array($id, $no_edit)) {
                $bc = ormClasses::get($id);
                $pach = '/css_mpanel/tree/images/';
                $ico = 'classes/' . $bc->getSName() . '.png';
                if (!file_exists(ROOT_DIR . $pach . $ico)) {
                    $ico = 'file1.gif';
                }
                if ($bc->isInheritor('category') || $bc->getSName() == 'section') {
                    $cat_list .= '
			    	<li><img src="' . $pach . $ico . '">
			    	<a href="' . system::au() . '/structure/page_add/' . $obj_id . '/' . $bc->getSName() . '">' . $bc->getName() . '</a></li>';
                } else {
                    $elem_list .= '
			    	<li ><img src="' . $pach . $ico . '">
			    	<a href="' . system::au() . '/structure/page_add/' . $obj_id . '/' . $bc->getSName() . '">' . $bc->getName() . '</a></li>';
                }
            }
        }
        $class_list = '<ul>' . $cat_list . '</ul><ul>' . $elem_list . '</ul>';
        ui::newButton(lang::get('PANEL_BTN_ADD_PART') . $class->getPadej(0), "/structure/page_add/" . $obj_id, 'class_list', $class_list);
        // Формируем выборку страниц для таблицы
        $sel = new ormSelect();
        $sel->findInPages();
        $sel->where('parents', '=', $obj_id);
        // Определяем способ сортировки списка
        $order_by = !empty($obj_id) ? $obj->order_by : '';
        if (!empty($order_by)) {
            $pos = strpos($order_by, ' ');
            if ($pos) {
                $parram = substr($order_by, $pos + 1);
                $order_by = substr($order_by, 0, $pos);
            } else {
                $parram = '';
            }
            $sel->orderBy($order_by, $parram);
        } else {
            $sel->orderBy(position, asc);
        }
        // Вывод таблицы
        $table = new uiTable($sel);
        $table->formatValues(true);
        $table->showSearch(true);
        $table->hideEmptyColumns(true);
        $table->addColumn('name', lang::get('STRUCTURE_TABLE_FIELD_1'), 500, true);
        $table->addColumn('image', lang::get('STRUCTURE_TABLE_FIELD_2'), 400, false, false);
        $table->addColumn('price', lang::get('STRUCTURE_TABLE_FIELD_3'), 400);
        $table->addColumn('publ_date', lang::get('STRUCTURE_TABLE_FIELD_4'), 400);
        $table->defaultRight('page_upd');
        $table->addRight('page_upd', 'edit', single);
        $table->addRight('list', 'list', single);
        $table->addRight('page_history', 'history', single);
        $table->addRight('page_proc_act', 'active', multi);
        $table->addRight('page_del', 'drop', multi);
        $table->setDelMessage(lang::get('STRUCTURE_DEL_TITLE'), lang::get('STRUCTURE_DEL_TITLE'));
        $table->setMultiDelMessage(lang::get('STRUCTURE_DEL_TITLE_MULTI'), lang::get('STRUCTURE_DEL_TEXT_MULTI'));
        return $table->getHTML();
    }
コード例 #17
0
ファイル: __class.php プロジェクト: sunfun/Bagira.CMS
 public function upd()
 {
     $is_page = false;
     if (file_exists(MODUL_DIR . '/constructor/template/class.tpl')) {
         include MODUL_DIR . '/constructor/template/class.tpl';
     }
     if (system::action() == "upd") {
         // форма обновления информации
         $class = new ormClass(system::url(2));
         if ($class->id() == '') {
             system::redirect('/constructor/tree');
         }
         page::assign('obj.class_name', $class->getName());
         page::assign('obj.sname', $class->getSName());
         page::assign('obj.text', $class->getPadej());
         page::assign('obj.id', $class->id());
         $system = $class->isSystem();
         $is_list = $class->isList();
         $is_page = $class->isPage();
         $is_user = $class->isInheritor('user');
         $base_class = $class->getBaseClass();
         page::assign('right', 'class_proc_upd');
         // Выводим дерево для отображения структуры класса
         $tree = new ormFieldsTree();
         page::assign('fields', $tree->getHTML($class));
     } else {
         if (system::action() == "add") {
             // форма добавления информации
             $system = $is_list = $uniqum = $base_class = 0;
             // Проверяем существует ли родитель?
             if (system::issetUrl(2)) {
                 $parent = new ormClass(system::url(2));
                 if ($parent->id() == '') {
                     system::redirect('/constructor/tree');
                 }
                 $is_list = $parent->isList();
                 $is_page = $parent->isPage();
                 $is_user = $parent->isInheritor('user');
             } else {
                 $is_user = false;
             }
             page::assign('obj.id', system::url(2));
             page::assign('right', 'class_proc_add');
         }
     }
     if ($is_page) {
         ui::SelectBox('class_list', ormClasses::getPagesClassList(), $base_class, 400, '&nbsp;');
         ui::SelectBox('template_list1', templates::getByDestination(0, true), isset($class) ? $class->getDefTemplate(0) : 0, 400, '&nbsp;');
         ui::SelectBox('template_list2', templates::getByDestination(1, true), isset($class) ? $class->getDefTemplate(1) : 0, 400, '&nbsp;');
         page::fParse('page_fields', $TEMPLATE['page_fields']);
     } else {
         if ($is_user) {
             page::fParse('page_fields', $TEMPLATE['user_fields']);
         } else {
             page::assign('page_fields', '');
         }
     }
     if (system::action() == "add" || !$class->isSystem()) {
         ui::newButton(lang::get('BTN_SAVE'), "javascript:sendForm('save');");
         ui::newButton(lang::get('BTN_APPLY'), "javascript:sendForm('apply');");
         ui::setCancelButton('/constructor');
     } else {
         ui::setBackButton('/constructor');
     }
     page::assignArray(lang::get('CONSTR_FORM_FIELD'));
     page::assignSavingPost();
     ui::CheckBox('system', 1, $system, lang::get('CONSTR_FORM_FIELD', 3));
     ui::CheckBox('is_list', 1, $is_list, lang::get('CONSTR_FORM_FIELD', 4));
     return page::parse($TEMPLATE['frame'], 1);
 }
コード例 #18
0
ファイル: ormObject.php プロジェクト: sunfun/Bagira.CMS
 public function setClass($sname)
 {
     if (empty($this->id)) {
         $this->class = ormClasses::get($sname);
     } else {
         return false;
     }
 }
コード例 #19
0
ファイル: __tree.php プロジェクト: sunfun/Bagira.CMS
    public function defAction()
    {
        if (!reg::getKey(ormPages::getPrefix() . '/view_as_tree')) {
            system::redirect('/structure/list');
        }
        $_SESSION['STRUCTURE_LIST_FLAG'] = 0;
        // Если страниц нет, предлагаем добавить новую
        if (ormPages::getCountOfSection(0) == 0) {
            ui::MessageBox(lang::get('STRUCTURE_PAGE_NOT_FOUND'), lang::get('STRUCTURE_PAGE_NOT_FOUND2'));
            system::redirect('/structure/page_add');
        }
        $types = ormClasses::get('section')->getAllInheritors();
        $no_edit = reg::getList(ormPages::getPrefix() . '/no_edit');
        $elem_list = $cat_list = '';
        while (list($id, $name) = each($types)) {
            if (!in_array($id, $no_edit)) {
                $obj = ormClasses::get($id);
                $pach = '/css_mpanel/tree/images/';
                $ico = 'classes/' . $obj->getSName() . '.png';
                if (!file_exists(ROOT_DIR . $pach . $ico)) {
                    $ico = 'file1.gif';
                }
                if ($obj->isInheritor('category') || $obj->getSName() == 'section') {
                    $cat_list .= '
			    	<li><img src="' . $pach . $ico . '">
			    	<a name="' . system::au() . '/structure/page_add/%obj_id%/' . $obj->getSName() . '" href="">' . $obj->getName() . '</a></li>';
                } else {
                    $elem_list .= '
			    	<li ><img src="' . $pach . $ico . '">
			    	<a name="' . system::au() . '/structure/page_add/%obj_id%/' . $obj->getSName() . '" href="">' . $obj->getName() . '</a></li>';
                }
            }
        }
        $class_list = '<ul>' . $cat_list . '</ul><ul>' . $elem_list . '</ul>';
        function getPageNotice($page)
        {
            $notice = '';
            if ($page->is_home_page) {
                $notice = lang::get('STRUCTURE_TREE_TEXT1');
            }
            if ($page->other_link != '') {
                $notice = lang::get('STRUCTURE_TREE_TEXT3');
            }
            if (!$page->view_in_menu) {
                if (!empty($notice)) {
                    $notice .= ', ';
                }
                $notice .= lang::get('STRUCTURE_TREE_TEXT2');
            }
            if (!empty($notice)) {
                return '(' . $notice . ')';
            } else {
                return '';
            }
        }
        $tree = new ormTree(975, 265);
        $tree->setClass('ormPage');
        $tree->setRoot(0, reg::getKey(ormPages::getPrefix() . '/title_prefix'), 'settings');
        $tree->setRightEdit('page_upd');
        $tree->setRightActive('page_proc_act');
        $tree->setRightRemove('page_proc_moveto');
        $tree->setRightAjaxLoad('tree');
        $tree->setDelMessage(lang::get('STRUCTURE_DEL_TITLE'), lang::get('STRUCTURE_DEL_TEXT'));
        $tree->addRight('getUrl()', lang::get('STRUCTURE_PAGE_URL'), 'view_image');
        $tree->addEmptyRight();
        $tree->addEmptyRight();
        $tree->addRight('page_add', lang::right('page_add'), 'add_image', 0, 1, 'class_list', $class_list);
        $tree->addEmptyRight();
        $tree->addRight('list', lang::right('list'), 'list_block_image');
        $tree->addEmptyRight();
        $tree->addRight('page_upd', lang::right('page_upd'), 'compose_image');
        $tree->addRight('page_copy', lang::right('page_copy'), 'copy_image', 0, 0);
        $tree->addRight('page_history', lang::right('page_history'), 'history_image', 0, 0);
        $tree->addRight('page_del', lang::right('page_del'), 'drop_image', 1, 0);
        $tree->setNotice('getPageNotice');
        return $tree->getHTML();
    }
コード例 #20
0
ファイル: ormClass.php プロジェクト: sunfun/Bagira.CMS
    private function createClass()
    {
        $sql = 'SELECT count(c_id)
  					 FROM <<classes>>
        			 WHERE c_sname = "' . $this->sname . '";';
        if (db::q($sql, value) == 0) {
            $nul = $this->base_class == NULL ? '' : 'c_base_class = "' . $this->base_class . '",';
            $nul .= $this->parent_id == NULL ? '' : 'c_parent_id = "' . $this->parent_id . '",';
            $parent = $this->getParent();
            $this->is_page = $parent instanceof ormClass ? $parent->isPage() : 0;
            $sql = 'INSERT INTO <<classes>>
						SET c_name = "' . $this->name . '",
							c_sname = "' . $this->sname . '",
							' . $nul . '
							c_text = "' . $this->padej . '",
							c_system = "' . $this->system . '",
							c_is_list = "' . $this->is_list . '",
							c_is_page = "' . $this->is_page . '";';
            $this->id = db::q($sql);
            if ($this->id !== false) {
                $sql = 'CREATE TABLE <<__' . $this->sname . '>> (
							`obj_id` INT( 11 ) NOT NULL
							) ENGINE=InnoDB;';
                if (db::q($sql) !== false) {
                    db::q('ALTER TABLE <<__' . $this->sname . '>>
                         		ADD CONSTRAINT <<__' . $this->sname . '_fk_obj_id>>
                         		FOREIGN KEY (`obj_id`)
                         		REFERENCES <<objects>> (`o_id`)
                         		ON DELETE CASCADE ON UPDATE CASCADE');
                    // Регистрация класса в коллекции
                    ormClasses::registration($this);
                    // Наследует все поля родительского класса
                    if ($parent instanceof ormClass) {
                        $groups = $parent->getAllGroups();
                        if (!empty($groups)) {
                            while (list($key, $gval) = each($groups)) {
                                $parentGroup = new ormFieldsGroup($gval['fg_id']);
                                $group = clone $parentGroup;
                                $group->setClassId($this->id);
                                $gid = $group->save();
                                if ($gid !== false) {
                                    $fields = $parentGroup->getAllFields(1);
                                    while (list($key, $fval) = each($fields)) {
                                        $field = clone new ormField($fval['f_id']);
                                        $field->setGroupId($gid);
                                        $field->save();
                                    }
                                }
                            }
                        }
                    } else {
                        // Класс сам по себе, создаем группу и поле по умолчанию
                        $group = new ormFieldsGroup();
                        $group->setName('Основное');
                        $group->setSName('base');
                        $group->setView(1);
                        $group->setSystem(1);
                        $group->setClassId($this->id);
                        $gid = $group->save();
                        if ($gid !== false) {
                            $field = new ormField();
                            $field->setName('Название');
                            $field->setSName('name');
                            $field->setType(10);
                            $field->setView(1);
                            $field->setSearch(0);
                            $field->setInherit(1);
                            $field->setFilter(0);
                            $field->setRequired(1);
                            $field->setSystem(0);
                            $field->setUniqum(0);
                            $field->setGroupId($gid);
                            $field->save();
                        }
                    }
                    return $this->id;
                } else {
                    $this->newError(27, 'Невозможно создать таблицу данных класса!');
                    return false;
                }
            } else {
                $this->newError(12, 'Ошибка в SQL запросе!');
                return false;
            }
        } else {
            $this->newError(26, 'Класс с указанным системным именем уже существует в системе!');
            return false;
        }
    }
コード例 #21
0
ファイル: __field.php プロジェクト: sunfun/Bagira.CMS
 public function proc_upd()
 {
     if (system::action() == "proc_upd") {
         $obj = new ormField($_POST['obj_id']);
     } else {
         if (system::action() == "proc_add") {
             $obj = new ormField();
             $obj->setGroupId($_POST['obj_id']);
         }
     }
     $obj->setName(system::POST('fname'));
     $obj->setSName(system::POST('fsname'));
     $obj->setHint(system::POST('hint'));
     $obj->setType(system::POST('type'));
     $obj->setView(system::POST('view'));
     $obj->setSearch(system::POST('search'));
     $obj->setInherit(system::POST('inherit'));
     $obj->setFilter(system::POST('filter'));
     $obj->setRequired(system::POST('required'));
     $obj->setSystem(system::POST('system'));
     $obj->setUniqum(system::POST('uniqum'));
     $obj->setMaxSize(system::POST('max_size'));
     $obj->setQuickAdd(system::POST('quick_add'));
     $obj->setRelType(system::POST('reltype'));
     $obj->setSpec(system::POST('spec'));
     // Работа с привязанным справочником
     if (system::POST('type') == 95 || system::POST('type') == 90 || system::POST('type') == 97) {
         $list_id = system::POST('list_id');
         // Если не был указан справочник, то автоматически создаем новый
         if (empty($list_id)) {
             $class_name = 'list_' . system::POST('fsname', isVarName);
             if ($class = ormClasses::get($class_name)) {
                 $list_id = $class->id();
             } else {
                 $class = new ormClass();
                 $class->setParentId(29);
                 $class->setName('Для поля "' . system::POST('fname', isString) . '"');
                 $class->setSName($class_name);
                 $class->setSystem(0);
                 $class->setIsList(1);
                 $list_id = $class->save();
                 if ($list_id === false) {
                     $list_id = 0;
                 }
             }
         }
         $obj->setListId($list_id);
     } else {
         $obj->setListId(0);
     }
     $obj_id = $obj->save();
     if ($obj_id === false) {
         echo json_encode(array('error' => 1, 'data' => $obj->getErrorListText(' ')));
     } else {
         $tree = new ormFieldsTree();
         $forUpd = system::action() == "proc_add" ? 0 : 1;
         echo json_encode(array('error' => 0, 'data' => $tree->getFieldHTML($obj, $forUpd)));
     }
     system::stop();
 }
コード例 #22
0
ファイル: ormMultiForm.php プロジェクト: sunfun/Bagira.CMS
 /**
  * @return null
  * @param string $callback - Имя php-функции для обработки добавления/изменения объектов.
  * @desc Сохраняет все пришедшие данные. Метод используется обработчиком формы.
  */
 public function process($callback = '', $addit_parram = '')
 {
     if (isset($_POST['obj' . $this->form_name]) && isset($_POST['class_' . $this->form_name])) {
         $class = ormClasses::get($_POST['class_' . $this->form_name]);
         $mas = $class->loadFields();
         while (list($id, $fields) = each($_POST['obj' . $this->form_name])) {
             $keys = array_keys($fields);
             if (is_numeric($id)) {
                 $obj = ormObjects::get($id);
             } else {
                 if (!$this->without_add && !empty($fields[$keys[0]])) {
                     $obj = new ormObject();
                     $obj->setClass($class->getSName());
                 }
             }
             if (isset($obj) && $obj instanceof ormObject) {
                 if (!$this->without_del && isset($_POST['delete_' . $obj->id])) {
                     $obj->toTrash();
                 } else {
                     reset($mas);
                     while (list($key, $f_val) = each($mas)) {
                         if ($f_val['f_type'] > 89 && $f_val['f_type'] < 101 && $f_val['f_relation'] == 2 && isset($fields[$key])) {
                             // Справочник с типом "Выбор родителя"
                             $obj->clearParents();
                             $ps = $obj->getParents();
                             $parents = $fields[$key];
                             if (!empty($parents)) {
                                 if (is_numeric($parents) && !empty($parents)) {
                                     $pos = isset($ps[$parents]) ? $ps[$parents]['position'] : 0;
                                     $obj->setNewParent($parents, $pos);
                                 } else {
                                     if (is_array($parents)) {
                                         while (list($key, $val) = each($parents)) {
                                             if (!empty($val)) {
                                                 $pos = isset($ps[$val]) ? $ps[$val]['position'] : 0;
                                                 $obj->setNewParent($val, $pos);
                                             }
                                         }
                                     }
                                 }
                             }
                         } else {
                             if ($f_val['f_type'] == 50 && !isset($fields[$key])) {
                                 // Галочка
                                 $obj->__set($key, false);
                             } else {
                                 if (isset($fields[$key])) {
                                     // Дополнительная проверка для файловых полей
                                     if ($f_val['f_type'] > 69 && $f_val['f_type'] < 86) {
                                         if (!empty($_FILES['file_obj' . $this->form_name]['tmp_name'][$id][$key])) {
                                             // Создаем переменную обманку, чтобы объект сам обработал файл
                                             $file = array('name' => $_FILES['file_obj' . $this->form_name]['name'][$id][$key], 'type' => $_FILES['file_obj' . $this->form_name]['type'][$id][$key], 'tmp_name' => $_FILES['file_obj' . $this->form_name]['tmp_name'][$id][$key], 'error' => $_FILES['file_obj' . $this->form_name]['error'][$id][$key], 'size' => $_FILES['file_obj' . $this->form_name]['size'][$id][$key]);
                                             $_FILES['file_' . $key] = $file;
                                         }
                                     }
                                     $obj->__set($key, $fields[$key]);
                                 } else {
                                     if (!empty($fields[$key . '_date']) && isset($fields[$key . '_time'])) {
                                         $datetime = $fields[$key . '_date'] . ' ' . $fields[$key . '_time'] . ':00';
                                         $obj->__set($key, $datetime);
                                     }
                                 }
                             }
                         }
                     }
                     if (!empty($callback) && function_exists($callback)) {
                         $is_ok = call_user_func($callback, $obj, $addit_parram);
                     } else {
                         $is_ok = true;
                     }
                     if ($is_ok) {
                         $is_ok = $obj->save();
                     }
                     if ($is_ok === false) {
                         // echo $obj->getErrorListText();
                         system::savePostToSession();
                         ui::MessageBox(lang::get('TEXT_MESSAGE_ERROR'), $obj->getErrorListText());
                         //ui::selectErrorFields($obj->getErrorFields());
                     }
                     unset($obj);
                 }
             }
         }
     }
 }
コード例 #23
0
 public static function getVirtual($classes_list)
 {
     $f = array();
     while (list($key, $class_name) = each($classes_list)) {
         if (empty($f)) {
             $f = ormClasses::get($class_name)->loadFields();
             //self::printMas($class_name, $f);
         } else {
             $fields = ormClasses::get($class_name)->loadFields();
             //self::printMas($class_name, $fields);
             $f = array_intersect_key($f, $fields);
         }
     }
     // self::printMas('virtual', $f);
     // print_r($f);
     // die();
     return $f;
 }
コード例 #24
0
ファイル: macros.php プロジェクト: sunfun/Bagira.CMS
 /**
  * @return string
  * @param string $templ_name - Шаблон оформления
  * @desc МАКРОС: Выводит форму регистрации пользователя
  */
 function addForm($templ_name = 'add')
 {
     if (reg::getKey('/users/reg')) {
         $templ_file = '/users/' . $templ_name . '.tpl';
         $TEMPLATE = page::getTemplate($templ_file);
         if (!is_array($TEMPLATE)) {
             return page::errorNotFound('users.addForm', $templ_file);
         }
         // Парсим все поля
         $fields = ormClasses::get('user')->loadFields();
         while (list($name, $field) = each($fields)) {
             page::assign('obj.' . $name, '');
         }
         // Вывод сообщения об ошибках
         page::parseError('add_user');
         // Согласие с условиями регистрации
         page::assign('checked', isset($_SESSION['SAVING_POST']['confirm']) ? 'checked' : '');
         page::assignSavingPost();
         return page::parse($TEMPLATE['frame']);
     }
 }
コード例 #25
0
ファイル: __form.php プロジェクト: sunfun/Bagira.CMS
    public function upd()
    {
        // Указываем для какого объекта строить форму
        if (system::action() == "upd") {
            if (system::url(2) == 0) {
                system::redirect('/structure/settings');
            }
            $obj = ormObjects::get(system::url(2));
            $class_list = '';
            $right = 'form_proc_upd';
        } else {
            if (system::action() == "add") {
                $obj = new ormObject();
                $obj->setClass('feedback_form');
                $obj->admin_sender_name = '{name}';
                $obj->admin_sender_address = '{email}';
                $obj->admin_subject = 'Сообщение с сайта {site_name}';
                $obj->admin_template = '

<p>
	 Посетитель сайта {site_name}, воспользовавшись формой обратной связи, отправил следующее сообщение:
</p>
<p>
	 <i>{content}</i>
</p>
<p>
	 ФИО посетителя: {name} <br>
	 E-mail для связи: {email}
</p>
<p>
	 С уважением, Bagira.CMS<br>
</p>
            ';
                $obj->notice_sender_name = '{site_name}';
                $obj->notice_sender_address = '{base_email}';
                $obj->notice_subject = 'Уведомление с сайта {site_name}';
                $obj->notice_template = '
<p>
	 Добрый день, {name}.
</p>
<p>
	 Это письмо - автоматическое уведомление о том, что отправленное вами сообщение принято
	 к рассмотрению. Мы постараемся ответить вам в кратчайшие сроки.
</p>
<p>
	 Благодарим за обращение,<br>
	 Администрация сайта {site_name}.<br>
</p>

            ';
                $obj->answer_sender_name = '{site_name}';
                $obj->answer_sender_address = '{base_email}';
                $obj->answer_subject = 'Ответ на ваше сообщение с сайта {site_name}';
                $obj->answer_template = '
<p>
	 Добрый день, {name}.
</p>
<p>
	 Не так давно, воспользовавшись формой обратной связи, вы отправили нам следующее сообщение:
</p>
<p>
	 <i>{content}</i>
</p>
<p>
	 Наш ответ:
</p>
<p>
	 {answer}
</p>
<p>
	 С уважением,<br>
	 Администрация сайта {site_name}.<br>
</p>
            ';
                $right = 'form_proc_add';
            }
        }
        page::assign('right', $right);
        if (!$obj instanceof ormObject || $obj->issetErrors()) {
            system::redirect('/feedback/settings');
        }
        ui::setCancelButton('/feedback/settings');
        ui::newButton(lang::get('BTN_SAVE'), "javascript:sendForm('save');");
        ui::newButton(lang::get('BTN_APPLY'), "javascript:sendForm('apply');");
        // Создаем форму и выводим ее на страницу
        $form = new ormEditForm($obj, $right);
        $list = array();
        if ($class = ormClasses::get('feedback')) {
            $mas = $class->getAllInheritors();
            while (list($id, $sname) = each($mas)) {
                $h = ormClasses::get($sname);
                $list[] = array('id' => $id, 'name' => $h->getName() . ' (' . $sname . ')');
            }
        }
        $form->replaceField('form_class', ui::SelectBox('form_class', $list, $obj->form_class, 400));
        return $form->getHTML();
    }
コード例 #26
0
 static function getPopularClass($section_id)
 {
     if ($page = self::get($section_id)) {
         if ($page->issetChildren()) {
             $max_class = array();
             while ($obj = $page->getChild()) {
                 $class = $obj->getClass()->getSName();
                 if (isset($max_class[$class])) {
                     $max_class[$class]++;
                 } else {
                     $max_class[$class] = 1;
                 }
             }
             $max_count = 0;
             $class_name = 'page';
             while (list($class, $count) = each($max_class)) {
                 if ($count > $max_count) {
                     $max_count = $count;
                     $class_name = $class;
                 }
             }
             return $class_name;
         } else {
             $class = $page->getClass();
             if ($class->getBaseClass() != 0) {
                 return ormClasses::get($class->getBaseClass())->getSName();
             } else {
                 return $class->getSName();
             }
         }
     } else {
         return 'page';
     }
 }
コード例 #27
0
ファイル: __user.php プロジェクト: sunfun/Bagira.CMS
 public function proc_upd()
 {
     $mini_action = substr(system::action(), -3);
     if (system::action() == "proc_upd") {
         // Говорим какой объект нужно изменить
         $obj = ormObjects::get(system::POST('obj_id'));
     } else {
         if (system::action() == "proc_add") {
             $class_name = 'user';
             $class = ormClasses::get($_POST['class_id']);
             if ($class instanceof ormClass && $class->isInheritor('user')) {
                 $class_name = $class->getSName();
             }
             // Говорим какой объект нужно создать
             $obj = new ormObject();
             $obj->setClass($class_name);
         }
     }
     // Если произошли ошибки, перенаправляем
     if ($obj->issetErrors()) {
         system::redirect('/users/userlist/' . $_POST['groups'][0]);
     }
     // Присваиваем полям в объекте пришедшие значения из POST
     $obj->loadFromPost($mini_action);
     if ($obj->newVal('active')) {
         $obj->error_passw = 0;
     }
     if ($obj->id == user::get('id')) {
         $obj->active = 1;
     }
     // Сохраняем изменения
     $obj_id = $obj->save();
     // Если объект не сохранился, выводим пользователю текст ошибки.
     if ($obj_id === false) {
         system::savePostToSession();
         ui::MessageBox(lang::get('TEXT_MESSAGE_ERROR'), $obj->getErrorListText());
         ui::selectErrorFields($obj->getErrorFields());
         $obj_id = empty($_POST['obj_id']) ? $_POST['groups'][0] : $_POST['obj_id'];
         system::redirect('/users/user_' . $mini_action . '/' . $obj_id);
     } else {
         rights::setListForModuls($obj_id, 1);
         cache::delete('user' . $obj_id);
     }
     // Если данные изменились корректно перенаправляем на соответствующию страницу
     if ($_POST['parram'] == 'apply') {
         system::redirect('/users/user_upd/' . $obj_id);
     } else {
         system::redirect('/users/userlist/' . $_POST['groups'][0]);
     }
 }
コード例 #28
0
ファイル: ormFilterForm.php プロジェクト: sunfun/Bagira.CMS
 private function getFiltersList()
 {
     if ($this->select instanceof ormSelect && empty($this->filters)) {
         $class_name = $this->select->getObjectsClass();
         if (!empty($class_name)) {
             $fields = ormClasses::get($class_name)->loadFields();
         } else {
             $fields = array();
         }
         // Добавляем виртуальные поля
         $bf['id'] = array('f_sname' => 'id', 'f_name' => lang::get('CONSTR_BASE_FIELD1'), 'f_filter' => false, 'f_type' => 40);
         $bf['change_date'] = array('f_sname' => 'change_date', 'f_name' => lang::get('CONSTR_BASE_FIELD2'), 'f_filter' => false, 'f_type' => 32);
         $bf['create_date'] = array('f_sname' => 'create_date', 'f_name' => lang::get('CONSTR_BASE_FIELD3'), 'f_filter' => false, 'f_type' => 32);
         $fields = array_merge($bf, $fields);
         // Строим список фильтров
         $this->filters = array();
         $names = '';
         while (list($key, $field) = each($fields)) {
             if (($field['f_filter'] || isset($this->show_filters[$field['f_sname']])) && !in_array($key, $this->hide_filters) && $field['f_type'] != 100) {
                 $this->filters[$key] = $field;
                 $names .= $key;
             }
         }
         // Вычисляем префикс для сессий фильтра
         $this->prefix = md5($names);
     }
 }
コード例 #29
0
ファイル: ui.php プロジェクト: sunfun/Bagira.CMS
 static function checkClasses()
 {
     $classes = '';
     $cl_name = func_get_args();
     while (list($num, $val) = each($cl_name)) {
         if (!ormClasses::get($val)) {
             $classes .= '<li>' . $val . '</li>';
         }
     }
     if (!empty($classes)) {
         $modul = lang::module(system::url(0));
         if (empty($modul)) {
             $modul = system::url(0);
         }
         ui::$stop = true;
         ui::MessageBox(str_replace('%name%', $modul, lang::get('TEXT_CLASS_NOT_FOUND')), lang::get('TEXT_CLASS_NOT_FOUND2') . '<ul>' . $classes . '</ul>');
     }
 }