Exemplo n.º 1
0
 /**
  * main action
  */
 public function mainAction()
 {
     /**
      * node_id is mandatory input
      */
     if (is_numeric($this->GET['node_id'])) {
         $node_id = $this->GET['node_id'];
     } else {
         msg("menu_prevnext: missing node_id", 'error');
         return false;
     }
     /**
      * get detail and list
      */
     $Node = new common_node();
     $first_parent_type_page_node_id = $Node->getParentPageId($node_id);
     $parent_page_detail = $Node->getDetail($first_parent_type_page_node_id);
     $current_node_detail = $Node->getDetail($node_id);
     if ($current_node_detail['node_group'] == 'page') {
         // the specific node_id is page type
         $current_page_detail = $current_node_detail;
         $parent_page_detail = $Node->getDetail($Node->getParentPageId($current_page_detail['parent']));
     } else {
         // we need to first parent type page
         $current_page_detail = $parent_page_detail;
         $parent_page_detail = $Node->getDetail($current_page_detail['parent']);
     }
     $siblings = $Node->listing("parent = {$current_page_detail['parent']} AND node_group = 'page' AND publish = 1", 'priority DESC, id ASC');
     if (is_array($siblings)) {
         /**
          * find prev/next node
          */
         foreach ($siblings as $k => $item) {
             if ($item['id'] == $current_page_detail['id']) {
                 $prev_node = $siblings[$k - 1];
                 $next_node = $siblings[$k + 1];
                 break;
             }
         }
         /**
          * cycle
          */
         if (!is_array($prev_node)) {
             $count = count($siblings);
             $prev_node = $siblings[$count - 1];
         }
         if (!is_array($next_node)) {
             $next_node = $siblings[0];
         }
     }
     /**
      * assign
      */
     $this->tpl->assign('PREV', $prev_node);
     $this->tpl->assign('ALL', $parent_page_detail);
     $this->tpl->assign('NEXT', $next_node);
     return true;
 }
Exemplo n.º 2
0
 /**
  * Initialize data structures
  */
 protected function initializeData($node_id)
 {
     $this->profile = $this->getProfile();
     // load all pages
     $Node = new common_node();
     $sql = "publish = 1 AND display_in_menu = 1 AND node_group = 'page' AND node_controller <> 'symbolic'";
     if ($node_id) {
         $sql .= " AND id = {$node_id}";
     }
     $this->pageList = $Node->listing($sql);
     // Initialize the HTTP client
     $this->client = new Zend_Http_Client();
     $this->client->setConfig(array('maxredirects' => 0, 'timeout' => 30));
 }
Exemplo n.º 3
0
 /**
  * main action
  */
 public function mainAction()
 {
     require_once 'models/common/common_node.php';
     $Node = new common_node();
     $node_list = $Node->listing('', 'modified DESC', '0,20');
     foreach ($node_list as $item) {
         $item['latest_change_by'] = $Node->getCustomerIdForLastModified($item['id']);
         if ($item['publish'] == 0) {
             $item['class'] = 'disabled';
         }
         $this->tpl->assign("ITEM", $item);
         $this->tpl->parse('content.item');
     }
     return true;
 }
Exemplo n.º 4
0
 /**
  * main action
  */
 public function mainAction()
 {
     // get selected store for detail
     $node_id = (int) $this->GET['node_id'];
     if ($node_id > 0) {
         $Node = new common_node();
         $node = $Node->detail($node_id);
         $siblings = $Node->listing("node_group = 'page' AND node_controller = 'store' AND content ~ '[0-9]+' AND parent = {$node['parent']}");
         if (count($siblings) > 0) {
             foreach ($siblings as $i => $sibling) {
                 $column = $i % 3 + 1;
                 $this->tpl->assign("STORE", $sibling);
                 $this->tpl->parse("content.list.column{$column}");
             }
             $this->tpl->parse("content.list");
         }
     }
     return true;
 }
Exemplo n.º 5
0
 /**
  * find product in node
  */
 function findProductInNode($product_id)
 {
     require_once 'models/common/common_node.php';
     $Node = new common_node();
     if (is_numeric($product_id)) {
         $current = $Node->listing("node_group = 'page' AND node_controller ~ 'product' AND content = '{$product_id}'", 'id ASC');
         return $current;
     } else {
         msg("ecommerce_product.findProductInNode: product id is not numeric", 'error');
         return false;
     }
 }
Exemplo n.º 6
0
 /**
  * main action
  */
 public function mainAction()
 {
     require_once 'models/common/common_node.php';
     $Node = new common_node();
     if (is_numeric($this->GET['id'])) {
         $delete_id = $this->GET['id'];
     } else {
         return false;
     }
     //delete
     if ($this->GET['delete'] && is_numeric($delete_id)) {
         $id_map = $Node->getIdMap();
         /**
          * create confirmation code
          */
         $confirmation_code = md5($delete_id . session_id());
         $this->tpl->assign('CONFIRMATION_CODE', $confirmation_code);
         /**
          * safety check we are not trying to delete some core page
          */
         if (!array_search($delete_id, $id_map)) {
             $node_data = $Node->detail($delete_id);
             if (!is_array($node_data)) {
                 msg("Content ID {$delete_id} does not exists", 'error');
                 return false;
             }
             if ($this->GET['confirm']) {
                 //delete only if confirmation code match
                 if ($this->GET['confirm'] === $confirmation_code) {
                     if ($Node->moveToBin($delete_id)) {
                         msg("{$node_data['node_group']} \"{$node_data['title']}\" (id={$node_data['id']}) has been deleted");
                         //if it was a "page", than go to parent page
                         if ($this->GET['ajax'] == 0) {
                             if ($node_data['node_group'] == 'page') {
                                 onxshopGoTo("/page/{$node_data['parent']}");
                             } else {
                                 onxshopGoTo($_SESSION['last_diff'], 2);
                             }
                         }
                     } else {
                         msg("Can't delete!", 'error');
                     }
                 } else {
                     msg("node_delete: incorrect confirmation code", 'error');
                 }
             } else {
                 //get children
                 $children = $Node->listing("parent = {$delete_id}");
                 foreach ($children as $child) {
                     $this->tpl->assign("CHILD", $child);
                     $this->tpl->parse('content.confirm.children.item');
                 }
                 if (count($children) > 0) {
                     $this->tpl->parse('content.confirm.children');
                 }
                 //get linked as shared content
                 $node_data = $Node->detail($delete_id);
                 $this->tpl->assign("NODE", $node_data);
                 $shared_linked = $Node->getShared($delete_id);
                 foreach ($shared_linked as $linked) {
                     $this->tpl->assign("LINKED", $linked);
                     $this->tpl->parse('content.confirm.linked.item');
                 }
                 if (count($shared_linked) > 0) {
                     $this->tpl->parse('content.confirm.linked');
                 }
                 $this->tpl->parse('content.confirm');
             }
         } else {
             msg("This can't be deleted", 'error');
         }
     }
     return true;
 }
Exemplo n.º 7
0
 /**
  * Returns array of all store pages. Store id is used as array index.
  * 
  * @return Array
  */
 protected function getStorePages()
 {
     $Node = new common_node();
     $pages_raw = $Node->listing("node_group = 'page' AND node_controller = 'store' AND content ~ '[0-9]+'");
     $pages = array();
     foreach ($pages_raw as $page) {
         $store_id = (int) $page['content'];
         $pages[$store_id] = $page;
     }
     return $pages;
 }
Exemplo n.º 8
0
 /**
  * find store by node_id
  */
 function findStoreByNode($node_id)
 {
     require_once 'models/common/common_node.php';
     $Node = new common_node();
     if (is_numeric($node_id)) {
         $nodes = $Node->listing("node_group = 'page' AND node_controller = 'store' AND id = '{$node_id}'", 'id ASC');
         $store_id = $nodes[0]['content'];
         if (is_numeric($store_id) && $store_id > 0) {
             return $this->detail($store_id);
         }
     } else {
         msg("ecommerce_store.findStoreByNode: node id is not numeric", 'error');
     }
     return false;
 }
Exemplo n.º 9
0
 /**
  * getRecipeListForTaxonomy
  *
  * list recipes for given taxonomy_ids
  * each item contains
  *    - main image details as 'image' field
  *    - page details as 'page' field
  *
  * @param array $taxonomy_ids
  * @param string $sort_by
  * @param string $sort_direction
  * @param int $limit_from
  * @param int $limit_per_page
  * @param string $image_role
  * @param bool $conjunction - whether included recipes should have all given $taxonomy_ids (true) or any of given $taxonomy_ids (false)
  * @param int|string $publish_status - integer to limit by publishing status, string, i.e. 'all' for no restriction by publishing status
  * @return array
  */
 function getRecipeListForTaxonomy($taxonomy_ids, $sort_by = 'created', $sort_direction = 'DESC', $limit_from = false, $limit_per_page = false, $image_role = 'teaser', $conjunction = true, $publish_status = 1)
 {
     /**
      * input filter
      */
     // sorting
     if (!in_array($sort_by, array('title', 'created', 'modified', 'priority', 'share_counter'))) {
         $sort_by = 'created';
     }
     if (!in_array($sort_direction, array('DESC', 'ASC'))) {
         $sort_direction = 'DESC';
     }
     $order_by = " ORDER BY {$sort_by} {$sort_direction}";
     // limit
     if (!is_numeric($limit_from)) {
         $limit_from = false;
     }
     if (!is_numeric($limit_per_page)) {
         $limit_per_page = false;
     }
     // allow to use limit_per_page without providing limit_from
     if (is_numeric($limit_per_page) && $limit_from === false) {
         $limit_from = 0;
     }
     if (is_numeric($limit_from) && is_numeric($limit_per_page)) {
         $limit = " LIMIT {$limit_per_page} OFFSET {$limit_from}";
     } else {
         $limit = '';
     }
     /**
      * initialise
      */
     require_once 'models/common/common_node.php';
     require_once 'models/ecommerce/ecommerce_recipe_taxonomy.php';
     require_once 'models/ecommerce/ecommerce_recipe_image.php';
     require_once 'models/ecommerce/ecommerce_recipe_review.php';
     $Node = new common_node();
     $Image = new ecommerce_recipe_image();
     $Taxonomy = new ecommerce_recipe_taxonomy();
     $Review = new ecommerce_recipe_review();
     /**
      * recipes list
      */
     $recipes = array();
     $where = "";
     if (is_array($taxonomy_ids) && count($taxonomy_ids) > 0) {
         $id_list = implode(",", $taxonomy_ids);
         if ($conjunction) {
             $count = count($taxonomy_ids);
             $where = "AND ecommerce_recipe.id IN (\n\t\t\t\t\tSELECT ecommerce_recipe.id\n\t\t\t\t\tFROM ecommerce_recipe\n\t\t\t\t\tINNER JOIN ecommerce_recipe_taxonomy ON ecommerce_recipe_taxonomy.node_id = ecommerce_recipe.id\n\t\t\t\t\tWHERE ecommerce_recipe_taxonomy.taxonomy_tree_id IN ({$id_list})\n\t\t\t\t\tGROUP BY ecommerce_recipe.id\n\t\t\t\t\tHAVING count(DISTINCT ecommerce_recipe_taxonomy.taxonomy_tree_id) = {$count}\n\t\t\t\t)";
         } else {
             $where = "AND ecommerce_recipe.id IN (SELECT node_id FROM ecommerce_recipe_taxonomy WHERE taxonomy_tree_id IN ({$id_list}))";
         }
     }
     // $publish_status
     if (is_numeric($publish_status)) {
         $where_node_publish = " AND common_node.publish = {$publish_status}";
         $where_recipe_publish = " AND ecommerce_recipe.publish = {$publish_status}";
     }
     $sql = "SELECT ecommerce_recipe.*, common_node.share_counter\n\t\t\tFROM ecommerce_recipe\n\t\t\tINNER JOIN common_node ON (common_node.node_group = 'page' \n\t\t\t\tAND common_node.node_controller = 'recipe'\n\t\t\t\tAND common_node.content = ecommerce_recipe.id::varchar\n\t\t\t\t{$where_node_publish})\n\t\t\tWHERE 1=1 {$where_recipe_publish} {$where}\n\t\t\t{$order_by}\n\t\t\t{$limit}";
     $recipes = $this->executeSql($sql);
     // return empty array if nothing is found
     if (!is_array($recipes)) {
         return array();
     }
     $recipe_pages = $Node->listing("node_group = 'page' AND node_controller = 'recipe' AND content ~ '[0-9]+' AND publish = 1");
     foreach ($recipe_pages as $recipe_page) {
         foreach ($recipes as &$recipe) {
             if ($recipe_page['content'] == $recipe['id']) {
                 // assign page
                 $recipe['page'] = $recipe_page;
                 // load images
                 $image_list = $Image->listFiles($recipe['id'], $image_role);
                 // if empty list, get any image, without specification of image_role
                 if (is_array($image_list) && count($image_list) == 0) {
                     $image_list = $Image->listFiles($recipe['id']);
                 }
                 // return only one image
                 $recipe['image'] = $image_list[0];
                 // load review
                 $recipe['review'] = $Review->getRating($recipe['id']);
             }
         }
     }
     return $recipes;
 }
Exemplo n.º 10
0
 /**
  * main action
  */
 public function mainAction()
 {
     /**
      * initialize
      */
     require_once 'models/common/common_node.php';
     require_once 'models/common/common_image.php';
     $Node = new common_node();
     $Image = new common_image();
     /**
      * find node id
      */
     if (is_numeric($this->GET['id'])) {
         $id = $this->GET['id'];
     } else {
         $id = $Node->conf['id_map-blog'];
     }
     /**
      * set header 
      */
     header('Content-Type: text/xml; charset=UTF-8');
     // flash in IE with SSL dont like Cache-Control: no-cache and Pragma: no-coche
     header("Cache-Control: ");
     header("Pragma: ");
     /**
      * Initialize pagination variables
      */
     if (is_numeric($this->GET['limit_from'])) {
         $from = $this->GET['limit_from'];
     } else {
         $from = 0;
     }
     if (is_numeric($this->GET['limit_per_page'])) {
         $per_page = $this->GET['limit_per_page'];
     } else {
         $per_page = 25;
     }
     $limit = "{$from},{$per_page}";
     /**
      * latest date
      */
     $rss_date = date('r', time());
     $this->tpl->assign("RSS_DATE", $rss_date);
     /**
      * check
      */
     if (!is_numeric($id)) {
         msg('export rss: id is not numeric', 'error');
         return false;
     }
     /**
      * process
      */
     $node_data = $Node->getDetail($id);
     $channel_taxonomy_labels = array();
     if ($node_data['publish'] == 1) {
         $this->tpl->assign('NODE', $node_data);
         $taxonomy_filter = '';
         if (is_numeric($this->GET['taxonomy_tree_id']) && $this->GET['taxonomy_tree_id'] > 0) {
             $taxonomy_filter = " AND id IN (SELECT node_id FROM common_node_taxonomy WHERE taxonomy_tree_id = {$this->GET['taxonomy_tree_id']})";
         }
         $children = $Node->listing("parent = {$id} AND publish = 1 AND node_group='page' {$taxonomy_filter}", "created DESC", $limit);
         foreach ($children as $c) {
             /**
              * create public link
              */
             $link = $Node->getSeoURL($c['id']);
             $c['url'] = "http://{$_SERVER['HTTP_HOST']}{$link}";
             /**
              * format date
              */
             $c['rss_date'] = date('r', strtotime($c['created']));
             /**
              * get categories
              */
             $taxonomy_list = $Node->getRelatedTaxonomy($c['id']);
             foreach ($taxonomy_list as $taxonomy) {
                 $this->tpl->assign('CATEGORY', $taxonomy);
                 $this->tpl->parse('content.item.category');
                 $channel_taxonomy_labels[$taxonomy['label']['title']] = true;
             }
             /**
              * add image (not part of RSS spec)
              */
             $c['image'] = $this->processImage($Image->getTeaserImageForNodeId($c['id']));
             /**
              * assign
              */
             $this->tpl->assign('CHILD', $c);
             if ($c['image']) {
                 $this->tpl->parse("content.item.image");
             }
             $this->tpl->parse("content.item");
         }
     }
     // parse channel category list
     $i = 0;
     foreach ($channel_taxonomy_labels as $label => $item) {
         if ($i + 1 < count($channel_taxonomy_labels)) {
             $label = $label . "/";
         }
         $this->tpl->assign('CATEGORY', $label);
         $this->tpl->parse('content.category');
         $i++;
     }
     return true;
 }
Exemplo n.º 11
0
 /**
  * generate uri table
  */
 function generateURITable()
 {
     require_once 'models/common/common_node.php';
     $Node = new common_node();
     $nodes = $Node->listing("node_group = 'page'");
     $rewrite_table = array();
     foreach ($nodes as $p) {
         $rewrite_table[$p['id']] = $this->generateSingleURIFullPath($p);
     }
     return $rewrite_table;
 }