diff options
Diffstat (limited to 'mod')
-rw-r--r-- | mod/notifications/start.php | 86 | ||||
-rw-r--r-- | mod/pages/actions/pages/edit.php | 4 | ||||
-rw-r--r-- | mod/pages/start.php | 7 | ||||
-rw-r--r-- | mod/pages/views/default/forms/pages/edit.php | 8 | ||||
-rw-r--r-- | mod/profile/actions/cropicon.php | 18 | ||||
-rw-r--r-- | mod/profile/actions/iconupload.php | 4 | ||||
-rw-r--r-- | mod/profile/icon.php | 7 | ||||
-rw-r--r-- | mod/profile/icondirect.php | 20 | ||||
-rw-r--r-- | mod/profile/start.php | 4 |
9 files changed, 110 insertions, 48 deletions
diff --git a/mod/notifications/start.php b/mod/notifications/start.php index fa36d5d69..3349d0194 100644 --- a/mod/notifications/start.php +++ b/mod/notifications/start.php @@ -27,6 +27,10 @@ function notifications_plugin_init() { // update notifications based on relationships changing register_elgg_event_handler('delete', 'member', 'notifications_relationship_remove'); register_elgg_event_handler('delete', 'friend', 'notifications_relationship_remove'); + + // update notifications when new friend or access collection membership + register_elgg_event_handler('create', 'friend', 'notifications_update_friend_notify'); + register_plugin_hook('access:collections:add_user', 'collection', 'notifications_update_collection_notify'); } /** @@ -88,7 +92,89 @@ function notifications_relationship_remove($event, $object_type, $relationship) } } +/** + * Turn on notifications for new friends if all friend notifications is on + * + * @param string $event + * @param string $object_type + * @param object $relationship + */ +function notifications_update_friend_notify($event, $object_type, $relationship) { + global $NOTIFICATION_HANDLERS; + + $user_guid = $relationship->guid_one; + $friend_guid = $relationship->guid_two; + + $user = get_entity($user_guid); + + // loop through all notification types + foreach ($NOTIFICATION_HANDLERS as $method => $foo) { + $metaname = 'collections_notifications_preferences_' . $method; + $collections_preferences = $user->$metaname; + if ($collections_preferences) { + if (!empty($collections_preferences) && !is_array($collections_preferences)) { + $collections_preferences = array($collections_preferences); + } + if (is_array($collections_preferences)) { + // -1 means all friends is on - should be a define + if (in_array(-1, $collections_preferences)) { + add_entity_relationship($user_guid, 'notify' . $method, $friend_guid); + } + } + } + } +} + +/** + * Update notifications for changes in access collection membership. + * + * This function assumes that only friends can belong to access collections. + * + * @param string $event + * @param string $object_type + * @param bool $returnvalue + * @param array $params + */ +function notifications_update_collection_notify($event, $object_type, $returnvalue, $params) { + global $NOTIFICATION_HANDLERS; + + // only update notifications for user owned collections + $collection_id = $params['collection_id']; + $collection = get_access_collection($collection_id); + $user = get_entity($collection->owner_guid); + if (!($user instanceof ElggUser)) { + return $returnvalue; + } + $member_guid = $params['user_guid']; + + // loop through all notification types + foreach ($NOTIFICATION_HANDLERS as $method => $foo) { + $metaname = 'collections_notifications_preferences_' . $method; + $collections_preferences = $user->$metaname; + if (!$collections_preferences) { + continue; + } + if (!is_array($collections_preferences)) { + $collections_preferences = array($collections_preferences); + } + if (in_array(-1, $collections_preferences)) { + // if "all friends" notify is on, we don't change any notifications + // since must be a friend to be in an access collection + continue; + } + if (in_array($collection_id, $collections_preferences)) { + // notifications are on for this collection so we add/remove + if ($event == 'access:collections:add_user') { + add_entity_relationship($user->guid, "notify$method", $member_guid); + } elseif ($event == 'access:collections:remove_user') { + // removing someone from an access collection is not a guarantee + // that they should be removed from notifications + //remove_entity_relationship($user->guid, "notify$method", $member_guid); + } + } + } +} register_elgg_event_handler('init', 'system', 'notifications_plugin_init', 1000); diff --git a/mod/pages/actions/pages/edit.php b/mod/pages/actions/pages/edit.php index 004b81a25..b583563f9 100644 --- a/mod/pages/actions/pages/edit.php +++ b/mod/pages/actions/pages/edit.php @@ -64,9 +64,7 @@ if ($page instanceof ElggObject) { // Save fields - note we always save latest description as both description and annotation if (sizeof($input) > 0) { foreach($input as $shortname => $value) { - if ((!$pages_guid) || (($pages_guid) && ($shortname != 'title'))) { - $page->$shortname = $value; - } + $page->$shortname = $value; } } diff --git a/mod/pages/start.php b/mod/pages/start.php index 8f4e3b5e2..6fd0ef26d 100644 --- a/mod/pages/start.php +++ b/mod/pages/start.php @@ -70,9 +70,8 @@ function pages_init() { function pages_url($entity) { global $CONFIG; - - return $CONFIG->url . "pg/pages/view/{$entity->guid}/"; - + $title = elgg_get_friendly_title($entity->title); + return $CONFIG->url . "pg/pages/view/{$entity->guid}/$title"; } /** @@ -207,7 +206,7 @@ function page_notify_message($hook, $entity_type, $returnvalue, $params) { $owner = $entity->getOwnerEntity(); return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL(); } - if ($method == 'web') { + if ($method == 'site') { $owner = $entity->getOwnerEntity(); return $owner->name . ' ' . elgg_echo("pages:via") . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL(); } diff --git a/mod/pages/views/default/forms/pages/edit.php b/mod/pages/views/default/forms/pages/edit.php index 2095e4fd8..bdd721b82 100644 --- a/mod/pages/views/default/forms/pages/edit.php +++ b/mod/pages/views/default/forms/pages/edit.php @@ -45,11 +45,6 @@ if (!$vars['entity']) { echo elgg_view('input/securitytoken'); if (is_array($vars['config']->pages) && sizeof($vars['config']->pages) > 0) { foreach($vars['config']->pages as $shortname => $valtype) { - $disabled = ""; - - if (!$new_page && ($shortname == 'title')) { - $disabled = true; - } ?> <p> @@ -57,8 +52,7 @@ if (is_array($vars['config']->pages) && sizeof($vars['config']->pages) > 0) { <?php echo elgg_echo("pages:{$shortname}") ?><br /> <?php echo elgg_view("input/{$valtype}",array( 'internalname' => $shortname, - 'value' => $vars['entity']->$shortname, - 'disabled' => $disabled + 'value' => $vars['entity']->$shortname )); ?> </label> </p> diff --git a/mod/profile/actions/cropicon.php b/mod/profile/actions/cropicon.php index 5bba84a8c..b0dc0fa61 100644 --- a/mod/profile/actions/cropicon.php +++ b/mod/profile/actions/cropicon.php @@ -1,7 +1,7 @@ <?php /** * Elgg profile plugin upload new user icon action - * + * * @package ElggProfile * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Curverider Ltd <info@elgg.com> @@ -28,28 +28,28 @@ $filehandler = new ElggFile(); $filehandler->owner_guid = $profile_owner->getGUID(); $filehandler->setFilename("profile/" . $profile_owner->username . "master" . ".jpg"); $filename = $filehandler->getFilenameOnFilestore(); - + $topbar = get_resized_image_from_existing_file($filename, 16, 16, true, $x1, $y1, $x2, $y2, TRUE); $tiny = get_resized_image_from_existing_file($filename, 25, 25, true, $x1, $y1, $x2, $y2, TRUE); $small = get_resized_image_from_existing_file($filename, 40, 40, true, $x1, $y1, $x2, $y2, TRUE); $medium = get_resized_image_from_existing_file($filename, 100, 100, true, $x1, $y1, $x2, $y2, TRUE); - + if ($small !== FALSE && $medium !== FALSE && $tiny !== FALSE) { $filehandler = new ElggFile(); $filehandler->owner_guid = $profile_owner->getGUID(); - $filehandler->setFilename("profile/" . $profile_owner->username . "medium.jpg"); + $filehandler->setFilename("profile/" . $profile_owner->guid . "medium.jpg"); $filehandler->open("write"); $filehandler->write($medium); $filehandler->close(); - $filehandler->setFilename("profile/" . $profile_owner->username . "small.jpg"); + $filehandler->setFilename("profile/" . $profile_owner->guid . "small.jpg"); $filehandler->open("write"); $filehandler->write($small); $filehandler->close(); - $filehandler->setFilename("profile/" . $profile_owner->username . "tiny.jpg"); + $filehandler->setFilename("profile/" . $profile_owner->guid . "tiny.jpg"); $filehandler->open("write"); $filehandler->write($tiny); $filehandler->close(); - $filehandler->setFilename("profile/" . $profile_owner->username . "topbar.jpg"); + $filehandler->setFilename("profile/" . $profile_owner->guid . "topbar.jpg"); $filehandler->open("write"); $filehandler->write($topbar); $filehandler->close(); @@ -58,14 +58,14 @@ if ($small !== FALSE && $medium !== FALSE && $tiny !== FALSE) { $profile_owner->x2 = $x2; $profile_owner->y1 = $y1; $profile_owner->y2 = $y2; - + $profile_owner->icontime = time(); system_message(elgg_echo("profile:icon:uploaded")); } else { register_error(elgg_echo("profile:icon:notfound")); } - + //forward the user back to the upload page to crop $url = "{$vars['url']}pg/profile/{$profile_owner->username}/edit/icon"; diff --git a/mod/profile/actions/iconupload.php b/mod/profile/actions/iconupload.php index a0cb24c3d..23d1967a6 100644 --- a/mod/profile/actions/iconupload.php +++ b/mod/profile/actions/iconupload.php @@ -1,7 +1,7 @@ <?php /** * Elgg profile plugin upload new user icon action - * + * * @package ElggProfile * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Curverider Ltd <info@elgg.com> @@ -41,7 +41,7 @@ foreach ($icon_sizes as $name => $size_info) { //@todo Make these actual entities. See exts #348. $file = new ElggFile(); $file->owner_guid = $profile_owner_guid; - $file->setFilename("profile/{$profile_username}{$name}.jpg"); + $file->setFilename("profile/{$profile_owner_guid}{$name}.jpg"); $file->open('write'); $file->write($resized); $file->close(); diff --git a/mod/profile/icon.php b/mod/profile/icon.php index da7667c8b..d7d7247c5 100644 --- a/mod/profile/icon.php +++ b/mod/profile/icon.php @@ -1,7 +1,7 @@ <?php /** * Elgg profile icon -* +* * @package ElggProfile * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 * @author Curverider Ltd <info@elgg.com> @@ -13,7 +13,6 @@ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); // Get the owning user $user = page_owner_entity(); -$username = $user->username; // Get the size $size = strtolower(get_input('size')); @@ -30,13 +29,13 @@ if (!$user) { // Try and get the icon $filehandler = new ElggFile(); $filehandler->owner_guid = $user->getGUID(); -$filehandler->setFilename("profile/" . $username . $size . ".jpg"); +$filehandler->setFilename("profile/" . $user->getGUID() . $size . ".jpg"); $success = false; if ($filehandler->open("read")) { if ($contents = $filehandler->read($filehandler->size())) { $success = true; - } + } } if (!$success) { diff --git a/mod/profile/icondirect.php b/mod/profile/icondirect.php index 8a46786ab..c84955fa5 100644 --- a/mod/profile/icondirect.php +++ b/mod/profile/icondirect.php @@ -16,8 +16,6 @@ require_once(dirname(dirname(dirname(__FILE__))). '/engine/settings.php'); global $CONFIG; - -$username = $_GET['username']; $joindate = (int)$_GET['joindate']; $guid = (int)$_GET['guid']; @@ -26,20 +24,6 @@ if (!in_array($size,array('large','medium','small','tiny','master','topbar'))) { $size = "medium"; } -// security check on username string -if ( (strpos($username, '/')!==false) || - (strpos($username, '\\')!==false) || - (strpos($username, '"')!==false) || - (strpos($username, '\'')!==false) || - (strpos($username, '*')!==false) || - (strpos($username, '&')!==false) || - (strpos($username, ' ')!==false) ) { - // these characters are not allowed in usernames - exit; -} - - - $mysql_dblink = @mysql_connect($CONFIG->dbhost,$CONFIG->dbuser,$CONFIG->dbpass, true); if ($mysql_dblink) { if (@mysql_select_db($CONFIG->dbname,$mysql_dblink)) { @@ -65,7 +49,7 @@ if ($mysql_dblink) { // first try to read icon directly $user_path = date('Y/m/d/', $joindate) . $guid; - $filename = $dataroot . $user_path . "/profile/" . $username . $size . ".jpg"; + $filename = "$dataroot$user_path/profile/{$guid}{$size}.jpg"; $contents = @file_get_contents($filename); if (!empty($contents)) { header("Content-type: image/jpeg"); @@ -86,4 +70,6 @@ if ($mysql_dblink) { // simplecache is not turned on or something went wrong so load engine and try that way require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); +$user = get_entity($guid); +set_input('username', $user->username); require_once(dirname(__FILE__).'/icon.php'); diff --git a/mod/profile/start.php b/mod/profile/start.php index 17a55e1f9..adac92aef 100644 --- a/mod/profile/start.php +++ b/mod/profile/start.php @@ -253,11 +253,11 @@ function profile_usericon_hook($hook, $entity_type, $returnvalue, $params){ $filehandler = new ElggFile(); $filehandler->owner_guid = $entity->getGUID(); - $filehandler->setFilename("profile/" . $username . $size . ".jpg"); + $filehandler->setFilename("profile/" . $entity->guid . $size . ".jpg"); if ($filehandler->exists()) { //$url = $CONFIG->url . "pg/icon/$username/$size/$icontime.jpg"; - return $CONFIG->wwwroot . 'mod/profile/icondirect.php?lastcache='.$icontime.'&username='.$entity->username.'&joindate=' . $entity->time_created . '&guid=' . $entity->guid . '&size='.$size; + return $CONFIG->wwwroot . 'mod/profile/icondirect.php?lastcache='.$icontime.'&joindate=' . $entity->time_created . '&guid=' . $entity->guid . '&size='.$size; } } } |