Exemple #1
0
 protected function robotsToString($app_id, $route, $robots)
 {
     $url = waRouting::getDomainUrl($this->domain, false) . '/' . waRouting::clearUrl($route);
     $result = "# wa " . $app_id . " " . $route . "\n";
     foreach ($robots as $row) {
         if (strpos($row[1], '[URL]') !== false) {
             $row[1] = str_replace('[URL]', $url, $row[1]);
         }
         $result .= $row[0] . ": " . $row[1] . "\n";
     }
     $result .= "# wa " . $app_id . "\n";
     return $result;
 }
 /**
  * Returns subtree
  *
  * @param int $id
  * @param int $depth related depth default is unlimited
  * @param bool $escape
  * @param array $where
  * @return array
  */
 public function getTree($id, $depth = null, $escape = false, $route = null)
 {
     $where = array();
     if ($id) {
         $parent = $this->getById($id);
         $left = (int) $parent[$this->left];
         $right = (int) $parent[$this->right];
     } else {
         $left = $right = 0;
     }
     if (!$id && $depth == null && $route && ($cache = wa('shop')->getCache())) {
         $cache_key = waRouting::clearUrl($route);
         $data = $cache->get($cache_key, 'categories');
     }
     if (empty($data)) {
         $sql = "SELECT c.* FROM {$this->table} c";
         if ($id) {
             $where[] = "c.`{$this->left}` >= i:left";
             $where[] = "c.`{$this->right}` <= i:right";
         }
         if ($depth !== null) {
             $depth = max(0, intval($depth));
             if ($id && $parent) {
                 $depth += (int) $parent[$this->depth];
             }
             $where[] = "c.`{$this->depth}` <= i:depth";
         }
         if ($route) {
             $sql .= " LEFT JOIN shop_category_routes cr ON c.id = cr.category_id";
             $where[] = "c.status = 1";
             $where[] = "cr.route IS NULL OR cr.route = '" . $this->escape($route) . "'";
         }
         if ($where) {
             $sql .= " WHERE (" . implode(') AND (', $where) . ')';
         }
         $sql .= " ORDER BY c.`{$this->left}`";
         $data = $this->query($sql, array('left' => $left, 'right' => $right, 'depth' => $depth))->fetchAll($this->id);
         if (!$id && $depth == null && $route && $cache) {
             $cache->set($cache_key, $data, 3600, 'categories');
         }
     }
     if ($escape) {
         foreach ($data as &$item) {
             $item['name'] = htmlspecialchars($item['name']);
         }
         unset($item);
     }
     return $data;
 }
 protected function getRoutes()
 {
     $routes = wa()->getRouting()->getByApp($this->getAppId());
     $result = array();
     $domain = siteHelper::getDomain();
     if (isset($routes[$domain])) {
         foreach ($routes[$domain] as $route_id => $route) {
             $route['_id'] = $route_id;
             $route['_domain'] = $domain;
             $route['_url'] = waRouting::getUrlByRoute($route, $domain);
             $route['_url_title'] = $domain . '/' . waRouting::clearUrl($route['url']);
             $result[] = $route;
         }
     }
     return $result;
 }
 /**
  * @param $domain
  * @param string $domain_name
  * @param bool $escape
  * @return array
  */
 public function getFrontendApps($domain, $domain_name = null, $escape = false)
 {
     $routes = $this->getRouting()->getRoutes($domain);
     $path = waRouting::getDomainUrl($domain, false);
     $apps = array();
     $all_apps = $this->getApps();
     foreach ($routes as $r) {
         if (isset($r['app']) && isset($all_apps[$r['app']])) {
             if (!empty($r['private'])) {
                 continue;
             }
             $url = $r['url'];
             $url = waRouting::clearUrl($url);
             if (strpos($url, '<') !== false) {
                 continue;
             }
             if (isset($r['_name'])) {
                 $name = $r['_name'];
             } elseif ($r['app'] == 'site') {
                 if ($domain_name) {
                     $name = $domain_name;
                 } else {
                     if (!isset(self::$instances['site'])) {
                         self::getInstance('site');
                     }
                     if (!isset($domain_info)) {
                         $domain_model = new siteDomainModel();
                         $domain_info = $domain_model->getByName($domain);
                     }
                     $name = $domain_info && $domain_info['title'] ? $domain_info['title'] : $this->accountName();
                 }
             } else {
                 $name = $all_apps[$r['app']]['name'];
             }
             $apps[] = array('url' => $path . '/' . $url, 'name' => $escape ? htmlspecialchars($name) : $name);
         }
     }
     return array_reverse($apps);
 }
 public function pages($parent_id = 0, $with_params = true)
 {
     if (is_bool($parent_id)) {
         $with_params = $parent_id;
         $parent_id = 0;
     }
     try {
         $page_model = $this->getPageModel();
         $domain = wa()->getRouting()->getDomain(null, true);
         if ($this->wa->getConfig()->getApplication() == wa()->getRouting()->getRoute('app')) {
             $route = wa()->getRouting()->getRoute('url');
             $url = $this->wa->getAppUrl(null, true);
         } else {
             $routes = wa()->getRouting()->getByApp($this->wa->getConfig()->getApplication(), $domain);
             if ($routes) {
                 $route = end($routes);
                 $route = $route['url'];
                 $url = wa()->getRootUrl(false, true) . waRouting::clearUrl($route);
             } else {
                 return array();
             }
         }
         $pages = null;
         $cache_key = $domain . '/' . waRouting::clearUrl($route);
         if ($cache = $this->wa->getCache()) {
             $pages = $cache->get($cache_key, 'pages');
         }
         if ($pages === null) {
             $pages = $page_model->getPublishedPages($domain, $route);
             if ($with_params && $pages) {
                 $page_params_model = $page_model->getParamsModel();
                 $data = $page_params_model->getByField('page_id', array_keys($pages), true);
                 foreach ($data as $row) {
                     if (isset($pages[$row['page_id']])) {
                         $pages[$row['page_id']][$row['name']] = $row['value'];
                     }
                 }
             }
             foreach ($pages as &$page) {
                 $page['url'] = $url . $page['full_url'];
                 if (!isset($page['title']) || !$page['title']) {
                     $page['title'] = $page['name'];
                 }
                 foreach ($page as $k => $v) {
                     if ($k != 'content') {
                         $page[$k] = htmlspecialchars($v);
                     }
                 }
             }
             unset($page);
             foreach ($pages as $page_id => $page) {
                 if ($page['parent_id'] && isset($pages[$page['parent_id']])) {
                     $pages[$page['parent_id']]['childs'][] =& $pages[$page_id];
                 }
             }
             if ($cache) {
                 $cache->set($cache_key, $pages, 3600, 'pages');
             }
         }
         if ($parent_id) {
             return isset($pages[$parent_id]['childs']) ? $pages[$parent_id]['childs'] : array();
         }
         foreach ($pages as $page_id => $page) {
             if ($page['parent_id']) {
                 unset($pages[$page_id]);
             }
         }
         return $pages;
     } catch (Exception $e) {
         return array();
     }
 }
 protected function getRoutes($all = false)
 {
     $routes = wa()->getRouting()->getByApp($this->getAppId());
     $result = array();
     foreach ($routes as $d => $domain_routes) {
         foreach (array_reverse($domain_routes, true) as $route_id => $route) {
             $route['_id'] = $route_id;
             $route['_domain'] = $d;
             $route['_url'] = waRouting::getUrlByRoute($route, $d);
             $route['_url_title'] = $d . '/' . waRouting::clearUrl($route['url']);
             $result[] = $route;
         }
     }
     return $result;
 }
 public function pages($parent_id = 0, $with_params = true)
 {
     if (is_bool($parent_id)) {
         $with_params = $parent_id;
         $parent_id = 0;
     }
     try {
         $domain_model = new siteDomainModel();
         $domain = $domain_model->getByName(waSystem::getInstance()->getRouting()->getDomain(null, true));
         $page_model = new sitePageModel();
         $sql = "SELECT id, parent_id, name, title, full_url, url, create_datetime, update_datetime FROM " . $page_model->getTableName() . '
                 WHERE domain_id = i:domain_id AND route = s:route AND status = 1 ORDER BY sort';
         if (wa()->getApp() == 'site') {
             $route = wa()->getRouting()->getRoute('url');
             $url = $this->wa->getAppUrl(null, true);
         } else {
             $routes = wa()->getRouting()->getByApp('site', $domain['name']);
             if ($routes) {
                 $route = current($routes);
                 $route = $route['url'];
                 $url = wa()->getRootUrl(false, true) . waRouting::clearUrl($route);
             } else {
                 return array();
             }
         }
         $pages = $page_model->query($sql, array('domain_id' => $domain['id'], 'route' => $route))->fetchAll('id');
         if ($with_params) {
             $page_params_model = new sitePageParamsModel();
             $data = $page_params_model->getByField('page_id', array_keys($pages), true);
             foreach ($data as $row) {
                 $pages[$row['page_id']][$row['name']] = $row['value'];
             }
         }
         foreach ($pages as &$page) {
             $page['url'] = $url . $page['full_url'];
             if (!isset($page['title']) || !$page['title']) {
                 $page['title'] = $page['name'];
             }
             foreach ($page as $k => $v) {
                 if ($k != 'content') {
                     $page[$k] = htmlspecialchars($v);
                 }
             }
         }
         unset($page);
         // make tree
         foreach ($pages as $page_id => $page) {
             if ($page['parent_id'] && isset($pages[$page['parent_id']])) {
                 $pages[$page['parent_id']]['childs'][] =& $pages[$page_id];
             }
         }
         foreach ($pages as $page_id => $page) {
             if ($page['parent_id']) {
                 unset($pages[$page_id]);
             }
         }
         return $pages;
     } catch (Exception $e) {
         return array();
     }
 }
 /**
  * @param string $url
  * @param array $get
  * @param waRouting $routing
  * @param bool $demo
  * @return string
  */
 private function redirectSimpla($url, $get, $routing, $demo = false)
 {
     $redirect = null;
     if (substr($url, 0, 9) == 'products/') {
         # products/%product_slug%
         $url = substr($url, 9);
         $url_parts = explode('/', $url);
         if ($p = $demo ? array('url' => '%product_url%', 'category_id' => true) : $this->productModel()->getByField('url', $url_parts[0])) {
             $params = array('product_url' => $p['url']);
             if ($p['category_id']) {
                 $c = $demo ? array('full_url' => '%category_url%') : $this->categoryModel()->getById($p['category_id']);
                 $params['category_url'] = $c['full_url'];
             }
             $redirect = wa()->getRouteUrl('shop/frontend/product', $params);
         }
     } elseif (substr($url, 0, 8) == 'catalog/') {
         # catalog/%category_slug%
         $url = substr($url, 8);
         if ($demo) {
             $redirect_params = array('category_url' => $url);
             $redirect = wa()->getRouteUrl('shop/frontend/category', $redirect_params);
         } else {
             if ($c = $this->categoryModel()->getByField('full_url', rtrim($url, '/'))) {
                 $route = $routing->getDomain(null, true) . '/' . $routing->getRoute('url');
                 $cat_routes_model = new shopCategoryRoutesModel();
                 $routes = $cat_routes_model->getRoutes($c['id']);
                 if (!$routes || in_array($route, $routes)) {
                     $redirect = wa()->getRootUrl(false, true) . $routing->getRootUrl() . $url;
                 }
             }
         }
     }
     return $redirect;
 }
 public function getUrlByRoute($route)
 {
     return $this->routing->getUrlByRoute($route, $this->domain);
 }