/** * Parse view object * * @param AbstractController $controller * @param Application $application * @return void */ public static function parseSitemap(AbstractController $controller, Application $application) { if ($controller->hasView() && $controller instanceof \Phire\Content\Controller\IndexController) { $body = $controller->response()->getBody(); if (strpos($body, '[{sitemap') !== false) { $sitemaps = []; preg_match_all('/\\[\\{sitemap.*\\}\\]/', $body, $sitemaps); if (isset($sitemaps[0]) && isset($sitemaps[0][0])) { foreach ($sitemaps[0] as $sitemap) { $node = 'nav'; $tid = substr($sitemap, strpos($sitemap, 'sitemap') + 7); $tid = str_replace('}]', '', $tid); if ($tid != '') { if (substr($tid, 0, 1) == '_') { $tid = substr($tid, 1); } if (strpos($tid, '_') !== false) { $tidAry = explode('_', $tid); $node = $tidAry[0]; $tid = $tidAry[1]; } else { $node = $tid; $tid = null; } } else { $tid = null; } $siteMapObject = (new Model\Sitemap())->getSitemapObject($node, $tid); $body = str_replace($sitemap, $siteMapObject, $body); } } $controller->response()->setBody($body); } } }
/** * Parse calendar * * @param AbstractController $controller * @param Application $application * @return void */ public static function parse(AbstractController $controller, Application $application) { if (!$_POST && $controller->hasView() && $controller instanceof \Phire\Content\Controller\IndexController) { $body = $controller->response()->getBody(); // Parse any calendar placeholders $calendars = []; $calendarIds = []; preg_match_all('/\\[\\{calendar.*\\}\\]/', $body, $calendars); if (isset($calendars[0]) && isset($calendars[0][0])) { foreach ($calendars[0] as $calendar) { $id = substr($calendar, strpos($calendar, '[{calendar_') + 11); if (strpos($id, '_') !== false) { $id = substr($id, 0, strpos($id, '_')); $replace = '[{calendar_' . $id . '_time}]'; $time = true; } else { $id = substr($id, 0, strpos($id, '}]')); $replace = '[{calendar_' . $id . '}]'; $time = false; } $calendarIds[] = ['id' => $id, 'replace' => $replace, 'time' => $time]; } } if (count($calendarIds) > 0) { $sess = $application->services()->get('session'); $roleId = isset($sess->user) ? $sess->user->role_id : null; foreach ($calendarIds as $cal) { $calendar = new Model\Calendar(['user_role_id' => $roleId, 'weekdays' => $application->module('phire-calendar')['weekdays'], 'range' => $application->module('phire-calendar')['range'], 'range_format' => $application->module('phire-calendar')['range_format'], 'day_format' => $application->module('phire-calendar')['day_format'], 'force_list' => $application->module('phire-calendar')['force_list'], 'force_list_mobile' => $application->module('phire-calendar')['force_list_mobile'], 'show_all' => $application->module('phire-calendar')['show_all'], 'date' => $controller->request()->getQuery('date')]); $rendered = $calendar->getById($cal['id'], $cal['time']); $body = str_replace($cal['replace'], $rendered, $body); } $controller->response()->setBody($body); } } }
/** * Parse social navigation * * @param AbstractController $controller * @param Application $application * @return void */ public static function parse(AbstractController $controller, Application $application) { if ($controller->hasView() && ($controller instanceof \Phire\Content\Controller\IndexController || $controller instanceof \Phire\Categories\Controller\IndexController)) { $body = $controller->response()->getBody(); if (strpos($body, '[{social_nav') !== false) { $social = new Model\Social(); $body = str_replace(['[{social_nav}]', '[{social_nav_styles}]'], [$social->buildNav(), $social->getStyles()], $body); $controller->response()->setBody($body); } } }
/** * Parse maps navigation * * @param AbstractController $controller * @param Application $application * @return void */ public static function parse(AbstractController $controller, Application $application) { if ($controller->hasView() && ($controller instanceof \Phire\Content\Controller\IndexController || $controller instanceof \Phire\Categories\Controller\IndexController)) { $body = $controller->response()->getBody(); if (strpos($body, '[{map_') !== false) { $ids = self::parseMapIds($body); if (count($ids) > 0) { $map = new Model\Map(); foreach ($ids as $id) { $body = str_replace('[{map_' . $id . '}]', $map->getMap($id), $body); } } $controller->response()->setBody($body); } } }
/** * Parse SEO * * @param AbstractController $controller * @param Application $application * @return void */ public static function parse(AbstractController $controller, Application $application) { if ($controller->hasView() && ($controller instanceof \Phire\Content\Controller\IndexController || $controller instanceof \Phire\Categories\Controller\IndexController)) { $seo = new Model\Seo(); $body = $controller->response()->getBody(); if (strpos($body, '[{seo_meta_tags}]') !== false) { $body = str_replace('[{seo_meta_tags}]', $seo->buildMetaTags($controller->view()->description, $controller->view()->keywords), $body); } if (!empty($seo->tracking)) { $body = str_replace('</head>', $seo->tracking . PHP_EOL . PHP_EOL . '</head>', $body); } $controller->response()->setBody($body); } }
/** * Parse view object * * @param AbstractController $controller * @param Application $application * @return void */ public static function parseViews(AbstractController $controller, Application $application) { if (!$controller instanceof \Phire\Content\Controller\ContentController && !$controller instanceof \Phire\Templates\Controller\IndexController && $controller->hasView()) { $body = $controller->response()->getBody(); if (strpos($body, '[{view_') !== false) { // Parse any view placeholders $groupIds = []; $singleIds = []; $modelId = null; $views = []; $viewModel = new Model\View(['pagination' => $controller->config()->pagination]); preg_match_all('/\\[\\{view.*\\}\\]/', $body, $views); if (isset($views[0]) && isset($views[0][0])) { foreach ($views[0] as $view) { $id = substr($view, strpos($view, 'view_') + 5); $id = str_replace('}]', '', $id); if (strpos($id, '_') !== false) { $idAry = explode('_', $id); if (!empty($idAry[1])) { $modelId = $idAry[1]; } else { if (!empty($controller->view()->id)) { $modelId = $controller->view()->id; } } $singleIds[] = ['view_id' => $idAry[0], 'model_id' => $modelId]; } else { $groupIds[] = $id; } } } if (count($groupIds) > 0) { foreach ($groupIds as $id) { $body = str_replace('[{view_' . $id . '}]', $viewModel->renderPages($id) . PHP_EOL . $viewModel->render($id), $body); } } if (count($singleIds) > 0) { foreach ($singleIds as $id) { if (null !== $id['model_id']) { $body = str_replace('[{view_' . $id['view_id'] . '_' . $id['model_id'] . '}]', $viewModel->renderSingle($id['view_id'], $id['model_id']), $body); $body = str_replace('[{view_' . $id['view_id'] . '_}]', $viewModel->renderSingle($id['view_id'], $id['model_id']), $body); } } } $controller->response()->setBody($body); } } }
/** * Parse form object * * @param AbstractController $controller * @param Application $application * @return void */ public static function parseForms(AbstractController $controller, Application $application) { if ($controller->hasView() && ($application->isRegistered('phire-content') && $controller instanceof \Phire\Content\Controller\IndexController || $application->isRegistered('phire-categories') && $controller instanceof \Phire\Categories\Controller\IndexController)) { $body = $controller->response()->getBody(); if (strpos($body, '[{form_') !== false) { // Parse any form placeholders $formIds = []; $forms = []; preg_match_all('/\\[\\{form.*\\}\\]/', $body, $forms); if (isset($forms[0]) && isset($forms[0][0])) { foreach ($forms[0] as $form) { $id = substr($form, strpos($form, 'form_') + 5); $formIds[] = str_replace('}]', '', $id); } } if (count($formIds) > 0) { foreach ($formIds as $id) { try { $form = new \Phire\Forms\Form\Form($id); if ($form->isSubmitted()) { $values = $form->getMethod() == 'post' ? $_POST : $_GET; if ($form->isFiltered()) { $form->addFilter('strip_tags'); } $form->setFieldValues($values); if ($form->isValid()) { $form->process(); $body = str_replace('[{form_' . $id . '}]', $form->getMessage(), $body); } else { $body = str_replace('[{form_' . $id . '}]', (string) $form, $body); } } else { $body = str_replace('[{form_' . $id . '}]', (string) $form, $body); } } catch (\Exception $e) { $body = str_replace('[{form_' . $id . '}]', '', $body); } } } $controller->response()->setBody($body); } } }
/** * Parse any media group placeholders * * @param AbstractController $controller * @param Application $application * @return void */ public static function parseMedia(AbstractController $controller, Application $application) { if ($controller->hasView() && ($controller instanceof \Phire\Categories\Controller\IndexController || $controller instanceof \Phire\Content\Controller\IndexController)) { $data = $controller->view()->getData(); foreach ($data as $key => $value) { if (is_string($value)) { $subIds = self::parseLibraryIds($value); if (count($subIds) > 0) { $media = new Model\Media(); foreach ($subIds as $sid) { $view = new \Pop\View\View($value, ['media_' . $sid => $media->getAllByLibraryId($sid)]); $controller->view()->{$key} = $view->render(); } } } } $body = $controller->response()->getBody(); $ids = self::parseLibraryIds($body); if (count($ids) > 0) { $media = new Model\Media(); foreach ($ids as $id) { $key = 'media_' . $id; $controller->view()->{$key} = $media->getAllByLibraryId($id); } } } }
/** * Get all category values for the form object * * @param AbstractController $controller * @param Application $application * @return void */ public static function parseCategories(AbstractController $controller, Application $application) { if ($controller->hasView() && ($controller instanceof \Phire\Categories\Controller\IndexController || $controller instanceof \Phire\Content\Controller\IndexController)) { $body = $controller->response()->getBody(); $category = new Model\Category(); $category->show_total = $application->module('phire-categories')['show_total']; $category->filters = $application->module('phire-categories')['filters']; $category->datetime_formats = $application->module('phire-categories')['datetime_formats']; $catIds = self::parseCategoryIds($body); $catParentIds = self::parseParentCategoryIds($body); if (count($catIds) > 0) { foreach ($catIds as $key => $value) { $category->getById($value['id']); $categoryName = 'category_' . $value['id']; if (isset($value['limit']) && $value['limit'] > 0 && $category->hasPages($value['limit'])) { $limit = $value['limit']; $pages = null; } else { if ($category->pagination > 0 && $category->hasPages($category->pagination)) { $limit = $category->pagination; $pages = new \Pop\Paginator\Paginator($category->getCount(), $limit); $pages->useInput(true); } else { $limit = null; $pages = null; } } if (null !== $pages) { $controller->view()->pages = $pages; } $controller->view()->{$categoryName} = $category->getItems($limit, $controller->request()->getQuery('page')); } } if (count($catParentIds) > 0) { foreach ($catParentIds as $key => $value) { if (isset($value['limit']) && $value['limit'] > 0) { $limit = $value['limit']; $categoryName = 'categories_' . $value['id'] . '_' . $limit; } else { $limit = null; $categoryName = 'categories_' . $value['id']; } $controller->view()->{$categoryName} = $category->getCategoryChildren($value['id'], $limit); } } $controller->view()->setTemplate($body); $body = $controller->view()->render(); $controller->response()->setBody($body); } }
/** * Parse the body * * @param AbstractController $controller * @param Application $application * @return void */ public static function parseBody(AbstractController $controller, Application $application) { if ($controller->hasView() && ($application->isRegistered('phire-categories') && $controller instanceof \Phire\Categories\Controller\IndexController || $application->isRegistered('phire-content') && $controller instanceof \Phire\Content\Controller\IndexController)) { $controller->response()->setBody(self::parse($controller->response()->getBody())); } }
/** * Initialize page editor * * @param AbstractController $controller * @param Application $application * @return void */ public static function initPageEditor(AbstractController $controller, Application $application) { if ($controller instanceof \Phire\Content\Controller\IndexController && $controller->hasView() && $controller->response()->getCode() == 200) { $sess = $application->services()->get('session'); $acl = $application->services()->get('acl'); if (isset($sess->user) && $acl->isAllowed($sess->user->role, 'content', 'in-edit') && $acl->isAllowed($sess->user->role, 'content', 'edit')) { $body = $controller->response()->getBody(); $head = substr($body, strpos($body, '<head>')); $head = substr($head, 0, strpos($head, '</head>') + 7); $newHead = $head; $assets = ' <link type="text/css" rel="stylesheet" href="' . BASE_PATH . CONTENT_PATH . '/assets/' . $controller->config()->system_theme . '/css/font-awesome.min.css" />' . PHP_EOL; $assets .= ' <link type="text/css" rel="stylesheet" href="' . BASE_PATH . CONTENT_PATH . '/assets/phire-content/css/phire.content.edit.css" />' . PHP_EOL . PHP_EOL; if (strpos($newHead, 'jax.4.0.0.min.js') === false && strpos($newHead, 'jax.4.0.0.js') === false) { if (strpos($newHead, '<script') !== false) { $newHead1 = substr($newHead, 0, strpos($newHead, '<script')); $newHead2 = substr($newHead, strpos($newHead, '<script')); $newHead1 .= '<script type="text/javascript" src="' . BASE_PATH . CONTENT_PATH . '/assets/phire/js/jax.4.0.0.min.js"></script>' . PHP_EOL; $newHead1 .= ' <script type="text/javascript">' . PHP_EOL; $newHead1 .= ' jax.noConflict();' . PHP_EOL; $newHead1 .= ' </script>' . PHP_EOL . ' '; $newHead = $newHead1 . $newHead2; } else { $assets .= ' <script type="text/javascript" src="' . BASE_PATH . CONTENT_PATH . '/assets/phire/js/jax.4.0.0.min.js"></script>' . PHP_EOL; $assets .= ' <script type="text/javascript">' . PHP_EOL; $assets .= ' jax.noConflict();' . PHP_EOL; $assets .= ' </script>' . PHP_EOL; } } $assets .= ' <script type="text/javascript" src="' . BASE_PATH . CONTENT_PATH . '/assets/phire/js/phire.js"></script>' . PHP_EOL; $assets .= ' <script type="text/javascript" src="' . BASE_PATH . CONTENT_PATH . '/assets/phire-content/js/phire.content.edit.js"></script>' . PHP_EOL . PHP_EOL; $assets .= '</head>'; $systemUri = BASE_PATH . APP_URI; if ($systemUri == '') { $systemUri = '/'; } $contentUri = BASE_PATH . APP_URI . '/content/edit/' . $controller->view()->type_id . '/' . $controller->view()->id . '?in_edit=1'; $nav = PHP_EOL . '<nav id="phire-in-edit-nav">' . PHP_EOL; $nav .= ' <a href="' . $contentUri . '" title="Edit Page" onclick="phire.launchPageEditor(this.href); return false;"><span>Edit</span></a>' . PHP_EOL; $nav .= ' <a href="' . $systemUri . '" title="Dashboard"><span>Dashboard</span></a>' . PHP_EOL; $nav .= '</nav>' . PHP_EOL . PHP_EOL; $nav .= '</body>'; $newHead = str_replace('</head>', $assets, $newHead); $body = str_replace($head, $newHead, $body); $body = str_replace('</body>', $nav, $body); $controller->response()->setBody($body); } } }