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.php397
1 files changed, 245 insertions, 152 deletions
diff --git a/mod/file/start.php b/mod/file/start.php
index d58940f40..7c0c216b2 100644
--- a/mod/file/start.php
+++ b/mod/file/start.php
@@ -1,35 +1,42 @@
<?php
/**
- * Elgg file browser
+ * Elgg file plugin
*
* @package ElggFile
*/
+elgg_register_event_handler('init', 'system', 'file_init');
/**
- * File plugin initialisation functions.
+ * File plugin initialization functions.
*/
function file_init() {
- global $CONFIG;
+
+ // register a library of helper functions
+ elgg_register_library('elgg:file', elgg_get_plugins_path() . 'file/lib/file.php');
// Site navigation
- $item = new ElggMenuItem('file', elgg_echo('file'), 'pg/file/all');
+ $item = new ElggMenuItem('file', elgg_echo('file'), 'file/all');
elgg_register_menu_item('site', $item);
// Extend CSS
- elgg_extend_view('css/screen', 'file/css');
+ elgg_extend_view('css/elgg', 'file/css');
+
+ // add enclosure to rss item
+ elgg_extend_view('extensions/item', 'file/enclosure');
// extend group main page
- elgg_extend_view('groups/tool_latest', 'file/groupprofile_files');
+ elgg_extend_view('groups/tool_latest', 'file/group_module');
// Register a page handler, so we can have nice URLs
- register_page_handler('file', 'file_page_handler');
+ elgg_register_page_handler('file', 'file_page_handler');
// Add a new file widget
elgg_register_widget_type('filerepo', elgg_echo("file"), elgg_echo("file:widget:description"));
- // Register a URL handler for files
- register_entity_url_handler('file_url', 'object', 'file');
+ // Register URL handlers for files
+ elgg_register_entity_url_handler('object', 'file', 'file_url_override');
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'file_icon_url_override');
// Register granular notification for this object type
register_notification_object('object', 'file', elgg_echo('file:newupload'));
@@ -40,32 +47,61 @@ function file_init() {
// add the group files tool option
add_group_tool_option('file', elgg_echo('groups:enablefiles'), true);
- // Register entity type
- register_entity_type('object', 'file');
+ // Register entity type for search
+ elgg_register_entity_type('object', 'file');
+ // add a file link to owner blocks
elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'file_owner_block_menu');
+ // Register actions
+ $action_path = elgg_get_plugins_path() . 'file/actions/file';
+ elgg_register_action("file/upload", "$action_path/upload.php");
+ elgg_register_action("file/delete", "$action_path/delete.php");
+ // temporary - see #2010
+ elgg_register_action("file/download", "$action_path/download.php");
+
// embed support
- elgg_register_plugin_hook_handler('embed_get_sections', 'all', 'file_embed_get_sections');
- elgg_register_plugin_hook_handler('embed_get_items', 'file', 'file_embed_get_items');
- elgg_register_plugin_hook_handler('embed_get_upload_sections', 'all', 'file_embed_get_upload_sections');
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file',
+ 'text' => elgg_echo('file'),
+ 'priority' => 10,
+ 'data' => array(
+ 'options' => array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ ),
+ ),
+ ));
+ elgg_register_menu_item('embed', $item);
+
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file_upload',
+ 'text' => elgg_echo('file:upload'),
+ 'priority' => 100,
+ 'data' => array(
+ 'view' => 'embed/file_upload/content',
+ ),
+ ));
+
+ elgg_register_menu_item('embed', $item);
}
/**
* Dispatches file pages.
* URLs take the form of
- * All files: pg/file/all
- * User's files: pg/file/owner/<username>
- * Friends' files: pg/file/friends/<username>
- * View file: pg/file/view/<guid>/<title>
- * New file: pg/file/new/<guid>
- * Edit file: pg/file/edit/<guid>
- * Group files: pg/file/group/<guid>/owner
+ * All files: file/all
+ * User's files: file/owner/<username>
+ * Friends' files: file/friends/<username>
+ * View file: file/view/<guid>/<title>
+ * New file: file/add/<guid>
+ * Edit file: file/edit/<guid>
+ * Group files: file/group/<guid>/all
+ * Download: file/download/<guid>
*
* Title is ignored
*
* @param array $page
- * @return NULL
+ * @return bool
*/
function file_page_handler($page) {
@@ -73,87 +109,118 @@ function file_page_handler($page) {
$page[0] = 'all';
}
- $file_dir = elgg_get_plugin_path() . 'file';
+ $file_dir = elgg_get_plugins_path() . 'file/pages/file';
$page_type = $page[0];
switch ($page_type) {
case 'owner':
- $owner = get_user_by_username($page[1]);
- set_input('guid', $owner->guid);
- include "$file_dir/index.php";
+ file_register_toggle();
+ include "$file_dir/owner.php";
break;
case 'friends':
- set_input('username', $page[1]);
+ file_register_toggle();
include "$file_dir/friends.php";
break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("file/view/{$page[1]}");
+ break;
case 'view':
set_input('guid', $page[1]);
include "$file_dir/view.php";
break;
- case 'new':
- set_input('guid', $page[1]);
+ case 'add':
include "$file_dir/upload.php";
break;
case 'edit':
set_input('guid', $page[1]);
include "$file_dir/edit.php";
break;
+ case 'search':
+ file_register_toggle();
+ include "$file_dir/search.php";
+ break;
case 'group':
- set_input('guid', $page[1]);
- include "$file_dir/index.php";
+ file_register_toggle();
+ include "$file_dir/owner.php";
break;
case 'all':
- default:
+ file_register_toggle();
include "$file_dir/world.php";
break;
+ case 'download':
+ set_input('guid', $page[1]);
+ include "$file_dir/download.php";
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Adds a toggle to extra menu for switching between list and gallery views
+ */
+function file_register_toggle() {
+ $url = elgg_http_remove_url_query_element(current_page_url(), 'list_type');
+
+ if (get_input('list_type', 'list') == 'list') {
+ $list_type = "gallery";
+ $icon = elgg_view_icon('grid');
+ } else {
+ $list_type = "list";
+ $icon = elgg_view_icon('list');
+ }
+
+ if (substr_count($url, '?')) {
+ $url .= "&list_type=" . $list_type;
+ } else {
+ $url .= "?list_type=" . $list_type;
}
+
+
+ elgg_register_menu_item('extras', array(
+ 'name' => 'file_list',
+ 'text' => $icon,
+ 'href' => $url,
+ 'title' => elgg_echo("file:list:$list_type"),
+ 'priority' => 1000,
+ ));
}
/**
- * Returns a more meaningful message
- *
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
-*/
+ * Creates the notification message body
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $returnvalue
+ * @param array $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'))
- {
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'file')) {
$descr = $entity->description;
$title = $entity->title;
- global $CONFIG;
- $url = elgg_get_site_url() . "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();
- }
+ $url = elgg_get_site_url() . "view/" . $entity->guid;
+ $owner = $entity->getOwnerEntity();
+ return $owner->name . ' ' . elgg_echo("file:via") . ': ' . $entity->title . "\n\n" . $descr . "\n\n" . $entity->getURL();
}
return null;
}
/**
-* Add a menu item to the user ownerblock
-*/
+ * Add a menu item to the user ownerblock
+ */
function file_owner_block_menu($hook, $type, $return, $params) {
if (elgg_instanceof($params['entity'], 'user')) {
- $url = "pg/file/owner/{$params['entity']->username}";
+ $url = "file/owner/{$params['entity']->username}";
$item = new ElggMenuItem('file', elgg_echo('file'), $url);
$return[] = $item;
} else {
if ($params['entity']->file_enable != "no") {
- $url = "pg/file/group/{$params['entity']->guid}/owner";
+ $url = "file/group/{$params['entity']->guid}/all";
$item = new ElggMenuItem('file', elgg_echo('file:group'), $url);
$return[] = $item;
}
@@ -168,156 +235,182 @@ function file_owner_block_menu($hook, $type, $return, $params) {
* @param string $mimetype The MIME type
* @return string The overall type
*/
-function get_general_file_type($mimetype) {
+function file_get_simple_type($mimetype) {
+
+ if ($simpletype = elgg_trigger_plugin_hook('file:simpletype', $mimetype, null, null)) {
+ return $simpletype;
+ }
- switch($mimetype) {
+ switch ($mimetype) {
case "application/msword":
+ case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
return "document";
break;
case "application/pdf":
return "document";
break;
+ case "application/ogg":
+ return "audio";
+ break;
}
- if (substr_count($mimetype,'text/'))
+ if (substr_count($mimetype, 'text/')) {
return "document";
+ }
- if (substr_count($mimetype,'audio/'))
+ if (substr_count($mimetype, 'audio/')) {
return "audio";
+ }
- if (substr_count($mimetype,'image/'))
+ if (substr_count($mimetype, 'image/')) {
return "image";
+ }
- if (substr_count($mimetype,'video/'))
+ if (substr_count($mimetype, 'video/')) {
return "video";
+ }
- if (substr_count($mimetype,'opendocument'))
+ if (substr_count($mimetype, 'opendocument')) {
return "document";
+ }
return "general";
}
+// deprecated and will be removed
+function get_general_file_type($mimetype) {
+ elgg_deprecated_notice('Use file_get_simple_type() instead of get_general_file_type()', 1.8);
+ return file_get_simple_type($mimetype);
+}
+
/**
- * Returns a list of filetypes to search specifically on
+ * Returns a list of filetypes
*
- * @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
+ * @param int $container_guid The GUID of the container of the files
+ * @param bool $friends Whether we're looking at the container or the container's friends
* @return string The typecloud
*/
-function get_filetype_cloud($owner_guid = "", $friends = false) {
+function file_get_type_cloud($container_guid = "", $friends = false) {
+
+ $container_guids = $container_guid;
if ($friends) {
- if ($friendslist = get_user_friends($user_guid, "", 999999, 0)) {
- $friendguids = array();
- foreach($friendslist as $friend) {
- $friendguids[] = $friend->getGUID();
+ // tags interface does not support pulling tags on friends' content so
+ // we need to grab all friends
+ $friend_entities = get_user_friends($container_guid, "", 999999, 0);
+ if ($friend_entities) {
+ $friend_guids = array();
+ foreach ($friend_entities as $friend) {
+ $friend_guids[] = $friend->getGUID();
}
}
- $friendofguid = $owner_guid;
- $owner_guid = $friendguids;
- } else {
- $friendofguid = false;
+ $container_guids = $friend_guids;
}
elgg_register_tag_metadata_name('simpletype');
$options = array(
'type' => 'object',
'subtype' => 'file',
- 'owner_guid' => $owner_guid,
+ 'container_guids' => $container_guids,
'threshold' => 0,
'limit' => 10,
'tag_names' => array('simpletype')
);
$types = elgg_get_tags($options);
- return elgg_view('file/typecloud',array('owner_guid' => $owner_guid, 'friend_guid' => $friendofguid, 'types' => $types));
-}
-
-/**
- * Register file as an embed type.
- *
- * @param unknown_type $hook
- * @param unknown_type $type
- * @param unknown_type $value
- * @param unknown_type $params
- */
-function file_embed_get_sections($hook, $type, $value, $params) {
- $value['file'] = array(
- 'name' => elgg_echo('file'),
- 'layout' => 'list',
- 'icon_size' => 'small',
+ $params = array(
+ 'friends' => $friends,
+ 'types' => $types,
);
- return $value;
+ return elgg_view('file/typecloud', $params);
}
-/**
- * Return a list of files for embedding
- *
- * @param unknown_type $hook
- * @param unknown_type $type
- * @param unknown_type $value
- * @param unknown_type $params
- */
-function file_embed_get_items($hook, $type, $value, $params) {
- $options = array(
- 'owner_guid' => get_loggedin_userid(),
- 'type_subtype_pair' => array('object' => 'file'),
- 'count' => TRUE
- );
-
- if ($count = elgg_get_entities($options)) {
- $value['count'] += $count;
-
- unset($options['count']);
- $options['offset'] = $params['offset'];
- $options['limit'] = $params['limit'];
-
- $items = elgg_get_entities($options);
-
- $value['items'] = array_merge($items, $value['items']);
- }
-
- return $value;
-}
-
-/**
- * Register file as an embed type.
- *
- * @param unknown_type $hook
- * @param unknown_type $type
- * @param unknown_type $value
- * @param unknown_type $params
- */
-function file_embed_get_upload_sections($hook, $type, $value, $params) {
- $value['file'] = array(
- 'name' => elgg_echo('file'),
- 'view' => 'file/embed_upload'
- );
-
- return $value;
+function get_filetype_cloud($owner_guid = "", $friends = false) {
+ elgg_deprecated_notice('Use file_get_type_cloud instead of get_filetype_cloud', 1.8);
+ return file_get_type_cloud($owner_guid, $friends);
}
-
/**
* Populates the ->getUrl() method for file objects
*
* @param ElggEntity $entity File entity
* @return string File URL
*/
-function file_url($entity) {
+function file_url_override($entity) {
$title = $entity->title;
$title = elgg_get_friendly_title($title);
- return "pg/file/view/" . $entity->getGUID() . "/" . $title;
+ return "file/view/" . $entity->getGUID() . "/" . $title;
}
-// Make sure test_init is called on initialisation
-elgg_register_event_handler('init','system','file_init');
+/**
+ * Override the default entity icon for files
+ *
+ * Plugins can override or extend the icons using the plugin hook: 'file:icon:url', 'override'
+ *
+ * @return string Relative URL
+ */
+function file_icon_url_override($hook, $type, $returnvalue, $params) {
+ $file = $params['entity'];
+ $size = $params['size'];
+ if (elgg_instanceof($file, 'object', 'file')) {
+
+ // thumbnails get first priority
+ if ($file->thumbnail) {
+ $ts = (int)$file->icontime;
+ return "mod/file/thumbnail.php?file_guid=$file->guid&size=$size&icontime=$ts";
+ }
-// Register actions
-elgg_register_action("file/upload", $CONFIG->pluginspath . "file/actions/file/upload.php");
-elgg_register_action("file/save", $CONFIG->pluginspath . "file/actions/file/save.php");
-elgg_register_action("file/delete", $CONFIG->pluginspath. "file/actions/file/delete.php");
+ $mapping = array(
+ 'application/excel' => 'excel',
+ 'application/msword' => 'word',
+ 'application/ogg' => 'music',
+ 'application/pdf' => 'pdf',
+ 'application/powerpoint' => 'ppt',
+ 'application/vnd.ms-excel' => 'excel',
+ 'application/vnd.ms-powerpoint' => 'ppt',
+ 'application/vnd.oasis.opendocument.text' => 'openoffice',
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'word',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'excel',
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'ppt',
+ 'application/x-gzip' => 'archive',
+ 'application/x-rar-compressed' => 'archive',
+ 'application/x-stuffit' => 'archive',
+ 'application/zip' => 'archive',
+
+ 'text/directory' => 'vcard',
+ 'text/v-card' => 'vcard',
+
+ 'application' => 'application',
+ 'audio' => 'music',
+ 'text' => 'text',
+ 'video' => 'video',
+ );
+
+ $mime = $file->mimetype;
+ if ($mime) {
+ $base_type = substr($mime, 0, strpos($mime, '/'));
+ } else {
+ $mime = 'none';
+ $base_type = 'none';
+ }
-// temporary - see #2010
-elgg_register_action("file/download", $CONFIG->pluginspath. "file/actions/file/download.php");
+ if (isset($mapping[$mime])) {
+ $type = $mapping[$mime];
+ } elseif (isset($mapping[$base_type])) {
+ $type = $mapping[$base_type];
+ } else {
+ $type = 'general';
+ }
+
+ if ($size == 'large') {
+ $ext = '_lrg';
+ } else {
+ $ext = '';
+ }
+
+ $url = "mod/file/graphics/icons/{$type}{$ext}.gif";
+ $url = elgg_trigger_plugin_hook('file:icon:url', 'override', $params, $url);
+ return $url;
+ }
+}