/** * 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; }
/** * 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)); }
/** * 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; }
/** * 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; }
/** * 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; } }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }