From 9bb993778bc7a0c6f17673e509ed147202e69ee7 Mon Sep 17 00:00:00 2001 From: brettp Date: Tue, 9 Mar 2010 04:22:35 +0000 Subject: Added dynamic keywords for view and entity. Separated logged in and logged out front page views. Fixed a problem with saving metatags. Added PHPDoc headers. Updated language strings. git-svn-id: http://code.elgg.org/elgg/trunk@5315 36083f99-b078-4883-b0ff-0f9b5a30f544 --- mod/sitepages/actions/addfront.php | 9 +- mod/sitepages/actions/addmeta.php | 4 +- mod/sitepages/languages/en.php | 34 ++++++- mod/sitepages/sitepages_functions.php | 107 ++++++++++++++++++++- mod/sitepages/start.php | 37 +++++-- .../views/default/settings/sitepages/edit.php | 12 +++ .../views/default/sitepages/custom_frontpage.php | 10 +- .../views/default/sitepages/footer_menu.php | 10 +- .../views/default/sitepages/forms/editfront.php | 25 +++-- .../views/default/sitepages/forms/editmeta.php | 2 +- mod/sitepages/views/default/sitepages/keywords.php | 3 + mod/sitepages/views/default/sitepages/metatags.php | 12 ++- 12 files changed, 230 insertions(+), 35 deletions(-) (limited to 'mod') diff --git a/mod/sitepages/actions/addfront.php b/mod/sitepages/actions/addfront.php index 6b8782da7..fd2154cc3 100644 --- a/mod/sitepages/actions/addfront.php +++ b/mod/sitepages/actions/addfront.php @@ -12,7 +12,9 @@ admin_gatekeeper(); -$content = get_input('sitepages_content', '', FALSE); +$logged_in_content = get_input('logged_in_content', '', FALSE); +$logged_out_content = get_input('logged_out_content', '', FALSE); + $css = get_input('css', '', FALSE); $loggedin_user_guid = get_loggedin_userid(); @@ -25,8 +27,9 @@ if (!$sitepage = sitepages_get_sitepage_object('front')) { $sitepage = sitepages_create_sitepage_object('front'); } -$sitepage->title = $css; -$sitepage->description = $content; +$sitepage->css = $css; +$sitepage->logged_in_content = $logged_in_content; +$sitepage->logged_out_content = $logged_out_content; if ($sitepage->save()) { system_message(elgg_echo("sitepages:posted")); diff --git a/mod/sitepages/actions/addmeta.php b/mod/sitepages/actions/addmeta.php index e9f40cdb4..e5c947776 100644 --- a/mod/sitepages/actions/addmeta.php +++ b/mod/sitepages/actions/addmeta.php @@ -19,8 +19,8 @@ $metatags = get_input('metatags', '', FALSE); $_SESSION['description'] = $description; $_SESSION['metatags'] = $metatags; -if (!$sitepage = sitepages_get_sitepage_object('front')) { - $sitepage = sitepages_create_sitepage_object('front'); +if (!$sitepage = sitepages_get_sitepage_object('seo')) { + $sitepage = sitepages_create_sitepage_object('seo'); } $sitepage->title = $metatags; diff --git a/mod/sitepages/languages/en.php b/mod/sitepages/languages/en.php index ec08493c9..92cddb949 100644 --- a/mod/sitepages/languages/en.php +++ b/mod/sitepages/languages/en.php @@ -29,7 +29,8 @@ $english = array( 'sitepages:metadescription' => "Meta description for search engines", 'sitepages:metatags' => "Meta tags for search engines (use a comma)", 'sitepages:seocreated' => "Your search engine information has been added", - 'sitepages:front_content' => "Frontpage content", + 'sitepages:logged_in_front_content' => "Logged in front page content", + 'sitepages:logged_out_front_content' => "Logged out front page content", 'sitepages:ownfront' => "Construct your own frontpage for this network. (Note:you will need to know html and css)", 'sitepages:addcontent' => "You can add content here via your admin tools. Look for the external pages link under admin.", 'item:object:front' => 'Front page items', @@ -45,6 +46,37 @@ $english = array( */ 'sitepages:deleteerror' => "There was a problem deleting the old page", 'sitepages:error' => "There has been an error, please try again and if the problem persists, contact the administrator", + + /** + * Key words + */ + 'sitepages:keywords_title' => 'Keywords', + 'sitepages:keywords_instructions' => + 'Keywords are replaced with content when viewed. They must be surrounded by + two square brackets ([[ and ]]). You can build your own or use the ones listed below. + Hover over a keyword to read its description.', + + 'sitepages:keywords_instructions_more' => + ' + You can build your own keywords for views and entities.

+ + [[entity: type=type, subtype=subtype, owner=username, limit=number]]
+ + EX: To show 5 blog posts by admin:
+ [[entity: type=object, subtype=blog, owner=admin, limit=5]] + +

+ + You can also specify a valid Elgg view:
+ [[view: elgg_view, name=value]]
+ + Ex: To show a text input with a default value:
+ [[view: input/text, value=This is a default value]] + +

', + + 'sitepages:keywords:login_box' => 'A standard login box. Useful for the logged out content area.', + 'sitepages:keywords:site_stats' => 'This does not exist yet.', ); add_translation('en', $english); \ No newline at end of file diff --git a/mod/sitepages/sitepages_functions.php b/mod/sitepages/sitepages_functions.php index 7ffe8df63..0341b590b 100644 --- a/mod/sitepages/sitepages_functions.php +++ b/mod/sitepages/sitepages_functions.php @@ -10,10 +10,6 @@ */ -function sitepages_parse_frontpage($contents){ - echo htmlspecialchars_decode($contents, ENT_NOQUOTES); -} - /** * Returns a single object that holds information about * customizations for the $section site page. The object guid @@ -115,6 +111,109 @@ function sitepages_get_page_content($page_type) { return $content; } + +/** + * Used to determine how to handle special non-static keywords. + * + * @param unknown_type $matches + * @return html + */ +function sitepages_parse_view_match($matches) { + $keyword = $matches[0]; + $type = trim($matches[1]); + $params_string = trim($matches[2]); + + switch ($type) { + case 'entity': + $options = sitepages_keywords_parse_entity_params($params_string); + // must use this lower-level function because I missed refactoring + // the list entity functions for relationships. + // (which, since you're here, is the only function that runs through all + // possible options for elgg_get_entities*() functions...) + $entities = elgg_get_entities_from_relationship($options); + $content = elgg_view_entity_list($entities, count($entities), $options['offset'], + $options['limit'], $options['full_view'], $options['view_type_toggle'], $options['pagination']); + break; + + case 'view': + // parses this into an acceptable array for $vars. + $info = sitepages_keywords_parse_view_params($params_string); + $content = elgg_view($info['view'], $info['vars']); + + break; + + } + + return $content; +} + +/** + * Creates an array from a "name=value, name1=value2" string. + * + * @param $string + * @return array + */ +function sitepages_keywords_tokenize_params($string) { + $pairs = array_map('trim', explode(',', $string)); + + $params = array(); + + foreach ($pairs as $pair) { + list($name, $value) = explode('=', $pair); + + $name = trim($name); + $value = trim($value); + $params[$name] = $value; + } + + return $params; +} + +/** + * + * @param $string + * @return unknown_type + */ +function sitepages_keywords_parse_view_params($string) { + $vars = sitepages_keywords_tokenize_params($string); + + // the first element key is the view + $var_keys = array_keys($vars); + $view = $var_keys[0]; + + $info = array( + 'view' => $view, + 'vars' => $vars + ); + + return $info; + +} + +/** + * Returns an options array suitable for using in elgg_get_entities() + * + * @param string $string "name=value, name2=value2" + * @return array + */ +function sitepages_keywords_parse_entity_params($string) { + $params = sitepages_keywords_tokenize_params($string); + + // handle some special cases + if (isset($params['owner'])) { + if ($user = get_user_by_username($params['owner'])) { + $options['owner_guid'] = $user->getGUID(); + } + } + + // @todo probably need to add more for + // group -> container_guid, etc + + return $params; +} + + + /** * Utility object to store site page information. */ diff --git a/mod/sitepages/start.php b/mod/sitepages/start.php index 186738bab..5be36842a 100644 --- a/mod/sitepages/start.php +++ b/mod/sitepages/start.php @@ -11,8 +11,16 @@ * @copyright Curverider Ltd 2008-2010 * @link http://elgg.org/ * - * @todo Implement sticky pages - * @todo DRY up actions and views + * @todo + * Check for SQL injection problems. + * Make sure this stuff doesn't show up in search. + * Check entity keyword views against fullview. Force to FALSE? + * DRY up actions and views + * Implement sticky forms + * Use $entity->view to redirect to url of page. + * The tool settings view is probably not needed as it can be added to the front page edit tab. + * You can say pg/sitepages/edit|read/any_page_i_want and it will let you. + * Clean up and probably move the docs for keywords. */ /** @@ -93,6 +101,8 @@ function sitepages_custom_index() { } set_context($context); + + // return NULL to pass this to next in chain, or back to standard index.php. return NULL; } @@ -161,12 +171,24 @@ function sitepages_page_handler($page) { page_draw($title, $content); } - +/** + * Parses a registered view for supported keywords. + * + * @param unknown_type $hook + * @param unknown_type $entity_type + * @param unknown_type $return_value + * @param unknown_type $params + * @return string + */ function sitepages_parse_view($hook, $entity_type, $return_value, $params) { global $CONFIG; + // give me everything that is (string):(any thing that's not a ]) surrounded by [[ ]]s + $keyword_regex = '/\[\[([a-z]+):([^\]]+)\]\]/'; + if (in_array($params['view'], $CONFIG->sitepages_parse_views)) { $keywords = $CONFIG->sitepages_keywords; + $view_options = array( 'view' => $params['view'] ); @@ -176,11 +198,17 @@ function sitepages_parse_view($hook, $entity_type, $return_value, $params) { $return_value = str_replace("[[$keyword]]", $content, $return_value); } } + + // parse for specialized tags: + // [[entity: key=value, key=value,etc]] + // [[view:viewname, vars_key=value,...]] + $return_value = preg_replace_callback($keyword_regex, 'sitepages_parse_view_match', $return_value); } return $return_value; } + /** * Register some default keywords. * @@ -191,7 +219,6 @@ function sitepages_parse_view($hook, $entity_type, $return_value, $params) { * @return unknown_type */ function sitepages_keyword_hook($hook, $entity_type, $return_value, $params) { - $return_value['login_box'] = array( 'view' => 'account/forms/login', 'description' => elgg_echo('sitepages:keywords:login_box') @@ -205,7 +232,5 @@ function sitepages_keyword_hook($hook, $entity_type, $return_value, $params) { return $return_value; } - - register_elgg_event_handler('init', 'system', 'sitepages_init'); register_elgg_event_handler('pagesetup', 'system', 'sitepages_pagesetup'); \ No newline at end of file diff --git a/mod/sitepages/views/default/settings/sitepages/edit.php b/mod/sitepages/views/default/settings/sitepages/edit.php index 22f03abaf..9705aaae5 100644 --- a/mod/sitepages/views/default/settings/sitepages/edit.php +++ b/mod/sitepages/views/default/settings/sitepages/edit.php @@ -1,3 +1,15 @@ + +