/** * Преобразование ветки объектов в структуру из массивов для вывода в шаблоне * @param array $items Масив объектов - пунктов меню * @param Entity $active Активный пункт меню * @param bool $sub_active Признак, есть или нет активные подчиненные? * @return array */ protected function itemsToArray($items, $active, &$sub_active = false) { $list = array(); $have_active = false; foreach ($items as $item) { $children = $item['sub']; $item = $item['object']; $real = $item->linked(); $info = array('title' => $item->title->value(), 'icon' => false, 'url' => Request::url($real->uri()), 'active' => $active && $active->eq($real) ? 1 : 0); // Иконка // $icon = $item->icon->isExist() ? $item->icon : ($real->icon->isExist()? $real->icon : null); // if ($icon && !$icon->isDraft() && !$icon->isHidden()){ // $info['icon'] = $icon->resize(0,30,Image::FIT_OUTSIDE_LEFT_TOP)->file(); // } // Если заголовок не определен if (empty($info['title'])) { $info['title'] = $real->title->value(); if (empty($info['title'])) { $info['title'] = $real->name(); } } if ($children) { $info['children'] = $this->itemsToArray($children, $active, $sub_active); if (!$info['active'] && $sub_active) { $info['active'] = 2; } } $have_active = $have_active || $info['active']; $list[] = $info; } $sub_active = $have_active; return $list; }
function process(Request $request) { if (parent::process($request)) { $request->redirect(Request::url('/admin' . $request['REQUEST']['object']->uri())); } else { $request->redirect(Request::url(null, [], true)); } }
function show($v, Request $request) { $obj = $request['REQUEST']['object']; $v['uri'] = Request::url($obj->uri()); $v['count'] = $request['REQUEST']['page_count']; $v['current'] = min($v['count'], $request['REQUEST']['page']); $v['show'] = $this->show_cnt->value(); return parent::show($v, $request); }
function show($v, Request $request) { $page = $request['REQUEST']['object']; $v['title'] = $page->title->value(); $v['text'] = $page->text->value(); // if (($split_pos = mb_strpos($v['text'], '<a class="more"> </a>')) || ($split_pos = mb_strpos($v['text'], '<!--more-->'))) { $v['text'] = mb_substr($v['text'], 0, $split_pos); } // $v['url'] = Request::url($page->uri()); return parent::show($v, $request); }
function work(Request $request) { $out = $request['REQUEST']['handler']->start($request); if ($redirect = $request->getCommands('redirect')) { header("HTTP/1.1 303 See Other"); header('Location: ' . $redirect[0][0]); } else { if ($out != false) { if (is_array($out)) { header('Content-Type: application/json'); echo F::toJSON($out, false); } else { echo $out; } } else { header('Location: ' . Request::url()); //текущий адрес без аргументов } } }
function work(Request $request) { $this->_base_uri = $request['REQUEST']['object']->uri(); $request->mix(['REQUEST' => ['base_uri' => $this->_base_uri]]); if ($request['REQUEST']['form'] !== false) { // Обработка формы $session = array(); try { // Вызов полей для свойств объекта $request->mix(['REQUEST' => ['call' => 'check']]); $list = $this->getList($request); if (is_array($list)) { $input = $request->getInput(); $views = $this->linked()->views->linked(); foreach ($list as $obj) { $name = preg_replace('/' . preg_quote($this->_base_uri . '/', '/') . '/u', '', $obj->uri()); $obj_input = []; if (isset($input['REQUEST'][$name])) { $obj_input['REQUEST']['value'] = $input['REQUEST'][$name]; } if (isset($input['FILES'][$name])) { $obj_input['FILES']['value'] = $input['FILES'][$name]; } $obj_input['REQUEST']['object'] = $obj; $views->start($request->mix($obj_input)); } } if (!$request['REQUEST']['object']->errors()->isExist()) { // Выполнение действия $this->process($request); $this->_result = self::FORM_RESULT_OK; if (!($redirect = $this->getCommands('redirect'))) { $redirect = $this->redirect->inner(); if (!$redirect->is_draft() && $redirect->value() != '') { $request->redirect(Request::url($redirect->value())); } } } else { $this->_result = self::FORM_RESULT_ERROR; } } catch (\Exception $error) { $this->_result = self::FORM_RESULT_ERROR; } $session['result'] = $this->_result; if ($this->_result == self::FORM_RESULT_ERROR) { $session['object'] = $request['REQUEST']['object']->toArray(); // @todo Для ajax запросов нужна развернутая информация об ошибках для каждого поля $session['message'] = 'Ошибки'; } else { if ($this->_result == self::FORM_RESULT_ERROR) { $session['message'] = 'Успех'; } } // @todo Для ajax запросов в сессию сохранять нет смысла Session::set('form', array($this->uri() . $this->getToken() => $session)); setcookie('token', $this->getToken(), 0, '/'); return $session; } else { // Отображение формы $v = array(); if (isset($request['COOKIE']['token']) && Session::is_exist('form')) { $form = Session::get('form'); if (isset($form[$this->uri() . $request['COOKIE']['token']])) { $form = $form[$this->uri() . $request['COOKIE']['token']]; Session::remove('form'); } if (isset($form['object'])) { $request['REQUEST']['object'] = Entity::fromArray($form['object']); } if (isset($form['result'])) { $this->_result = $form['result']; } } $this->res->start($request); return $this->show($v, $request); } }