function deprecated_find_page_by_slug($slug, &$parent, $all = false) { global $__CMS_CONN__; $page_class = 'Page'; $parent_id = $parent ? $parent->id : 0; $sql = 'SELECT page.*, author.name AS author, updater.name AS updater ' . 'FROM ' . TABLE_PREFIX . 'page AS page ' . 'LEFT JOIN ' . TABLE_PREFIX . 'user AS author ON author.id = page.created_by_id ' . 'LEFT JOIN ' . TABLE_PREFIX . 'user AS updater ON updater.id = page.updated_by_id '; if ($all) { $sql .= 'WHERE slug = ? AND parent_id = ? AND (status_id=' . Page::STATUS_PREVIEW . ' OR status_id=' . Page::STATUS_PUBLISHED . ' OR status_id=' . Page::STATUS_HIDDEN . ')'; } else { $sql .= 'WHERE slug = ? AND parent_id = ? AND (status_id=' . Page::STATUS_PUBLISHED . ' OR status_id=' . Page::STATUS_HIDDEN . ')'; } $stmt = $__CMS_CONN__->prepare($sql); $stmt->execute(array($slug, $parent_id)); if ($page = $stmt->fetchObject()) { // hook to be able to redefine the page class with behavior if (!empty($parent->behavior_id)) { // will return Page by default (if not found!) $page_class = Behavior::loadPageHack($parent->behavior_id); } // create the object page $page = new $page_class($page, $parent); return $page; } else { return false; } }
public static function findBySlugAndParentId($slug, $parent_id = 0, $class = __CLASS__) { /* TODO: Behaviour pagehack seems kludgish. */ $parent = Page::findById($parent_id); if ($parent && $parent->behaviorId()) { $class = Behavior::loadPageHack($parent->behaviorId()); } $params['where'] = sprintf("slug=%s AND parent_id=%d", self::connection()->quote($slug), $parent_id); $sql = Record::buildSql($params, $class); // print_r(self::connection()->query($sql, PDO::FETCH_CLASS, $class)->fetch()); return self::connection()->query($sql, PDO::FETCH_CLASS, $class)->fetch(); }
public function children($args = null, $value = array(), $include_hidden = false) { global $__FROG_CONN__; $page_class = 'Page'; // Collect attributes... $where = isset($args['where']) ? $args['where'] : ''; $order = isset($args['order']) ? $args['order'] : 'page.position, page.id'; $offset = isset($args['offset']) ? $args['offset'] : 0; $limit = isset($args['limit']) ? $args['limit'] : 0; // auto offset generated with the page param if ($offset == 0 && isset($_GET['page'])) { $offset = ((int) $_GET['page'] - 1) * $limit; } // Prepare query parts $where_string = trim($where) == '' ? '' : "AND " . $where; $limit_string = $limit > 0 ? "LIMIT {$offset}, {$limit}" : ''; // Prepare SQL $sql = 'SELECT page.*, author.name AS author, author.id AS author_id, updator.name AS updator, updator.id AS updator_id ' . 'FROM ' . TABLE_PREFIX . 'page AS page ' . 'LEFT JOIN ' . TABLE_PREFIX . 'user AS author ON author.id = page.created_by_id ' . 'LEFT JOIN ' . TABLE_PREFIX . 'user AS updator ON updator.id = page.updated_by_id ' . 'WHERE parent_id = ' . $this->id . ' AND (status_id=' . Page::STATUS_REVIEWED . ' OR status_id=' . Page::STATUS_PUBLISHED . ($include_hidden ? ' OR status_id=' . Page::STATUS_HIDDEN : '') . ') ' . "{$where_string} ORDER BY {$order} {$limit_string}"; $pages = array(); // hack to be able to redefine the page class with behavior if (!empty($this->behavior_id)) { // will return Page by default (if not found!) $page_class = Behavior::loadPageHack($this->behavior_id); } // Run! if ($stmt = $__FROG_CONN__->prepare($sql)) { $stmt->execute($value); while ($object = $stmt->fetchObject()) { $page = new $page_class($object, $this); // assignParts $page->part = get_parts($page->id); $pages[] = $page; } } if ($limit == 1) { return isset($pages[0]) ? $pages[0] : false; } return $pages; }
private static function findBySql($sql, $values = null) { $class_name = get_called_class(); Record::logQuery($sql); // Prepare and execute $stmt = Record::getConnection()->prepare($sql); if (!$stmt->execute($values)) { return false; } $page_class = 'Page'; $objects = array(); while ($page = $stmt->fetchObject('Page')) { $parent = $page->parent(); if (!empty($parent->behavior_id)) { // will return Page by default (if not found!) $page_class = Behavior::loadPageHack($parent->behavior_id); } // create the object page $page = new $page_class($page, $parent); $page->part = self::get_parts($page->id); $objects[] = $page; } return $objects; }
/** * Finds a Page record based on supplied arguments. * * Usage: * $page = Page::find('/the/uri/to/your/page'); * $page = Page::find(array('where' => 'created_by_id=12')); * * Argument array can contain: * - where * - order * - offset * - limit * * Return values can be: * - A single Page object * - An array of Page objects which can be empty * - False * * @param mixed $args Uri string or array of arguments. * @return mixed Page or array of Pages, otherwise false. */ public static function find($args = null) { if (!is_array($args)) { // Assumes find was called with a uri return Page::findByUri($args); } $page_class = 'Page'; // Collect attributes... $where = isset($args['where']) ? trim($args['where']) : ''; $order_by = isset($args['order']) ? trim($args['order']) : ''; $offset = isset($args['offset']) ? (int) $args['offset'] : 0; $limit = isset($args['limit']) ? (int) $args['limit'] : 0; // Prepare query parts $where_string = empty($where) ? '' : "WHERE {$where}"; $order_by_string = empty($order_by) ? '' : "ORDER BY {$order_by}"; $limit_string = $limit > 0 ? "LIMIT {$limit}" : ''; $offset_string = $offset > 0 ? "OFFSET {$offset}" : ''; $tablename = self::tableNameFromClassName('Page'); $tablename_user = self::tableNameFromClassName('User'); // Prepare SQL $sql = "SELECT page.*, creator.name AS created_by_name, updater.name AS updated_by_name FROM {$tablename} AS page" . " LEFT JOIN {$tablename_user} AS creator ON page.created_by_id = creator.id" . " LEFT JOIN {$tablename_user} AS updater ON page.updated_by_id = updater.id" . " {$where_string} {$order_by_string} {$limit_string} {$offset_string}"; $stmt = self::$__CONN__->prepare($sql); if (!$stmt->execute()) { return false; } // Run! $objects = array(); while ($page = $stmt->fetchObject('Page')) { $parent = $page->parent(); if (!empty($parent->behavior_id)) { // will return Page by default (if not found!) $page_class = Behavior::loadPageHack($parent->behavior_id); } // create the object page $page = new $page_class($page, $parent); $page->part = self::get_parts($page->id); $objects[] = $page; } // if we're loading just one result return it if ($limit == 1) { if (isset($objects['0']) && is_object($objects['0'])) { return $objects['0']; } } else { // or return them all return $objects; } return false; }