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();
$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"));
$_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
'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',
*/
'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
*/\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
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
* @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.
*/
/**
}
set_context($context);
+
+ // return NULL to pass this to next in chain, or back to standard index.php.
return NULL;
}
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']
);
$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.
*
* @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')
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
+<?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
* @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
<?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> |
$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
<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 />
$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
$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
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
$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
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