aboutsummaryrefslogtreecommitdiff
path: root/mod/file/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/file/start.php')
-rw-r--r--mod/file/start.php272
1 files changed, 272 insertions, 0 deletions
diff --git a/mod/file/start.php b/mod/file/start.php
new file mode 100644
index 000000000..b6af2fb18
--- /dev/null
+++ b/mod/file/start.php
@@ -0,0 +1,272 @@
+<?php
+ /**
+ * Elgg file browser
+ *
+ * @package ElggFile
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ */
+
+ /**
+ * Override the ElggFile so that
+ */
+ class FilePluginFile extends ElggFile
+ {
+ protected function initialise_attributes()
+ {
+ parent::initialise_attributes();
+
+ $this->attributes['subtype'] = "file";
+ }
+
+ public function __construct($guid = null)
+ {
+ parent::__construct($guid);
+ }
+ }
+
+
+ /**
+ * File plugin initialisation functions.
+ */
+ function file_init()
+ {
+ global $CONFIG;
+
+ // Set up menu (tools dropdown or other uses as defined by theme)
+ if (isloggedin()) {
+ add_menu(elgg_echo('file'), $CONFIG->wwwroot . "pg/file/" . get_loggedin_user()->username);
+ } else {
+ add_menu(elgg_echo('file'), $CONFIG->wwwroot . "pg/file/world/world/" );
+ }
+
+ // Extend CSS
+ elgg_extend_view('css', 'file/css');
+
+ // Extend hover-over and profile menu
+ elgg_extend_view('profile/menu/links','file/menu');
+
+ // extend group main page
+ elgg_extend_view('groups/left_column','file/groupprofile_files');
+
+ // Register a page handler, so we can have nice URLs
+ register_page_handler('file','file_page_handler');
+
+ // Add a new file widget
+ add_widget_type('filerepo',elgg_echo("file:widget"),elgg_echo("file:widget:description"));
+
+ // Register a URL handler for files
+ register_entity_url_handler('file_url','object','file');
+
+ // Register granular notification for this object type
+ if (is_callable('register_notification_object')) {
+ register_notification_object('object', 'file', elgg_echo('file:newupload'));
+ }
+
+ // Listen to notification events and supply a more useful message
+ register_plugin_hook('notify:entity:message', 'object', 'file_notify_message');
+
+ // add the group files tool option
+ add_group_tool_option('files',elgg_echo('groups:enablefiles'),true);
+
+ // Register entity type
+ register_entity_type('object','file');
+ }
+
+ /**
+ * Sets up submenus for the file system. Triggered on pagesetup.
+ *
+ */
+ function file_submenus() {
+
+ global $CONFIG;
+
+ $page_owner = page_owner_entity();
+
+ // Group submenu option
+ if ($page_owner instanceof ElggGroup && get_context() == "groups") {
+ if($page_owner->files_enable != "no"){
+ add_submenu_item(sprintf(elgg_echo("file:group"),$page_owner->name), $CONFIG->wwwroot . "pg/file/" . $page_owner->username);
+ }
+ }
+
+ // General submenu options
+
+ if (get_context() == "file") {
+ if ((page_owner() == $_SESSION['guid'] || !page_owner()) && isloggedin()) {
+ add_submenu_item(sprintf(elgg_echo("file:yours"),$page_owner->name), $CONFIG->wwwroot . "pg/file/" . $page_owner->username);
+ add_submenu_item(sprintf(elgg_echo('file:yours:friends'),$page_owner->name), $CONFIG->wwwroot . "pg/file/". $page_owner->username . "/friends/");
+ } else if (page_owner()) {
+ add_submenu_item(sprintf(elgg_echo("file:user"),$page_owner->name), $CONFIG->wwwroot . "pg/file/" . $page_owner->username);
+ if ($page_owner instanceof ElggUser) // This one's for users, not groups
+ add_submenu_item(sprintf(elgg_echo('file:friends'),$page_owner->name), $CONFIG->wwwroot . "pg/file/". $page_owner->username . "/friends/");
+ }
+ add_submenu_item(elgg_echo('file:all'), $CONFIG->wwwroot . "pg/file/world/world/");
+ if (can_write_to_container($_SESSION['guid'], page_owner()) && isloggedin())
+ add_submenu_item(elgg_echo('file:upload'), $CONFIG->wwwroot . "pg/file/". $page_owner->username . "/new/");
+ }
+
+ }
+
+ /**
+ * File page handler
+ *
+ * @param array $page Array of page elements, forwarded by the page handling mechanism
+ */
+ function file_page_handler($page) {
+
+ global $CONFIG;
+
+ // The username should be the file we're getting
+ if (isset($page[0])) {
+ set_input('username',$page[0]);
+ }
+
+ if (isset($page[1]))
+ {
+ switch($page[1])
+ {
+ case "read":
+ set_input('guid',$page[2]);
+ include(dirname(dirname(dirname(__FILE__))) . "/entities/index.php");
+ break;
+ case "friends":
+ include($CONFIG->pluginspath . "file/friends.php");
+ break;
+ case "world":
+ include($CONFIG->pluginspath . "file/world.php");
+ break;
+ case "new":
+ include($CONFIG->pluginspath . "file/upload.php");
+ break;
+ }
+ }
+ else
+ {
+ // Include the standard profile index
+ include($CONFIG->pluginspath . "file/index.php");
+ }
+
+ }
+
+ /**
+ * Returns a more meaningful message
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ */
+ function file_notify_message($hook, $entity_type, $returnvalue, $params)
+ {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'file'))
+ {
+ $descr = $entity->description;
+ $title = $entity->title;
+ global $CONFIG;
+ $url = $CONFIG->wwwroot . "pg/view/" . $entity->guid;
+ if ($method == 'sms') {
+ $owner = $entity->getOwnerEntity();
+ return $owner->name . ' ' . elgg_echo("file:via") . ': ' . $url . ' (' . $title . ')';
+ }
+ if ($method == 'email') {
+ $owner = $entity->getOwnerEntity();
+ return $owner->name . ' ' . elgg_echo("file:via") . ': ' . $entity->title . "\n\n" . $descr . "\n\n" . $entity->getURL();
+ }
+ if ($method == 'web') {
+ $owner = $entity->getOwnerEntity();
+ return $owner->name . ' ' . elgg_echo("file:via") . ': ' . $entity->title . "\n\n" . $descr . "\n\n" . $entity->getURL();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns an overall file type from the mimetype
+ *
+ * @param string $mimetype The MIME type
+ * @return string The overall type
+ */
+ function get_general_file_type($mimetype) {
+
+ switch($mimetype) {
+ case "application/msword":
+ return "document";
+ break;
+ case "application/pdf":
+ return "document";
+ break;
+ }
+
+ if (substr_count($mimetype,'text/'))
+ return "document";
+
+ if (substr_count($mimetype,'audio/'))
+ return "audio";
+
+ if (substr_count($mimetype,'image/'))
+ return "image";
+
+ if (substr_count($mimetype,'video/'))
+ return "video";
+
+ if (substr_count($mimetype,'opendocument'))
+ return "document";
+
+ return "general";
+ }
+
+ /**
+ * Returns a list of filetypes to search specifically on
+ *
+ * @param int|array $owner_guid The GUID(s) of the owner(s) of the files
+ * @param true|false $friends Whether we're looking at the owner or the owner's friends
+ * @return string The typecloud
+ */
+ function get_filetype_cloud($owner_guid = "", $friends = false) {
+
+ if ($friends) {
+ if ($friendslist = get_user_friends($user_guid, "", 999999, 0)) {
+ $friendguids = array();
+ foreach($friendslist as $friend) {
+ $friendguids[] = $friend->getGUID();
+ }
+ }
+ $friendofguid = $owner_guid;
+ $owner_guid = $friendguids;
+ } else {
+ $friendofguid = false;
+ }
+ return elgg_view('file/typecloud',array('owner_guid' => $owner_guid, 'friend_guid' => $friendofguid, 'types' => get_tags(0,10,'simpletype','object','file',$owner_guid)));
+
+ }
+
+ /**
+ * Populates the ->getUrl() method for file objects
+ *
+ * @param ElggEntity $entity File entity
+ * @return string File URL
+ */
+ function file_url($entity) {
+
+ global $CONFIG;
+ $title = $entity->title;
+ $title = friendly_title($title);
+ return $CONFIG->url . "pg/file/" . $entity->getOwnerEntity()->username . "/read/" . $entity->getGUID() . "/" . $title;
+
+ }
+
+ // Make sure test_init is called on initialisation
+ register_elgg_event_handler('init','system','file_init');
+ register_elgg_event_handler('pagesetup','system','file_submenus');
+
+ // Register actions
+ register_action("file/upload", false, $CONFIG->pluginspath . "file/actions/upload.php");
+ register_action("file/save", false, $CONFIG->pluginspath . "file/actions/save.php");
+ register_action("file/delete", false, $CONFIG->pluginspath. "file/actions/delete.php");
+
+?>