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'); }
/** * Управление элементами отдельного меню * * @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(); } }
/** * Управление виджетами * * @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(); } } }
/** * Добавление или редактирование сниппета * * @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(); }
/** * Создание страницы */ 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(); } }