예제 #1
0
 /**
  * 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);
         }
     }
 }
예제 #2
0
 /**
  * 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);
         }
     }
 }
예제 #3
0
 /**
  * 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);
         }
     }
 }
예제 #4
0
 /**
  * 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);
         }
     }
 }
예제 #5
0
파일: Seo.php 프로젝트: phirecms/phire-seo
 /**
  * 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);
     }
 }
예제 #6
0
 /**
  * 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);
         }
     }
 }
예제 #7
0
 /**
  * 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);
         }
     }
 }
예제 #8
0
 /**
  * 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);
             }
         }
     }
 }
예제 #9
0
 /**
  * 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);
     }
 }
예제 #10
0
 /**
  * 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()));
     }
 }
예제 #11
0
 /**
  * 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);
         }
     }
 }