]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Merged r6684:6694 from 1.7 branch to trunk (pages plugin was manually merged due...
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 22 Aug 2010 21:53:48 +0000 (21:53 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 22 Aug 2010 21:53:48 +0000 (21:53 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@6848 36083f99-b078-4883-b0ff-0f9b5a30f544

14 files changed:
engine/lib/entities.php
engine/lib/relationships.php
engine/lib/upgrades/2010071001.php [new file with mode: 0644]
engine/lib/upgrades/2010071002.php [new file with mode: 0644]
mod/notifications/start.php
mod/pages/actions/pages/edit.php
mod/pages/start.php
mod/pages/views/default/forms/pages/edit.php
mod/profile/actions/cropicon.php
mod/profile/actions/iconupload.php
mod/profile/icon.php
mod/profile/icondirect.php
mod/profile/start.php
version.php

index 1750f12e1e4f542f9c867d687745fea6691a2ab9..e6c2baa8e516b7844b9729c2ca8d9032018a95c1 100644 (file)
@@ -801,7 +801,9 @@ abstract class ElggEntity implements
                        $this->attributes['subtype'] = get_subtype_id($this->attributes['type'], $this->attributes['subtype']);
 
                        // Cache object handle
-                       if ($this->attributes['guid']) cache_entity($this);
+                       if ($this->attributes['guid']) {
+                               cache_entity($this);
+                       }
 
                        return $this->attributes['guid'];
                }
@@ -1693,21 +1695,24 @@ function entity_row_to_elggstar($row) {
                        if (!($new_entity instanceof ElggEntity)) {
                                throw new ClassException(sprintf(elgg_echo('ClassException:ClassnameNotClass'), $classname, 'ElggEntity'));
                        }
-               }
-               else {
+               } else {
                        error_log(sprintf(elgg_echo('ClassNotFoundException:MissingClass'), $classname));
                }
        }
        else {
                switch ($row->type) {
                        case 'object' :
-                               $new_entity = new ElggObject($row); break;
+                               $new_entity = new ElggObject($row);
+                               break;
                        case 'user' :
-                               $new_entity = new ElggUser($row); break;
+                               $new_entity = new ElggUser($row);
+                               break;
                        case 'group' :
-                               $new_entity = new ElggGroup($row); break;
+                               $new_entity = new ElggGroup($row);
+                               break;
                        case 'site' :
-                               $new_entity = new ElggSite($row); break;
+                               $new_entity = new ElggSite($row);
+                               break;
                        default:
                                throw new InstallationException(sprintf(elgg_echo('InstallationException:TypeNotSupported'), $row->type));
                }
index f1d119452a7b42f11ee2c39af1b1412be18d2eb1..dd59b8d3f78d17e9e95fba562c8d2ea5e3c2a109 100644 (file)
@@ -625,9 +625,7 @@ $count = false, $site_guid = 0) {
                $options['owner_guid'] = $owner_guid;
        }
 
-       if ($limit) {
-               $options['limit'] = $limit;
-       }
+       $options['limit'] = $limit;
 
        if ($offset) {
                $options['offset'] = $offset;
diff --git a/engine/lib/upgrades/2010071001.php b/engine/lib/upgrades/2010071001.php
new file mode 100644 (file)
index 0000000..4df044c
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ *     Change profile image names to use guid rather than username
+ */
+
+function user_file_matrix_2010071001($guid) {
+       // lookup the entity
+       $user = get_entity($guid);
+       if ($user->type != 'user') {
+               // only to be used for user directories
+               return FALSE;
+       }
+
+       if (!$user->time_created) {
+               // no idea where this user has its files
+               return FALSE;
+       }
+
+       $time_created = date('Y/m/d', $user->time_created);
+       return "$time_created/$user->guid/";
+}
+
+$sizes = array('large', 'medium', 'small', 'tiny', 'master', 'topbar');
+
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity WHERE username != ''");
+while ($user = mysql_fetch_object($users)) {
+       $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+       $user_directory = user_file_matrix_2010071001($user->guid);
+       if (!$user_directory) {
+               continue;
+       }
+       $profile_directory = $CONFIG->dataroot . $user_directory . "profile/";
+       if (!file_exists($profile_directory)) {
+               continue;
+       }
+
+       foreach ($sizes as $size) {
+               $old_filename = "$profile_directory{$user->username}{$size}.jpg";
+               $new_filename = "$profile_directory{$user->guid}{$size}.jpg";
+               if (file_exists($old_filename)) {
+                       if (!rename($old_filename, $new_filename)) {
+                               error_log("Failed to rename profile photo for $user->username");
+                       }
+               }
+       }
+}
diff --git a/engine/lib/upgrades/2010071002.php b/engine/lib/upgrades/2010071002.php
new file mode 100644 (file)
index 0000000..cdf08c8
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Update the notifications based on all friends and access collections
+ */
+
+// loop through all users checking collections and notifications
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+global $NOTIFICATION_HANDLERS;
+$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity WHERE username != ''");
+while ($user = mysql_fetch_object($users)) {
+       $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+       $user = get_entity($user->guid);
+       foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+               $notify = "notify$method";
+               $metaname = "collections_notifications_preferences_$method";
+               $collections_preferences = $user->$metaname;
+               if (!$collections_preferences) {
+                       continue;
+               }
+               if (!is_array($collections_preferences)) {
+                       $collections_preferences = array($collections_preferences);
+               }
+               foreach ($collections_preferences as $collection_id) {
+                       // check the all friends notifications
+                       if ($collection_id == -1) {
+                               $options = array(
+                                       'relationship' => 'friend', 
+                                       'relationship_guid' => $user->guid,
+                                       'limit' => 0
+                               );
+                               $friends = elgg_get_entities_from_relationship($options);
+                               foreach ($friends as $friend) {
+                                       if (!check_entity_relationship($user->guid, $notify, $friend->guid)) {
+                                               add_entity_relationship($user->guid, $notify, $friend->guid);
+                                       }
+                               }
+                       } else {
+                               $members = get_members_of_access_collection($collection_id, TRUE);
+                               foreach ($members as $member) {
+                                       if (!check_entity_relationship($user->guid, $notify, $members)) {
+                                               add_entity_relationship($user->guid, $notify, $member);
+                                       }
+                               }
+                       }
+               }
+       }
+}
index fa36d5d69b490071c2ec26b07fb0c0e0dcaa84f0..3349d019421049f568241754185dd2d1d90ab0d0 100644 (file)
@@ -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);
 
index 004b81a25bf80c75a7d242ac9e3706079ae8f83f..b583563f9e722745f962686cbd9b5ebab91f7886 100644 (file)
@@ -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;
                }
        }
 
index 8f4e3b5e2ba1dc5faa60b3f50ab966dfa0b22ac6..6fd0ef26de7c2131c0ac93538de02053d47aeb80 100644 (file)
@@ -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();
                }
index 2095e4fd8ef899cedf1fe4155644d97890b82ac8..bdd721b82e1d4e771d634b93bbd2bcf33eba33c6 100644 (file)
@@ -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>
index 5bba84a8c6ef376580234c4bf22454f2ffcb1977..b0dc0fa61363161d9701dc6c3063e6b64e71a7cc 100644 (file)
@@ -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";
 
index a0cb24c3dca1c6b79ab81a7436d55d5c68235a06..23d1967a6b6c6de2081b4becc616091e15569090 100644 (file)
@@ -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();
index da7667c8b00da77cc498590e451ab672093fb153..d7d7247c550efa8deff74c1530e63430e48fa741 100644 (file)
@@ -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) {
index 8a46786ab051cd5da7e3b1dc5546525c217d02a7..c84955fa5d05804db20ce136786c96ef422b4b42 100644 (file)
@@ -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');
index 17a55e1f9a956a314ded945a7b1d7d846292bce6..adac92aef0909a67028f284704e0c9cfcb9b465e 100644 (file)
@@ -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;
                }
        }
 }
index 60ce3d11b050f76db66512e4f291a1c1512954c0..a9aa992c6579194ef0ebe381a47ec48324ae92e2 100644 (file)
@@ -12,7 +12,7 @@
 
 // YYYYMMDD = Elgg Date
 // XX = Interim incrementer
-$version = 2010070301;
+$version = 2010071002;
 
 // Human-friendly version name
 $release = '1.8-svn';