From c25dcd4533ec98c7e58c647e4b2c08169c6b7dc4 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 19 Jun 2008 20:18:40 +0000 Subject: Automatic RSS feeds! git-svn-id: https://code.elgg.org/elgg/trunk@1011 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/elgglib.php | 81 +++++++++++++++++++++++++++++++--- views/default/canvas/default.php | 21 +++++++++ views/default/page_elements/header.php | 24 +++++++++- views/foaf/pageshells/pageshell.php | 2 +- views/rss/canvas/default.php | 21 +++++++++ views/rss/object/default.php | 29 ++++++++++++ views/rss/pageshells/pageshell.php | 51 +++++++++++++++++++++ views/rss/user/default.php | 22 +++++++++ 8 files changed, 244 insertions(+), 7 deletions(-) create mode 100644 views/default/canvas/default.php create mode 100644 views/rss/canvas/default.php create mode 100644 views/rss/object/default.php create mode 100644 views/rss/pageshells/pageshell.php create mode 100644 views/rss/user/default.php diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index d559e5131..261dc60cc 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -186,6 +186,50 @@ } + /** + * Returns whether the specified view exists + * + * @param string $view The view name + * @param string $viewtype The type of view + * @return true|false Depending on success + */ + function elgg_view_exists($view, $viewtype = "") { + + global $CONFIG; + + // If we haven't been asked for a specific view, assume default + if (empty($_SESSION['view'])) { + $_SESSION['view'] = "default"; + + // If we have a config default view for this site then use that instead of 'default' + if (/*(is_installed()) && */(!empty($CONFIG->view)) && (trim($CONFIG->view)!="")) + $_SESSION['view'] = $CONFIG->view; + } + if (empty($viewtype) && is_callable('get_input')) + $viewtype = get_input('view'); + if (empty($viewtype)) { + $viewtype = $_SESSION['view']; + } + + + if (!isset($CONFIG->views->locations[$view])) { + if (!isset($CONFIG->viewpath)) { + $location = dirname(dirname(dirname(__FILE__))) . "/views/"; + } else { + $location = $CONFIG->viewpath; + } + } else { + $location = $CONFIG->views->locations[$view]; + } + + if (file_exists($location . "{$viewtype}/{$view}.php")) { + return true; + } + + return false; + + } + /** * When given an entity, views it intelligently. * @@ -203,6 +247,9 @@ */ function elgg_view_entity(ElggEntity $entity, $viewtype = "", $full = false, $bypass = true, $debug = false) { + global $autofeed; + $autofeed = true; + $view = $entity->view; if (is_string($view)) { return elgg_view($view,array('entity' => $entity), $viewtype, $bypass, $debug); @@ -231,11 +278,17 @@ $subtype = $entity->getSubtype(); if (empty($subtype)) { $subtype = $entity_type; } - return elgg_view("{$entity_type}/{$subtype}",array( + if (elgg_view_exists("{$entity_type}/{$subtype}")) { + return elgg_view("{$entity_type}/{$subtype}",array( + 'entity' => $entity, + 'full' => $full + ), $viewtype, $bypass, $debug); + } else { + return elgg_view("{$entity_type}/default",array( 'entity' => $entity, 'full' => $full ), $viewtype, $bypass, $debug); - + } } /** @@ -303,9 +356,14 @@ $param_array['area' . $arg] = func_get_arg($arg); $arg++; } - return elgg_view("canvas/layouts/{$layout}",$param_array); + if (elgg_view_exists("canvas/layouts/{$layout}")) { + return elgg_view("canvas/layouts/{$layout}",$param_array); + } else { + return elgg_view("canvas/default",$param_array); + } } + /** * Sets an alternative function to handle templates, which will be passed to by elgg_view. @@ -1300,7 +1358,20 @@ return false; } - - + + /** + * Get the full URL of the current page. + * + * @return string The URL + */ + function full_url() + { + $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; + $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s; + $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); + return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI']; + } + + ?> \ No newline at end of file diff --git a/views/default/canvas/default.php b/views/default/canvas/default.php new file mode 100644 index 000000000..2d2707918 --- /dev/null +++ b/views/default/canvas/default.php @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/views/default/page_elements/header.php b/views/default/page_elements/header.php index fdcfe71df..75ef6f746 100644 --- a/views/default/page_elements/header.php +++ b/views/default/page_elements/header.php @@ -24,6 +24,23 @@ $title = $vars['title']; } else { $title = $vars['config']->sitename . ": " . $vars['title']; + } + + global $autofeed; + if (isset($autofeed) && $autofeed == true) { + $url = full_url(); + if (substr_count($url,'?')) { + $url .= "&view=rss"; + } else { + $url .= "?view=rss"; + } + $feedref = << + +END; + } else { + $feedref = ""; } ?> @@ -38,7 +55,12 @@ - + diff --git a/views/foaf/pageshells/pageshell.php b/views/foaf/pageshells/pageshell.php index a5f73db2d..534cfac2c 100644 --- a/views/foaf/pageshells/pageshell.php +++ b/views/foaf/pageshells/pageshell.php @@ -38,7 +38,7 @@ name; ?> email); ?> - + \ No newline at end of file diff --git a/views/rss/object/default.php b/views/rss/object/default.php new file mode 100644 index 000000000..7c5fc11d8 --- /dev/null +++ b/views/rss/object/default.php @@ -0,0 +1,29 @@ +title; + if (empty($title)) { + $title = substr($vars['entity']->description,0,32); + if (strlen($vars['entity']->description) > 32) + $title .= " ..."; + } + +?> + + + getURL(); ?> + time_created) ?> + getURL(); ?> + <![CDATA[<?php echo $title; ?>]]> + description)); ?>]]> + diff --git a/views/rss/pageshells/pageshell.php b/views/rss/pageshells/pageshell.php new file mode 100644 index 000000000..8a34752bc --- /dev/null +++ b/views/rss/pageshells/pageshell.php @@ -0,0 +1,51 @@ +\n"; + + if (!$owner = page_owner_entity()) { + if (!isloggedin()) { + exit; + } else { + $owner = $vars['user']; + } + } + + // Set title + if (empty($vars['title'])) { + $title = $vars['config']->sitename; + } else if (empty($vars['config']->sitename)) { + $title = $vars['title']; + } else { + $title = $vars['config']->sitename . ": " . $vars['title']; + } + + // Remove RSS from URL + $url = str_replace('?view=rss','',full_url()); + $url = str_replace('&view=rss','',full_url()); + +?> + + + + <![CDATA[<?php echo $title; ?>]]> + + + + \ No newline at end of file diff --git a/views/rss/user/default.php b/views/rss/user/default.php new file mode 100644 index 000000000..5d72b30df --- /dev/null +++ b/views/rss/user/default.php @@ -0,0 +1,22 @@ + + + + getURL(); ?> + time_created) ?> + getURL(); ?> + <![CDATA[<?php echo (nl2br($vars['entity']->name)); ?>]]> + description)); ?>]]> + -- cgit v1.2.3