]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Added dynamic keywords for view and entity.
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Tue, 9 Mar 2010 04:22:35 +0000 (04:22 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Tue, 9 Mar 2010 04:22:35 +0000 (04:22 +0000)
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

12 files changed:
mod/sitepages/actions/addfront.php
mod/sitepages/actions/addmeta.php
mod/sitepages/languages/en.php
mod/sitepages/sitepages_functions.php
mod/sitepages/start.php
mod/sitepages/views/default/settings/sitepages/edit.php
mod/sitepages/views/default/sitepages/custom_frontpage.php
mod/sitepages/views/default/sitepages/footer_menu.php
mod/sitepages/views/default/sitepages/forms/editfront.php
mod/sitepages/views/default/sitepages/forms/editmeta.php
mod/sitepages/views/default/sitepages/keywords.php
mod/sitepages/views/default/sitepages/metatags.php

index 6b8782da7594f61d0c3cd24603bc14a416796d3b..fd2154cc3e68dd01ac17c3c674301641c3a285c3 100644 (file)
@@ -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"));
index e9f40cdb449da91fa1e4502f16e56c66be912c2a..e5c9477764234fb12e116d316165a7b6fbea4d05 100644 (file)
@@ -19,8 +19,8 @@ $metatags = get_input('metatags', '', FALSE);
 $_SESSION['description'] = $description;\r
 $_SESSION['metatags'] = $metatags;\r
 \r
-if (!$sitepage = sitepages_get_sitepage_object('front')) {\r
-       $sitepage = sitepages_create_sitepage_object('front');\r
+if (!$sitepage = sitepages_get_sitepage_object('seo')) {\r
+       $sitepage = sitepages_create_sitepage_object('seo');\r
 }\r
 \r
 $sitepage->title = $metatags;\r
index ec08493c97496b8870769678a8bc38d0ad51f118..92cddb94979ecea6930c868df889585be3e8c09f 100644 (file)
@@ -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.<br /><br />
+
+               [[entity: type=type, subtype=subtype, owner=username, limit=number]]<br />
+
+               EX: To show 5 blog posts by admin:<br />
+               [[entity: type=object, subtype=blog, owner=admin, limit=5]]
+
+               <br /><br />
+
+               You can also specify a valid Elgg view:<br />
+               [[view: elgg_view, name=value]]<br />
+
+               Ex: To show a text input with a default value:<br />
+               [[view: input/text, value=This is a default value]]
+
+               <br /><br />',
+
+       '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
index 7ffe8df63aa41da5d483e626204883e82ebdbbbb..0341b590bcac9530ecccb8c67adce57920aad6fa 100644 (file)
  */\r
 \r
 \r
-function sitepages_parse_frontpage($contents){\r
-       echo htmlspecialchars_decode($contents, ENT_NOQUOTES);\r
-}\r
-\r
 /**\r
  * Returns a single object that holds information about\r
  * customizations for the $section site page.  The object guid\r
@@ -115,6 +111,109 @@ function sitepages_get_page_content($page_type) {
        return $content;\r
 }\r
 \r
+\r
+/**\r
+ * Used to determine how to handle special non-static keywords.\r
+ *\r
+ * @param unknown_type $matches\r
+ * @return html\r
+ */\r
+function sitepages_parse_view_match($matches) {\r
+       $keyword = $matches[0];\r
+       $type = trim($matches[1]);\r
+       $params_string = trim($matches[2]);\r
+\r
+       switch ($type) {\r
+               case 'entity':\r
+                       $options = sitepages_keywords_parse_entity_params($params_string);\r
+                       // must use this lower-level function because I missed refactoring\r
+                       // the list entity functions for relationships.\r
+                       // (which, since you're here, is the only function that runs through all\r
+                       // possible options for elgg_get_entities*() functions...)\r
+                       $entities = elgg_get_entities_from_relationship($options);\r
+                       $content = elgg_view_entity_list($entities, count($entities), $options['offset'],\r
+                               $options['limit'], $options['full_view'], $options['view_type_toggle'], $options['pagination']);\r
+                       break;\r
+\r
+               case 'view':\r
+                       // parses this into an acceptable array for $vars.\r
+                       $info = sitepages_keywords_parse_view_params($params_string);\r
+                       $content = elgg_view($info['view'], $info['vars']);\r
+\r
+                       break;\r
+\r
+       }\r
+\r
+       return $content;\r
+}\r
+\r
+/**\r
+ * Creates an array from a "name=value, name1=value2" string.\r
+ *\r
+ * @param $string\r
+ * @return array\r
+ */\r
+function sitepages_keywords_tokenize_params($string) {\r
+       $pairs = array_map('trim', explode(',', $string));\r
+\r
+       $params = array();\r
+\r
+       foreach ($pairs as $pair) {\r
+               list($name, $value) = explode('=', $pair);\r
+\r
+               $name = trim($name);\r
+               $value = trim($value);\r
+               $params[$name] = $value;\r
+       }\r
+\r
+       return $params;\r
+}\r
+\r
+/**\r
+ *\r
+ * @param $string\r
+ * @return unknown_type\r
+ */\r
+function sitepages_keywords_parse_view_params($string) {\r
+       $vars = sitepages_keywords_tokenize_params($string);\r
+\r
+       // the first element key is the view\r
+       $var_keys = array_keys($vars);\r
+       $view = $var_keys[0];\r
+\r
+       $info = array(\r
+               'view' => $view,\r
+               'vars' => $vars\r
+       );\r
+\r
+       return $info;\r
+\r
+}\r
+\r
+/**\r
+ * Returns an options array suitable for using in elgg_get_entities()\r
+ *\r
+ * @param string $string "name=value, name2=value2"\r
+ * @return array\r
+ */\r
+function sitepages_keywords_parse_entity_params($string) {\r
+       $params = sitepages_keywords_tokenize_params($string);\r
+\r
+       // handle some special cases\r
+       if (isset($params['owner'])) {\r
+               if ($user = get_user_by_username($params['owner'])) {\r
+                       $options['owner_guid'] = $user->getGUID();\r
+               }\r
+       }\r
+\r
+       // @todo probably need to add more for\r
+       // group -> container_guid, etc\r
+\r
+       return $params;\r
+}\r
+\r
+\r
+\r
 /**\r
  * Utility object to store site page information.\r
  */\r
index 186738bab8c651851789d03098a590b7b80807b2..5be36842a4c8a790d5a0a433edb6c9786f7979c4 100644 (file)
  * @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
index 22f03abaf99abbe79334e40e78f01f5a8900fb27..9705aaae5f893d0cd117872bb0b62e77fedb3afd 100644 (file)
@@ -1,3 +1,15 @@
+<?php\r
+/**\r
+ * Settings Site Pages\r
+ *\r
+ * @package SitePages\r
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2\r
+ * @author Curverider Ltd\r
+ * @copyright Curverider Ltd 2008-2010\r
+ * @link http://elgg.org/\r
+ */\r
+?>\r
+\r
 <p>\r
        <?php echo elgg_echo('sitepages:ownfront'); ?>\r
        <select name="params[ownfrontpage]">\r
index fb0b673cc5de4c4b9f89e8020ab994e08786c629..429478280fee3abdaff41f6cf3b4ad61227f2ba8 100644 (file)
  * @link http://elgg.org/
  */
 
-$object = sitepages_get_sitepage_object('front');
+$sitepage = sitepages_get_sitepage_object('front');
 
-if ($object) {
-       echo $object->description;
+if ($sitepage) {
+       if (get_loggedin_userid()) {
+               echo $sitepage->logged_in_content;
+       } else {
+               echo $sitepage->logged_out_content;
+       }
 }
\ No newline at end of file
index 5137e0f21a48b5d98e40299f05e2b2df1fa2c3a2..d0addd3e11e2f0603e46e09a812780c28f82efb5 100644 (file)
@@ -1,10 +1,16 @@
 <?php
 /**
- * Elgg External pages footer menu
+ * Footer view to add links to the semi-static pages.
+ *
+ * @package SitePages
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.org/
  */
 ?>
 
-<div class="footer_toolbar_links">| 
+<div class="footer_toolbar_links">|
 <a href="<?php echo $vars['url']; ?>pg/sitepages/read/About/"><?php echo elgg_echo('sitepages:about'); ?></a> |
 <a href="<?php echo $vars['url']; ?>pg/sitepages/read/Terms/"><?php echo elgg_echo('sitepages:terms'); ?></a> |
 <a href="<?php echo $vars['url']; ?>pg/sitepages/read/Privacy/"><?php echo elgg_echo('sitepages:privacy'); ?></a> |
index cc09b8cc8792b102ee10cf6a0c94590500b6f7dc..e13f16f6e8885d808793056989b9abb6a9155781 100644 (file)
 $action = 'sitepages/addfront';
 
 if ($sitepages_object = sitepages_get_sitepage_object('front')) {
-       $css = $sitepages_object->title;
-       $sitepages_content = $sitepages_object->description;
-       $guid = $sitepages_object->guid;
+       $css = $sitepages_object->css;
+       $logged_in_content = $sitepages_object->logged_in_content;
+       $logged_out_content = $sitepages_object->logged_out_content;
 } else {
        $css = '';
-       $sitepages_content = '';
-       $guid = '';
+       $logged_in_content = '';
+       $logged_out_content = '';
 }
 
 // set the required form variables
 $input_css = elgg_view('input/plaintext', array('internalname' => 'css', 'value' => $css));
-$input_sitepages_content = elgg_view('input/plaintext', array('internalname' => 'sitepages_content', 'value' => $sitepages_content));
+$input_logged_in_content = elgg_view('input/plaintext', array('internalname' => 'logged_in_content', 'value' => $logged_in_content ));
+$input_logged_out_content = elgg_view('input/plaintext', array('internalname' => 'logged_out_content', 'value' => $logged_out_content ));
 $submit_input = elgg_view('input/submit', array('internalname' => 'submit', 'value' => elgg_echo('save')));
 
-$pageshell_title = elgg_echo("sitepages:front_content");
+$logged_in_content_title = elgg_echo("sitepages:logged_in_front_content");
+$logged_out_content_title = elgg_echo("sitepages:logged_out_front_content");
 $css_title = elgg_echo("sitepages:css");
 
 //preview link
@@ -38,8 +40,13 @@ $form_body = <<<___EOT
 
        <h3 class='settings'>$css_title</h3>
        <p class='longtext_editarea'>$input_css</p><br />
-       <h3 class='settings'>$pageshell_title</h3>
-       <p class='longtext_editarea'>$input_sitepages_content</p>
+
+
+       <h3 class='settings'>$logged_in_content_title</h3>
+       <p class='longtext_editarea'>$input_logged_in_content</p><br />
+
+       <h3 class='settings'>$logged_out_content_title</h3>
+       <p class='longtext_editarea'>$input_logged_out_content</p>
 
        $hidden_guid
        <br />
index d94f3211477d757898203e90ee27351831f20dd2..84a8297fcd8ad476df24487b2519bfe70b951d52 100644 (file)
@@ -19,7 +19,7 @@ if ($sitepages_object = sitepages_get_sitepage_object('front')) {
        $meta_description = '';\r
 }\r
 \r
-$input_keywords = elgg_view('input/plaintext', array('internalname' => 'metatags', 'value' => $meta_tags));\r
+$input_keywords = elgg_view('input/text', array('internalname' => 'metatags', 'value' => $meta_tags));\r
 $input_description = elgg_view('input/plaintext', array('internalname' => 'description', 'value' => $meta_description));\r
 $submit_input = elgg_view('input/submit', array('internalname' => 'submit', 'value' => elgg_echo('save')));\r
 \r
index e5348678a390e2bc3fd663ec8625e5caa5aa1fbe..d46efb5bc3a9585d7d608b3effa9825dc085d253 100644 (file)
@@ -12,6 +12,7 @@
 $keywords = $vars['config']->sitepages_keywords;\r
 $title = elgg_echo('sitepages:keywords_title');\r
 $instructions = elgg_echo('sitepages:keywords_instructions');\r
+$more_info = elgg_echo('sitepages:keywords_instructions_more');\r
 \r
 $keywords_html = '';\r
 foreach ($keywords as $keyword => $info) {\r
@@ -22,6 +23,8 @@ foreach ($keywords as $keyword => $info) {
 echo "\r
 <h3>$title</h3>\r
 <p>$instructions</p>\r
+<span id=\"sitepagesKeywordMoreInfo\" class=\"xhidden\">$more_info</span>\r
+\r
 <ul>\r
        $keywords_html\r
 </ul>\r
index c536dbe29cb3101a9ba995f4f614c4cc98453d16..107a5871aeb84a985b2906fc78b6975323215630 100644 (file)
@@ -16,8 +16,10 @@ if ($meta_details) {
        $description = $meta_details->description;\r
 \r
        echo <<<___END\r
+\r
        <meta name="description" content="$description" />\r
        <meta name="keywords" content="$metatags" />\r
+\r
 ___END;\r
 }\r
 \r
@@ -25,11 +27,13 @@ ___END;
 if (get_context() == 'sitepages:front') {\r
        $custom_css = sitepages_get_sitepage_object('front');\r
 \r
-       if ($custom_css && $custom_css->title) {\r
-               echo "\r
+       if ($custom_css && $custom_css->css) {\r
+               echo <<<___END\r
+\r
                <style>\r
-               {$custom_css->title}\r
+               {$custom_css->css}\r
                </style>\r
-               ";\r
+\r
+___END;\r
        }\r
 }
\ No newline at end of file