/** * class FSearch * * Search and retrieves Page objects. * * @author Andrew Crookston <*****@*****.**> * @since Frog version 0.9.5 * @return Array of Page objects or empty Array */ public static function search($args = null) { // Collect attributes... $where = isset($args['where']) ? trim($args['where']) : ''; $search = isset($args['search']) ? trim($args['search']) : ''; $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 $order_by_string = empty($order_by) ? '' : "ORDER BY {$order_by}"; $limit_string = $limit > 0 ? "LIMIT {$offset}, {$limit}" : ''; // Prepare the WHERE string (It's WHERE all the magic happens) ;) $where_string = empty($where) ? 'WHERE ' : "WHERE {$where} AND "; // Allow custom queries $where_string .= "(page.is_fsearchable = 1 AND page_part.name = 'body' AND page.needs_login = 2 " . ' AND MATCH (page_part.content_fsearchable) AGAINST (\'' . (string) $search . '\'))'; // full text $tablename = self::tableNameFromClassName('FSearch'); $tablename_user = self::tableNameFromClassName('User'); $tablename_part = self::tableNameFromClassName('PagePart'); // Prepare SQL $sql = "SELECT page.*, creator.name AS created_by_name, updator.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 updator ON page.updated_by_id = updator.id" . " LEFT JOIN {$tablename_part} AS page_part ON page.id = page_part.page_id" . " {$where_string} {$order_by_string} {$limit_string}"; $stmt = self::$__CONN__->prepare($sql); $stmt->execute(); $objects = array(); while ($obj = $stmt->fetchObject()) { $parent = self::findParentById($obj->parent_id); $obj->part = get_parts($obj->id); $objects[] = new Page($obj, $parent); } return $objects; }
function get_parts($struct, $result = array(), $section = null) { if (empty($struct->parts)) { $result[$section] = $struct; } else { foreach ($struct->parts as $id => $part) { $parent_section = $section !== null ? sprintf('%s.%s', $section, $id + 1) : $id + 1; $result = get_parts($part, $result, $parent_section); } } return $result; }
function find_page_by_slug($slug, &$parent) { global $__FROG_CONN__; $page_class = 'Page'; $parent_id = $parent ? $parent->id : 0; $sql = 'SELECT page.*, author.name AS author, updator.name AS updator ' . '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 slug = ? AND parent_id = ? AND (status_id=' . Page::STATUS_REVIEWED . ' OR status_id=' . Page::STATUS_PUBLISHED . ' OR status_id=' . Page::STATUS_HIDDEN . ')'; $stmt = $__FROG_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); // assign all is parts $page->part = get_parts($page->id); return $page; } else { return false; } }
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; }
<input type="text" name="part_title" placeholder = "File Title" id="part_title"> <br> <input type = "hidden" name = "max_file_size" value = "10485760"> <input type="submit" name="submit" value="Submit" /> </form> <?php $lesson_title_array = array(); $lesson_title_array = get_lessons(); if (empty($lesson_title_array)) { echo "No lesson yet !"; } else { foreach ($lesson_title_array as $lesson_title) { $i = 1; $part_title_array = array(); $part_title_array = get_parts($lesson_title); ?> <table> <thead> <tr> <th class = "ico"> <img src = "../design/images/logoicon.jpg" alt = "logoicon"> </th> <th colspan="2"> <?php echo $lesson_title; ?> </th> </tr> </thead>