Example #1
0
 public function testFormElementsMoves()
 {
     $this->assertTrue(is_array($this->object->elements()));
     $this->assertFalse($this->object->has('test'));
     $element = new Elements\Text('test');
     $element2 = new Elements\Text('test2');
     $this->object->add($element);
     $this->object->add($element2);
     $this->assertTrue($this->object->has('test'));
     $this->assertEquals($element, $this->object->element('test'));
     $this->object->remove('test');
     $this->assertFalse($this->object->has('test'));
     $this->assertEquals(1, count($this->object->elements()));
     $this->object->addAll(array(new Elements\Text('test2'), new Elements\Text('test3')));
     $this->setExpectedException('Fwk\\Form\\Exceptions\\UnknownElementException');
     $this->object->element('nonExistant');
 }
Example #2
0
 /**
  * Управление элементами отдельного меню
  *
  * @param mixed $id
  */
 public function items_action($menu_id, $id = NULL)
 {
     $this->theme->hookAdminMenu();
     $this->hookAdminMenu();
     if ($menu = menu($menu_id)) {
         append('content', '<div class="page-header"><h2>' . $menu->name . '</h2></div>');
     } else {
         return event('empty');
     }
     $pills = new Menu_Pills(array('name' => 'admin.menu.items', 'render' => FALSE, 'elements' => array(array('label' => icon('list') . ' ' . t('Список пунктов'), 'link' => l('/admin/theme/menu/' . $menu_id . '/items')), array('label' => icon('plus') . ' ' . t('Добавить'), 'link' => l('/admin/theme/menu/' . $menu_id . '/item/add'), 'class' => 'fl_r'), array('label' => icon('pencil') . ' ' . t('Редактировать'), 'link' => l('/admin/theme/menu/' . $menu_id . '/item/' . $this->router->getSegments(5)), 'access' => check_route('admin/theme/menu/\\d+/item/\\d+'), 'class' => 'fl_r'))));
     append('content', $pills->render());
     if (NULL === $id) {
         $handler = new Menu_Db_Item();
         $handler->menu_id = $menu->id;
         if ($items = $handler->findAll()) {
             $tree = new Db_Tree_DDList(array('items' => $items, 'saveUri' => l('/admin/theme/menu/ajax/saveItemsTree/')));
         } else {
             return event('empty');
         }
     } else {
         $form = new Form('Menu/forms/item');
         $item = new Menu_Db_Item();
         if ($id != 'add' && is_numeric($id)) {
             $item->id = $id;
             if ($item->find()) {
                 $form->object($item);
             } else {
                 return event('empty');
             }
         } else {
             $form->remove('delete');
             $item->menu_id = $menu_id;
         }
         $form->pid->setValues($item->getSelectValues('label'));
         if ($result = $form->result()) {
             if ($result->delete && $item->delete()) {
                 flash_success(t('Элемент меню <b>«%s»</b> был удалён!', $item->label), '', 'growl');
                 redirect(l('admin/theme/menu/' . $menu_id . '/items'));
             }
             $item->object()->extend($result);
             if ($id !== 'add') {
                 $item->branching();
             }
             if ($item->save()) {
                 flash_success($id == 'add' ? t('Элемент меню <b>«%s»</b> успешно создан!', $item->label) : t('Элемент меню <b>«%s»</b> успешно отредактирован!', $item->label), '', 'growl');
                 redirect(l('admin/theme/menu/' . $menu_id . '/items'));
             }
         }
         $form->show();
     }
 }
Example #3
0
 /**
  * Управление виджетами
  *
  * @param mixed $action
  */
 public function widgets_action($action = 'list', $subaction = NULL)
 {
     $this->hookAdminMenu();
     new Menu_Tabs(array('name' => 'admin.theme.widgets', 'elements' => array(array('label' => icon('list') . ' ' . t('Список'), 'link' => l('/admin/theme/widgets')), array('label' => icon('plus') . ' ' . t('Добавить'), 'link' => l('/admin/theme/widgets/add') . e('uri', $this->input->get('uri')), 'class' => 'fl_r'), array('label' => icon('pencil') . ' ' . t('Редактировать'), 'link' => l('/admin/theme/widgets/' . $this->router->getSegments(3)), 'access' => check_route('widgets/(\\d+)'), 'active' => check_route('widgets/(\\d+)$'), 'class' => 'fl_r'), array('label' => icon('wrench') . ' ' . t('Настройки'), 'link' => l('/admin/theme/widgets/' . $this->router->getSegments(3) . '/options'), 'access' => check_route('widgets/(\\d+)'), 'active' => check_route('widgets/(\\d+)/options'), 'class' => 'fl_r'))));
     if ($action == 'ajax' && ($widgets = $this->input->post('widgets'))) {
         $ajax = new Ajax();
         $position = 0;
         foreach ($widgets as $config) {
             if ($widget = widget($config['id'])) {
                 $widget->region = $config['region'];
                 $widget->position = ++$position;
                 $widget->save();
             }
         }
         $this->cache->remove('widgets');
         $ajax->success = TRUE;
         $ajax->json();
     } else {
         if ($action == 'list') {
             jqueryui();
             template('Theme/templates/widgets/search')->show();
             $widget = widget();
             $widget->order('position');
             $widgets = $widget->findAll();
             // Фильтруем, если задан параметр
             if ($uri = $this->input->get('uri')) {
                 $remove_ids = array();
                 foreach ($widgets as $key => $widget) {
                     if (!check_route($widget->route, $uri)) {
                         $remove_ids[] = $key;
                     }
                 }
                 foreach ($remove_ids as $id) {
                     $widgets->offsetUnset($id);
                 }
             }
             template('Theme/templates/widgets/list', array('regions' => $this->regions, 'widgets' => $widgets))->show();
         } else {
             $form = new Form('Theme/forms/widget');
             $form->callback->setValues($this->getWidgets());
             $form->region->setValues(array_combine($this->regions, $this->regions));
             if (is_numeric($action) && ($widget = widget($action))) {
                 if ($subaction === 'options') {
                     template('Theme/templates/widgets/options.header', array('widget' => $widget))->show();
                     $class = $widget->callback;
                     $current_widget = new $class($widget->object()->options);
                     $current_widget->object($widget);
                     if ($current_widget->settings()) {
                         $this->cache->remove('widgets');
                         flash_success(t('Настройки виджета <b>%s</b> сохранены!', $widget->name), '', 'growl');
                         redirect(l(TRUE));
                     }
                     return;
                 }
                 $form->object($widget);
                 $form->callback->options->disabled = TRUE;
             } elseif ($action == 'add') {
                 if ($uri = $this->input->get('uri')) {
                     $form->route->setValue($uri);
                 }
                 if ($region = $this->input->get('region')) {
                     $form->region->setValue($region);
                 }
                 $form->remove('delete');
                 $widget = widget();
             } else {
                 return event('empty');
             }
             if ($result = $form->result()) {
                 $this->cache->remove('widgets');
                 if ($result->delete && $widget->delete()) {
                     flash_success(t('Виджет «<b>%s</b>»успешно удалён!', $widget->name), '', 'growl');
                     redirect(l('/admin/theme/widgets'));
                 }
                 if ($action == 'add') {
                     $result->position = 1 + widget()->where('region', $result->region)->countAll();
                 }
                 $widget->object()->extend($result);
                 if ($widget->save()) {
                     if ($action == 'add') {
                         flash_success(t('Виджет «<b>%s</b>» успешно добавлен!', $widget->name), '', 'growl');
                         redirect(l('/admin/theme/widgets/' . $widget->id . '/options'));
                     } else {
                         flash_success(t('Виджет  «<b>%s</b>» успешно отредактирован!', $widget->name));
                         redirect(l(TRUE));
                     }
                 }
             }
             $form->show();
         }
     }
 }
Example #4
0
    /**
     * Добавление или редактирование сниппета
     *
     * @param int $id
     */
    public function snippet_action($id = NULL)
    {
        $this->hookAdminMenu();
        $form = new Form('Code/forms/snippet');
        $tpl = new Template('Code/templates/form');
        $snippet = new Code_Snippet();
        if ($id) {
            $snippet->id = $id;
            if ($snippet->find()) {
                $tpl->code = $snippet->code;
                $form->object($snippet);
            }
        } else {
            $tpl->code = htmlspecialchars('<?php

');
        }
        $snippet->name or $form->remove('delete');
        $form->code_editor->options->label = $tpl->render();
        if ($result = $form->result()) {
            $snippet->name = $result->name;
            $snippet->code = $result->code;
            $snippet->aid or $snippet->aid = user()->id;
            $snippet->type = $result->type;
            $snippet->created_date or $snippet->created_date = time();
            if ($snippet->save()) {
                flash_success(t('Сниппет кода успешно сохранён!'));
                redirect(l('/admin/code/snippet/' . $snippet->id));
            }
        }
        $form->show();
    }
Example #5
0
 /**
  * Создание страницы
  */
 public function admin_createdit($id = NULL)
 {
     $this->hookPagesAdminMenu();
     js($this->folder . '/js/inline/autolink_from_select.js');
     $form = new Form('Pages/forms/page');
     if ($id && ($page = page($id))) {
         $page->link = $page->getLink();
         $form->object($page);
     } else {
         $page = page();
         $form->remove('delete');
         $form->pid->setValue($this->input->get('pid', 0));
     }
     $form->pid->setValues($page->getSelectValues());
     if ($result = $form->result()) {
         if ($result->delete) {
             if ($page->delete()) {
                 flash_success(t('Страница удалена вместе со всеми подстраницами!'));
                 redirect(l('/admin/pages'));
             }
         }
         // Заполняем объект страницы
         $page->object()->extend($result);
         $refresh = TRUE;
         // Если у страницы уже установлен путь, и он находится в базе
         if ($page->route) {
             // Если равны, то обновлять не надо
             $refresh = $page->route != $page->getLink();
         }
         // Если путь не указан или не существует
         if ($refresh) {
             // Создаём новый путь
             $route = route();
             $route->route = trim($page->link, '/');
             // На всякий случай, если такой путь уже есть
             if (!$route->find()) {
                 // Сохраняем его
                 $route->insert();
             } else {
                 $route->update();
             }
             // Обновляем id
             $page->route = $route->id;
         }
         // Сохранение страницы
         if ($result->save && $page->save()) {
             if ($refresh) {
                 $route->callback = $route->encodeCallback(array($this, 'show_action'), array($page->id));
                 $route->update();
             }
             flash_success(t('Страница <b>«%s»</b> успешно сохранена', $page->name), '', 'growl');
             redirect(l('/admin/pages'));
         } elseif (!$result->preview) {
             success(t('Страница <b>«%s»</b> успешно сохранена', $page->name), '', 'growl');
         }
     }
     $form->show();
     if ($result && $result->preview) {
         $page->show();
     }
 }