aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-08-22 21:53:48 +0000
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-08-22 21:53:48 +0000
commitbe37104ac63cd25f2eac831ca03d6d2b19976e1c (patch)
tree5b168134f2b07933831daedd8cf2641ffb6c5c7d
parentd45a24be28b2eb2d0c2731708b589788a5b87215 (diff)
downloadelgg-be37104ac63cd25f2eac831ca03d6d2b19976e1c.tar.gz
elgg-be37104ac63cd25f2eac831ca03d6d2b19976e1c.tar.bz2
Merged r6684:6694 from 1.7 branch to trunk (pages plugin was manually merged due to standardization of code in trunk but not branch)
git-svn-id: http://code.elgg.org/elgg/trunk@6848 36083f99-b078-4883-b0ff-0f9b5a30f544
-rw-r--r--engine/lib/entities.php19
-rw-r--r--engine/lib/relationships.php4
-rw-r--r--engine/lib/upgrades/2010071001.php48
-rw-r--r--engine/lib/upgrades/2010071002.php48
-rw-r--r--mod/notifications/start.php86
-rw-r--r--mod/pages/actions/pages/edit.php4
-rw-r--r--mod/pages/start.php7
-rw-r--r--mod/pages/views/default/forms/pages/edit.php8
-rw-r--r--mod/profile/actions/cropicon.php18
-rw-r--r--mod/profile/actions/iconupload.php4
-rw-r--r--mod/profile/icon.php7
-rw-r--r--mod/profile/icondirect.php20
-rw-r--r--mod/profile/start.php4
-rw-r--r--version.php2
14 files changed, 220 insertions, 59 deletions
diff --git a/engine/lib/entities.php b/engine/lib/entities.php
index 1750f12e1..e6c2baa8e 100644
--- a/engine/lib/entities.php
+++ b/engine/lib/entities.php
@@ -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));
}
diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php
index f1d119452..dd59b8d3f 100644
--- a/engine/lib/relationships.php
+++ b/engine/lib/relationships.php
@@ -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
index 000000000..4df044cff
--- /dev/null
+++ b/engine/lib/upgrades/2010071001.php
@@ -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
index 000000000..cdf08c830
--- /dev/null
+++ b/engine/lib/upgrades/2010071002.php
@@ -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);
+ }
+ }
+ }
+ }
+ }
+}
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;
}
}
}
diff --git a/version.php b/version.php
index 60ce3d11b..a9aa992c6 100644
--- a/version.php
+++ b/version.php
@@ -12,7 +12,7 @@
// YYYYMMDD = Elgg Date
// XX = Interim incrementer
-$version = 2010070301;
+$version = 2010071002;
// Human-friendly version name
$release = '1.8-svn';