diff options
Diffstat (limited to 'mod/lightpics/start.php')
| -rw-r--r-- | mod/lightpics/start.php | 421 | 
1 files changed, 421 insertions, 0 deletions
diff --git a/mod/lightpics/start.php b/mod/lightpics/start.php new file mode 100644 index 000000000..a2520e499 --- /dev/null +++ b/mod/lightpics/start.php @@ -0,0 +1,421 @@ +<?php +/** + * Photo Gallery plugin + * + * @author Cash Costello + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2 + */ + +elgg_register_event_handler('init', 'system', 'tidypics_init'); + +/** + * Tidypics plugin initialization + */ +function tidypics_init() { +	// Register libraries +	$base_dir = elgg_get_plugins_path() . 'lightpics/lib'; +	elgg_register_library('tidypics:core', "$base_dir/tidypics.php"); +	elgg_register_library('tidypics:upload', "$base_dir/upload.php"); +	elgg_register_library('tidypics:resize', "$base_dir/resize.php"); +	elgg_register_library('tidypics:exif', "$base_dir/exif.php"); +	elgg_load_library('tidypics:core'); + +	// Set up site menu +	elgg_register_menu_item('site', array( +		'name' => 'photos', +		'href' => 'photos/all', +		'text' => elgg_echo('photos'), +	)); + +	// Register a page handler so we can have nice URLs +	elgg_register_page_handler('photos', 'tidypics_page_handler'); + +	// Extend CSS +	elgg_extend_view('css/elgg', 'photos/css'); +	elgg_extend_view('css/admin', 'photos/css'); + +	// Register the JavaScript lib +	$js = elgg_get_simplecache_url('js', 'photos/tidypics'); +	elgg_register_simplecache_view('js/photos/tidypics'); +	elgg_register_js('tidypics', $js, 'footer'); +	$js = elgg_get_simplecache_url('js', 'photos/upload'); +	elgg_register_simplecache_view('js/photos/upload'); +	elgg_register_js('tidypics:upload', $js, 'footer'); + +	$js_base = 'mod/lightpics/vendors/jquery-file-upload/js'; +	 +	elgg_register_js('jquery-tmpl', "$js_base/vendor/tmpl.min.js", 'footer'); +	elgg_register_js('jquery-load-image', "$js_base/vendor/load-image.min.js", 'footer'); +	elgg_register_js('jquery-canvas-to-blob', "$js_base/vendor/canvas-to-blob.min.js", 'footer'); +	 +	elgg_register_js('jquery-fileupload', "$js_base/jquery.fileupload.js", 'footer'); +	elgg_register_js('jquery-fileupload-ui', "$js_base/jquery.fileupload-ui.js", 'footer'); +	 +	// Add photos link to owner block/hover menus +	elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'tidypics_owner_block_menu'); + +	// Add admin menu item +	elgg_register_admin_menu_item('configure', 'photos', 'settings'); + +	// Register for search +	elgg_register_entity_type('object', 'image'); +	elgg_register_entity_type('object', 'album'); + +	// Register for the entity menu +	elgg_register_plugin_hook_handler('register', 'menu:entity', 'tidypics_entity_menu_setup'); + +	// Register group option +	add_group_tool_option('photos', elgg_echo('tidypics:enablephotos'), true); +	elgg_extend_view('groups/tool_latest', 'photos/group_module'); + +	// Register widgets +	elgg_register_widget_type('album_view', elgg_echo("tidypics:widget:albums"), elgg_echo("tidypics:widget:album_descr"), 'profile'); +	elgg_register_widget_type('latest_photos', elgg_echo("tidypics:widget:latest"), elgg_echo("tidypics:widget:latest_descr"), 'profile'); + +	// RSS extensions for embedded media +	elgg_extend_view('extensions/xmlns', 'extensions/photos/xmlns'); + +	// allow group members add photos to group albums +	elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'tidypics_group_permission_override'); +	elgg_register_plugin_hook_handler('permissions_check:metadata', 'object', 'tidypics_group_permission_override'); + +	// notifications +	register_notification_object('object', 'album', elgg_echo('tidypics:newalbum_subject')); +	elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'tidypics_notify_message'); + +	// Register actions +	$base_dir = elgg_get_plugins_path() . 'lightpics/actions/photos'; +	elgg_register_action("photos/delete", "$base_dir/delete.php"); + +	elgg_register_action("photos/album/save", "$base_dir/album/save.php"); +	elgg_register_action("photos/album/sort", "$base_dir/album/sort.php"); +	elgg_register_action("photos/album/set_cover", "$base_dir/album/set_cover.php"); + +	elgg_register_action("photos/image/upload", "$base_dir/image/upload.php"); +	elgg_register_action("photos/image/save", "$base_dir/image/save.php"); +	elgg_register_action("photos/image/ajax_upload", "$base_dir/image/ajax_upload.php", 'logged_in'); +	elgg_register_action("photos/image/ajax_upload_complete", "$base_dir/image/ajax_upload_complete.php", 'logged_in'); + +	elgg_register_action("photos/batch/edit", "$base_dir/batch/edit.php"); + +	elgg_register_action("photos/admin/settings", "$base_dir/admin/settings.php", 'admin'); +	elgg_register_action("photos/admin/create_thumbnails", "$base_dir/admin/create_thumbnails.php", 'admin'); +	elgg_register_action("photos/admin/upgrade", "$base_dir/admin/upgrade.php", 'admin'); +} + +/** + * Tidypics page handler + * + * @param array $page Array of url segments + * @return bool + */ +function tidypics_page_handler($page) { + +	if (!isset($page[0])) { +		return false; +	} + +	elgg_load_js('lightbox'); +	elgg_load_css('lightbox'); +	elgg_load_js('tidypics'); + +	$base = elgg_get_plugins_path() . 'lightpics/pages/photos'; + +	// sometimes owner comes as group:181872 which is not automatically handled +	if (isset($page[1]) && strpos($page[1], 'group:') === 0) { +		$parts = explode(':', $page[1]); +		$owner_guid = $parts[1]; +		if ($owner_guid) { +			elgg_set_page_owner_guid($owner_guid); +		} +	} +	switch ($page[0]) { +		case "all": // all site albums +		case "world": +			require "$base/all.php"; +			break; + +		case "owned":  // albums owned by container entity +		case "owner": +			if (!$owner) { +				forward(); +			} +			require "$base/owner.php"; +			break; + +		case "friends": // albums of friends +			require "$base/friends.php"; +			break; + +		case "group": // albums of a group +			require "$base/owner.php"; +			break; + +		case "album": // view an album individually +			set_input('guid', $page[1]); +			require "$base/album/view.php"; +			break; + +		case "new":  // create new album +		case "add": +			set_input('guid', $page[1]); +			require "$base/album/add.php"; +			break; + +		case "edit": //edit image or album +			set_input('guid', $page[1]); +			$entity = get_entity($page[1]); +			switch ($entity->getSubtype()) { +				case 'album': +					require "$base/album/edit.php"; +					break; +				case 'image': +					require "$base/image/edit.php"; +					break; +				case 'tidypics_batch': +					require "$base/batch/edit.php"; +					break; +				default: +					return false; +			} +			break; + +		case "sort": // sort a photo album +			set_input('guid', $page[1]); +			require "$base/album/sort.php"; +			break; + +		case "image": //view an image +		case "view": +			set_input('guid', $page[1]); +			require "$base/image/view.php"; +			break; + +		case "thumbnail": // tidypics thumbnail +			set_input('guid', $page[1]); +			set_input('size', elgg_extract(2, $page, 'small')); +			require "$base/image/thumbnail.php"; +			break; + +		case "upload": // upload images to album +			set_input('guid', $page[1]); + +			if (elgg_get_plugin_setting('uploader', 'tidypics')) { +				$default_uploader = 'ajax'; +			} else { +				$default_uploader = 'basic'; +			} + +			set_input('uploader', elgg_extract(2, $page, $default_uploader)); +			require "$base/image/upload.php"; +			break; + +		case "batch": //update titles and descriptions +			if (isset($page[1])) { +				set_input('batch', $page[1]); +			} +			include($CONFIG->pluginspath . "lightpics/pages/edit_multiple.php"); +			break; + +		case "download": // download an image +			set_input('guid', $page[1]); +			set_input('disposition', elgg_extract(2, $page, 'attachment')); +			include "$base/image/download.php"; +			break; + +		case "mostviewed": // images with the most views +			if (isset($page[1])) { +				set_input('username', $page[1]); +			} +			include($CONFIG->pluginspath . "lightpics/pages/lists/mostviewedimages.php"); +			break; + +		case "mostrecent": // images uploaded most recently +			if (isset($page[1])) { +				set_input('username', $page[1]); +			} +			include($CONFIG->pluginspath . "lightpics/pages/lists/mostrecentimages.php"); +			break; + +		case "recentlyviewed": // images most recently viewed +			include($CONFIG->pluginspath . "lightpics/pages/lists/recentlyviewed.php"); +			break; + +		case "recentlycommented": // images with the most recent comments +			include($CONFIG->pluginspath . "lightpics/pages/lists/recentlycommented.php"); +			break; + +		case "highestrated": // images with the highest average rating +			include($CONFIG->pluginspath . "lightpics/pages/lists/highestrated.php"); +			break; + +		case "admin": +			include ($CONFIG->pluginspath . "lightpics/pages/admin.php"); +			break; + +		default: +			return false; +	} +	 +	return true; +} + +/** + * Add a menu item to an ownerblock + */ +function tidypics_owner_block_menu($hook, $type, $return, $params) { +	if (elgg_instanceof($params['entity'], 'user')) { +		$url = "photos/owner/{$params['entity']->username}"; +		$item = new ElggMenuItem('photos', elgg_echo('photos'), $url); +		$return[] = $item; +	} else { +		if ($params['entity']->photos_enable != "no") { +			$url = "photos/group/{$params['entity']->guid}/all"; +			$item = new ElggMenuItem('photos', elgg_echo('photos:group'), $url); +			$return[] = $item; +		} +	} + +	return $return; +} + +/** + * Add Tidypics links/info to entity menu + */ +function tidypics_entity_menu_setup($hook, $type, $return, $params) { +	if (elgg_in_context('widgets')) { +		return $return; +	} + +	$entity = $params['entity']; +	$handler = elgg_extract('handler', $params, false); +	if ($handler != 'photos') { +		return $return; +	} + +	if (elgg_instanceof($entity, 'object', 'image')) { +		$album = $entity->getContainerEntity(); +		$cover_guid = $album->getCoverImageGuid(); +		if ($cover_guid != $entity->getGUID() && $album->canEdit()) { +			$url = 'action/photos/album/set_cover' +				. '?image_guid=' . $entity->getGUID() +				. '&album_guid=' . $album->getGUID(); + +			$params = array( +				'href' => $url, +				'text' => elgg_echo('album:cover_link'), +				'is_action' => true, +				'is_trusted' => true, +				'confirm' => elgg_echo('album:cover') +			); +			$text = elgg_view('output/confirmlink', $params); + +			$options = array( +				'name' => 'set_cover', +				'text' => $text, +				'priority' => 80, +			); +			$return[] = ElggMenuItem::factory($options); +		} + +		if (elgg_get_plugin_setting('view_count', 'tidypics')) { +			$view_info = $entity->getViewInfo(); +			$text = elgg_echo('tidypics:views', array((int)$view_info['total'])); +			$options = array( +				'name' => 'views', +				'text' => "<span>$text</span>", +				'href' => false, +				'priority' => 90, +			); +			$return[] = ElggMenuItem::factory($options); +		} +	} +	return $return; +} + +/** + * Override permissions for group albums + * + * 1. To write to a container (album) you must be able to write to the owner of the container (odd) + * 2. We also need to change metadata on the album + * + * @param string $hook + * @param string $type + * @param bool   $result + * @param array  $params + * @return mixed + */ +function tidypics_group_permission_override($hook, $type, $result, $params) { +	if (get_input('action') == 'photos/image/upload') { +		if (isset($params['container'])) { +			$album = $params['container']; +		} else { +			$album = $params['entity']; +		} + +		if (elgg_instanceof($album, 'object', 'album')) { +			return $album->getContainerEntity()->canWriteToContainer(); +		} +	} +} + + +/** + * Create the body of the notification message + * + * Does not run if a new album without photos + *  + * @param string $hook + * @param string $type + * @param bool   $result + * @param array  $params + * @return mixed + */ +function tidypics_notify_message($hook, $type, $result, $params) { +	$entity = $params['entity']; +	$to_entity = $params['to_entity']; +	$method = $params['method']; +	 +	if (elgg_instanceof($entity, 'object', 'album')) { +		if ($entity->new_album) { +			// stops notification from being sent +			return false; +		} +		 +		if ($entity->first_upload) { +			$descr = $entity->description; +			$title = $entity->getTitle(); +			$owner = $entity->getOwnerEntity(); +			return elgg_echo('tidypics:newalbum', array($owner->name)) +					. ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL(); +		} else { +			if ($entity->shouldNotify()) { +				$descr = $entity->description; +				$title = $entity->getTitle(); +				$owner = $entity->getOwnerEntity(); + +				return elgg_echo('tidypics:updatealbum', array($owner->name, $title)) . ': ' . $entity->getURL(); +			} +		} +	} +	 +	return null; +} + +/** + * Sets up submenus for tidypics most viewed pages + */ +function tidypics_mostviewed_submenus() { + +	global $CONFIG; + +	add_submenu_item(elgg_echo('tidypics:mostvieweddashboard'), $CONFIG->url . "mod/tidypics/mostvieweddashboard.php"); +	add_submenu_item(elgg_echo('tidypics:mostviewedthisyear'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagesthisyear.php"); +	add_submenu_item(elgg_echo('tidypics:mostviewedthismonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagesthismonth.php"); +	add_submenu_item(elgg_echo('tidypics:mostviewedlastmonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimageslastmonth.php"); +	add_submenu_item(elgg_echo('tidypics:mostviewedtoday'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagestoday.php"); +	add_submenu_item(elgg_echo('tidypics:mostcommented'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimages.php"); +	add_submenu_item(elgg_echo('tidypics:mostcommentedthismonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimagesthismonth.php"); +	add_submenu_item(elgg_echo('tidypics:mostcommentedtoday'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimagestoday.php"); +	add_submenu_item(elgg_echo('tidypics:recentlycommented'), $CONFIG->wwwroot . 'pg/photos/recentlycommented/'); +}  | 
