/** * Панель управления */ public function admin_action() { $form = new Form("Wysiwyg/forms/config"); $options = new Core_ArrayObject(); $options->type = config('wysiwyg.editor'); $form->type->setValues(self::$editors); $form->object($options); if ($result = $form->result()) { if (isset(self::$editors[$result['type']])) { cogear()->set('wysiwyg.editor', $result['type']); success(t('Конфигурация успешно сохранена.')); } } append('content', $form->render()); }
/** * Control Panel */ public function admin() { $form = new Form("Wysiwyg.config"); $options = new Core_ArrayObject(); $options->editor = config('wysiwyg.editor'); $form->init(); $form->elements->type->setValues(self::$editors); $form->object($options); if ($result = $form->result()) { if (isset(self::$editors[$result['type']])) { cogear()->set('wysiwyg.editor', $result['type']); success('Configuration saved successfully.'); } } append('content', $form->render()); }
/** * Login form show */ public function login_action() { $this->theme->template('User/templates/login'); $this->showMenu(); $form = new Form('User/forms/login'); if ($data = $form->result()) { $user = new User(); $user->object($data); $user->hashPassword(); if ($user->find() && $user->login()) { $data->saveme && $user->remember(); redirect(); } else { $user->email = $user->login; $user->object()->offsetUnset('login'); if ($user->find() && $user->login()) { $data->saveme && $user->remember(); redirect(); } } $user->password = ''; $form->object($user); error(t('Введены неверные данные.'), t('Ошибка авторизации')); } $form->show(); }
/** * Edit action */ public function edit_action($id = NULL) { $post = new Post(); $post->id = $id; $post->cache(FALSE); if (!$post->find()) { return event('404'); } $form = new Form('Post/forms/post'); $form->object($post); $form->elements->title->options->label = t('Редактирование публикации'); event('post.edit', $post, $form); if ($result = $form->result()) { $post->object()->extend($result); if ($result->delete && access('Post.delete', $post)) { if ($post->delete()) { flash_success(t('Пост удалён!')); redirect(); } } if ($result->preview) { $post->created_date = time(); $post->aid = $this->user->id; $post->preview = TRUE; $post->show(); } else { if (Ajax::is() && $this->input->get('autosave')) { $post->update(); $ajax = new Ajax(); $ajax->message(t('Пост сохранён!', 'Post')); $ajax->send(); } if ($result->draft) { $post->published = 0; } elseif ($result->publish) { $post->published = 1; } if ($post->save()) { if ($post->published) { $link = l($post->getLink()); flash_success(t('Пост опубликован!'), NULL, 'growl'); } else { $link = l($post->getLink()); flash_success(t('Сохранено в черновиках!'), NULL, 'growl'); } redirect($post->getLink()); } } } $form->show(); }
/** * Управление элементами отдельного меню * * @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(); } }
/** * Site config */ public function site_action() { $this->hookSiteSettingsMenu(); $front_values = new Core_ArrayObject(array('Admin' => t('Панель управления'), 'Post' => t('Пост'), 'Pages' => t('Страницы'))); $config = array('#name' => 'admin-site', 'name' => array('#type' => 'text', '#label' => t('Название сайта'), '#validators' => array('Required')), 'front_page' => array('#type' => 'select', '#label' => t('Шестерёнка главной страницы:'), '#values' => $front_values, '#value' => config('router.defaults.gear')), 'dev' => array('#type' => 'checkbox', '#label' => t('Режим разработки'), '#value' => config('development')), 'save' => array()); $form = new Form($config); $form->object(array('name' => config('site.name'), 'dev' => config('development'))); if ($result = $form->result()) { $this->set('site.name', $result->name); $this->set('development', $result->dev); $this->set('router.defaults.gear', $result->front_page); flash_success(t('Настройки успешно сохранены!')); back(); } $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(); }
/** * Edit action * * @param string $login */ public function edit_action($id = NULL) { $id or $id = $this->user->id; $user = new User_Object(); $this->db->where('id', $id); if (!$user->find()) { return _404(); } if (!access('user edit_all') && $this->id != $user->id) { return _403(); } $this->renderUserInfo($user); $user = new User_Object(); $user->where('id', $id); $user->find(); $form = new Form('User.profile'); $user->password = ''; $form->object($user->object()); if ($form->elements->avatar->is_ajaxed && Ajax::get('action') == 'replace') { $user->avatar = ''; $user->update(); } if ($result = $form->result()) { if ($user->login != $result['login']) { $redirect = Url::gear('user') . $result['login']; } if ($result->delete && access('users delete_all')) { $user->delete(); flash_success(t('User <b>%s</b> was deleted!')); redirect(Url::link('/users')); } $user->merge($result); if ($result->password) { $user->hashPassword(); } else { unset($user->password); } if ($user->update()) { d('User edit'); flash_success(t('User data saved!'), t('Success')); d(); if ($user->id == $this->id) { $this->store($user->object()->toArray()); } redirect(Url::gear('user') . $user->login); } } append('content', $form->render()); }
/** * Управление виджетами * * @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(); } } }
/** * Создание страницы */ 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(); } }