private function _add_to_page($tool, $page) { # make sure the tool is an object if (!is_object($tool)) { $tool = ORM::factory('tool')->where('fk_site', $this->site_id)->find($tool); if (!$tool->loaded) { return 'invalid tool'; } } # make sure the page is an object if (!is_object($page)) { $page = ORM::factory('page')->where('fk_site', $this->site_id)->find($page); if (!$page->loaded) { return 'invalid page'; } } # is the tool we are trying to add protected? if ('yes' == $tool->system_tool->protected) { # is this page a root page? str_replace('/', '', $page->page_name, $matches); if (0 < $matches) { return 'protected tools must be on root pages'; } # is this page already protected? if ($page_config_value = yaml::does_key_exist($this->site_name, 'pages_config', $page->page_name)) { return 'this page already contains a protected tool'; } } # get min position of tools on page $db = Database::instance(); $lowest = $db->query("\n SELECT MIN(position) as lowest\n FROM pages_tools \n WHERE page_id ='{$page->id}'\n AND fk_site = '{$this->site_id}'\n ")->current()->lowest; # add a new record to pages_tools # effectively "adding this tool to this page" $data = array('tool_id' => $tool->id, 'page_id' => $page->id, 'fk_site' => $this->site_id, 'position' => $lowest - 1); $instance_id = $db->insert('pages_tools', $data)->insert_id(); # only on successs... if ('yes' == $tool->system_tool->protected) { $toolname = strtolower($tool->system_tool->name); # protect the page relative to this new tool. $newline = "\n{$page->page_name}:{$toolname}-{$tool->parent_id}"; yaml::add_value($this->site_name, 'pages_config', $newline); } return "{$instance_id}"; }
public function settings($page_id = NULL) { valid::id_key($page_id); $page = ORM::factory('page')->where('fk_site', $this->site_id)->find($page_id); if (!$page->loaded) { die('invalid page id'); } if ($_POST) { # Validate page_name & duplicate check $directory = empty($_POST['directory']) ? NULL : $_POST['directory']; $new_page_name = $filename = self::validate_page_name($_POST['label'], $_POST['page_name'], $directory, $_POST['page_name']); if (!empty($directory)) { $new_page_name = "{$directory}/{$filename}"; } # if this page was the homepage, update homepage value if ($this->homepage == $_POST['old_page_name']) { $site = ORM::factory('site', $this->site_id); $site->homepage = $filename; $site->save(); yaml::edit_site_value($this->site_name, 'site_config', 'homepage', $filename); $_POST['enable'] = 'yes'; # force homepage to be enabled. } $page->page_name = $new_page_name; $page->title = $_POST['title']; $page->meta = $_POST['meta']; $page->label = $_POST['label']; $page->template = $_POST['template']; $page->menu = $_POST['menu']; $page->enable = isset($_POST['enable']) ? $_POST['enable'] : 'yes'; $page->save(); # did the page name change? # update all children within this "folder" if ($_POST['old_page_name'] != $filename) { # if this page is protected update the pages_config file. yaml::edit_key($this->site_name, 'pages_config', $_POST['old_page_name'], $filename); $old_full_page = empty($_POST['directory']) ? $_POST['old_page_name'] : $_POST['directory'] . '/' . $_POST['old_page_name']; $dir_pages = self::get_folder_filenames($old_full_page, 'change'); # if this page has children, update them! foreach ($dir_pages as $page_id => $page_name) { $page = ORM::factory('page')->where('fk_site', $this->site_id)->find($page_id); if (!$page->loaded) { continue; } $page->page_name = "{$new_page_name}/{$page_name}"; $page->save(); } } # if the page was the account page, update site_config if ($this->account_page == $_POST['old_page_name']) { yaml::edit_site_value($this->site_name, 'site_config', 'account_page', $filename); } # should we publish this page? if (isset($_POST['publish']) and 'yes' == $_POST['publish']) { $cache = DATAPATH . "{$this->site_name}/cache/{$page_id}.html"; if (file_exists($cache)) { unlink($cache); } } die('Page Settings Saved'); # success } # Is this a subpage? (pop the end filename node from the directory.) $filename = $page->page_name; $directory = ''; $directory_array = explode('/', $filename); if (1 < count($directory_array)) { $filename = array_pop($directory_array); $directory = implode('/', $directory_array); } $primary = new View("page/page_settings"); $primary->page = $page; $primary->filename = $filename; $primary->dir = $directory; # get available templates from theme. if ($templates = yaml::parse($this->site_name, NULL, "themes/{$this->theme}/config")) { $primary->templates = $templates; } else { $primary->templates = array('master' => 'default layout'); } # Javascript duplicate page_name filter Validation # convert filter_array to string to use as javascript array $filter_array = self::get_folder_filenames($directory, NULL, $filename); $filter_string = implode("','", $filter_array); $primary->page_filter_js = "'{$filter_string}'"; # is page protected? $primary->is_protected = yaml::does_key_exist($this->site_name, 'pages_config', $page->page_name) ? TRUE : FALSE; die($primary); }
private function save_page_cache() { # never save an admin view of a page. if ($this->client->can_edit($this->site_id)) { return FALSE; } if (!$this->save_page_as) { return FALSE; } if (file_exists("{$this->page_cache_dir}/{$this->save_page_as}.html") and !$this->save_page_force) { return FALSE; } # cannot save a protected (dynamic) page. if ($this->page_name) { if (yaml::does_key_exist($this->site_name, 'pages_config', $this->page_name)) { return FALSE; } } if (!is_dir("{$this->page_cache_dir}")) { mkdir("{$this->page_cache_dir}"); } $date = date('m.d.y g:ia e'); file_put_contents("{$this->page_cache_dir}/{$this->save_page_as}.html", $this->template->render() . "\n<!-- cached {$date} -->"); return TRUE; }
function get_site() { $session = Session::instance(); $domain_array = explode('.', $_SERVER['HTTP_HOST']); # if the url = [subdomain].plusjade.org if (in_array(ROOTNAME, $domain_array)) { $field_name = 'subdomain'; $site_name = $domain_array['0']; # if no subdomain, set the site_name to the admin account if ('2' == count($domain_array)) { $site_name = ROOTACCOUNT; } } else { $field_name = 'custom_domain'; $site_name = $_SERVER['HTTP_HOST']; } $site = ORM::factory('site')->where(array($field_name => $site_name))->find(); if (!$site->loaded) { header("HTTP/1.0 404 Not Found"); die('site does not exist'); } # IMPORTANT: sets the site name & non-sensitive site_data. $_SESSION['site_name'] = $site->subdomain; # Make sure site_config file exists # the site_config file is parsed in the root Controller_Core library file. $site_config_path = DATAPATH . "{$site->subdomain}/protected/site_config.yml"; if (!file_exists($site_config_path)) { $replacements = array($site->id, $site->subdomain, $site->theme, $site->banner, $site->homepage); yaml::new_site_config($site_name, $replacements); } /* --- Route the URL --- --------------------- * The URL will tell us how to build the page. a. is /get/ b. is file request c. is ajax request d. is page_name is protected page? */ # Get page_name $url_array = URI::url_array(); $page_name = empty($url_array['0']) ? $site->homepage : $url_array['0']; # app/config/routes.php routes the url correctly. if ('get' == $page_name) { return FALSE; } if ('files' == $page_name) { $file = new Files_Controller(); die($file->_output($url_array)); } # Is page_name protected? $page_config_value = yaml::does_key_exist($site->subdomain, 'pages_config', $page_name); # Is protected ajax request? # get info from pages_config.yaml if ($page_config_value and request::is_ajax()) { # extract toolname and parent_id from pages_config.yaml $page_data = explode('-', $page_config_value); list($toolname, $parent_id) = $page_data; # make sure the page_name is correct. $url_array['0'] = $page_name; # send to tool _ajax handler. we expect raw data output. die(Load_Tool::factory($toolname)->_ajax($url_array, $parent_id)); } elseif (isset($_POST['post_handler']) and request::is_ajax()) { # currently only enabled for format form type. list($toolname, $parent_id) = explode(':', $_POST['post_handler']); die(Load_Tool::factory($toolname)->_ajax($url_array, $parent_id)); } # Non-protected page_names can be a subdirectory name. # do this only if an actual url string is being sent. # so we need to get the full url string. if (!empty($url_array['1']) and !$page_config_value) { $page_name = strstr($_SERVER['REQUEST_URI'], '/'); $page_name = ltrim($page_name, '/'); } $page = ORM::factory('page')->where(array('fk_site' => $site->id, 'page_name' => $page_name))->find(); if (!$page->loaded) { Event::run('system.404'); } # Load the page! $build_page = new Build_Page_Controller(); die($build_page->_index($page)); }