<?php /** * Elgg Market Plugin * @package market * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author slyhne * @copyright slyhne 2010-2015 * @link http://tiger-inc.eu * @version 1.10 */ elgg_register_event_handler('init','system','market_init'); function market_init() { elgg_register_library('market', elgg_get_plugins_path() . 'market/lib/market.php'); // Add a site navigation item $item = new ElggMenuItem('market', elgg_echo('market:title'), 'market/category'); elgg_register_menu_item('site', $item); // Extend owner block menu elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'market_owner_block_menu'); elgg_register_plugin_hook_handler('register', 'menu:page', 'market_page_menu'); // Extend system CSS with our own styles elgg_extend_view('css/elgg','market/css'); elgg_extend_view('css/admin','market/admincss'); // register the market's JavaScript $market_js = elgg_get_simplecache_url('js', 'market'); elgg_register_simplecache_view('js/market'); elgg_register_js('market', $market_js, 'footer'); // Add a new widget elgg_register_widget_type( 'market', elgg_echo('market:widget'), elgg_echo('market:widget:description') ); // Register a page handler, so we can have nice URLs elgg_register_page_handler('market','market_page_handler'); // override the default url to view a market object elgg_register_plugin_hook_handler('entity:url', 'object', 'market_set_url'); // Register entity type elgg_register_entity_type('object', 'market'); // Register granular notification for this type elgg_register_notification_event('object', 'market', array('create')); // Listen to notification events and supply a more useful message elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'market_notify_message'); // Setup cron job to delete old market posts elgg_register_plugin_hook_handler('cron', 'daily', 'market_expire_cron_hook'); // Register actions $action_url = elgg_get_plugins_path() . "market/actions/"; elgg_register_action("market/save", "{$action_url}save.php"); elgg_register_action("market/delete", "{$action_url}delete.php"); elgg_register_action("market/delete_img", "{$action_url}delete_img.php"); } // market page handler; allows the use of fancy URLs function market_page_handler($page) { $pages = dirname(__FILE__) . '/pages/market'; if (!isset($page[1])) { $page[1] = 'all'; } if (!isset($page[2])) { $page[2] = 'all'; } // Show market sidebar at top of sidebar elgg_extend_view("page/elements/sidebar", "market/sidebar"); $page_type = $page[0]; switch ($page_type) { case 'owned': set_input('username', $page[1]); include "$pages/owned.php"; break; /* case 'friends': set_input('username' , $page[1]); include "$pages/friends.php"; break; */ case 'view': set_input('marketpost', $page[1]); include "$pages/view.php"; break; case 'image': set_input('guid', $page[1]); set_input('imagenum', $page[2]); set_input('size', $page[3]); set_input('tu', $page[4]); include "$pages/image.php"; break; case 'imagepopup': set_input('guid', $page[1]); set_input('imagenum', $page[2]); include "$pages/imagepopup.php"; break; case 'add': elgg_load_library('market'); include "$pages/add.php"; break; case 'edit': elgg_load_library('market'); set_input('guid', $page[1]); include "$pages/edit.php"; break; case 'category': set_input('cat', $page[1]); set_input('type', $page[2]); include "$pages/category.php"; break; case 'terms': include "$pages/terms.php"; break; default: set_input('cat', $page[1]); set_input('type', $page[2]); include "$pages/category.php"; break; } return true; } // Populates the ->getURL() method for market objects function market_set_url($hook, $type, $url, $params) { $entity = $params['entity']; if (elgg_instanceof($entity, 'object', 'market')) { $friendly_title = elgg_get_friendly_title($entity->title); return "market/view/{$entity->guid}/{$friendly_title}"; } } // Add to the user block menu function market_owner_block_menu($hook, $type, $return, $params) { if (elgg_instanceof($params['entity'], 'user')) { $url = "market/owned/{$params['entity']->username}"; $item = new ElggMenuItem('market', elgg_echo('market'), $url); $return[] = $item; } return $return; } /** * Add a page menu menu. * * @param string $hook * @param string $type * @param array $return * @param array $params */ function market_page_menu($hook, $type, $return, $params) { if (elgg_is_logged_in()) { // only show buttons in market pages if (elgg_in_context('market')) { $user = elgg_get_logged_in_user_entity(); $page_owner = elgg_get_page_owner_entity(); if (!$page_owner) { $page_owner = elgg_get_logged_in_user_entity(); } if ($page_owner != $user) { $usertitle = elgg_echo('market:user', array($page_owner->name)); $return[] = new ElggMenuItem('market_owner', $usertitle, 'market/owned/' . $page_owner->username); //$friendstitle = elgg_echo('market:user:friends', array($page_owner->name)); //$return[] = new ElggMenuItem('2userfriends', $friendstitle, 'market/friends/' . $page_owner->username); } else { $return[] = new ElggMenuItem('market_owner', elgg_echo('market:mine'), 'market/owned/' . $user->username); } } } return $return; } // Cron function to delete old market posts function market_expire_cron_hook($hook, $entity_type, $returnvalue, $params) { elgg_load_library('market'); $market_ttl = elgg_get_plugin_setting('market_expire','market'); if ($market_ttl == 0) { return true; } $time_limit = strtotime("-$market_ttl months"); $ret = elgg_set_ignore_access(TRUE); $entities = elgg_get_entities(array( 'type' => 'object', 'subtype' => 'market', 'created_time_upper' => $time_limit, )); foreach ($entities as $entity) { $date = date('j/n-Y', $entity->time_created); $title = $entity->title; $owner = $entity->getOwnerEntity(); notify_user($owner->guid, elgg_get_site_entity()->guid, elgg_echo('market:expire:subject'), elgg_echo('market:expire:body', array($owner->name, $title, $date, $market_ttl)), NULL, 'site'); // Delete market post incl. pictures market_delete_post($entity); } $ret = elgg_set_ignore_access(FALSE); } /** * Returns the body of a notification message * * @param string $hook * @param string $entity_type * @param string $returnvalue * @param array $params */ function market_notify_message($hook, $entity_type, $returnvalue, $params) { $entity = $params['entity']; $to_entity = $params['to_entity']; $method = $params['method']; if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'market')) { $descr = elgg_get_excerpt($entity->description); $title = $entity->title; $owner = $entity->getOwnerEntity(); $market_type = elgg_echo("market:type:{$entity->market_type}"); return elgg_echo('market:notification', array( $owner->name, $market_type, $title, $descr, $entity->getURL() )); } return null; }