summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorEvan Prodromou <evan@controlyourself.ca>2009-06-09 21:51:24 -0700
committerEvan Prodromou <evan@controlyourself.ca>2009-06-09 21:51:24 -0700
commit4df1ea49ec75ec9dd64bc8f58c01e64ea18bedc7 (patch)
tree91535b33cd2b62b0726821e4d217d587da7cd61b /classes
parentb3628b78448266fda2368f1317e70d1cca45ac17 (diff)
parented627bb4bd6424325478412055d295b185f9f662 (diff)
Merge branch '0.8.x' into userdesign
Conflicts: actions/designsettings.php
Diffstat (limited to 'classes')
-rw-r--r--classes/Fave.php6
-rw-r--r--classes/File.php26
-rw-r--r--classes/File_redirection.php2
-rw-r--r--classes/Foreign_link.php2
-rw-r--r--classes/Memcached_DataObject.php24
-rw-r--r--classes/Notice.php106
-rw-r--r--classes/Notice_inbox.php10
-rw-r--r--classes/Notice_tag.php6
-rw-r--r--classes/Profile.php6
-rw-r--r--classes/Reply.php10
-rw-r--r--classes/User.php1
-rw-r--r--classes/User_group.php6
12 files changed, 110 insertions, 95 deletions
diff --git a/classes/Fave.php b/classes/Fave.php
index 915b4572f..572334ce4 100644
--- a/classes/Fave.php
+++ b/classes/Fave.php
@@ -46,7 +46,7 @@ class Fave extends Memcached_DataObject
return $ids;
}
- function _streamDirect($user_id, $offset, $limit, $since_id, $before_id, $since)
+ function _streamDirect($user_id, $offset, $limit, $since_id, $max_id, $since)
{
$fav = new Fave();
@@ -59,8 +59,8 @@ class Fave extends Memcached_DataObject
$fav->whereAdd('notice_id > ' . $since_id);
}
- if ($before_id != 0) {
- $fav->whereAdd('notice_id < ' . $before_id);
+ if ($max_id != 0) {
+ $fav->whereAdd('notice_id <= ' . $max_id);
}
if (!is_null($since)) {
diff --git a/classes/File.php b/classes/File.php
index e5913115b..24ab11b8e 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -120,4 +120,30 @@ class File extends Memcached_DataObject
File_to_post::processNew($file_id, $notice_id);
return $x;
}
+
+ function isRespectsQuota($user) {
+ if ($_FILES['attach']['size'] > common_config('attachments', 'file_quota')) {
+ return sprintf(_('No file may be larger than %d bytes ' .
+ 'and the file you sent was %d bytes. Try to upload a smaller version.'),
+ common_config('attachments', 'file_quota'), $_FILES['attach']['size']);
+ }
+
+ $query = "select sum(size) as total from file join file_to_post on file_to_post.file_id = file.id join notice on file_to_post.post_id = notice.id where profile_id = {$user->id} and file.url like '%/notice/%/file'";
+ $this->query($query);
+ $this->fetch();
+ $total = $this->total + $_FILES['attach']['size'];
+ if ($total > common_config('attachments', 'user_quota')) {
+ return sprintf(_('A file this large would exceed your user quota of %d bytes.'), common_config('attachments', 'user_quota'));
+ }
+
+ $query .= ' month(modified) = month(now()) and year(modified) = year(now())';
+ $this->query($query);
+ $this->fetch();
+ $total = $this->total + $_FILES['attach']['size'];
+ if ($total > common_config('attachments', 'monthly_quota')) {
+ return sprintf(_('A file this large would exceed your monthly quota of %d bytes.'), common_config('attachments', 'monthly_quota'));
+ }
+ return true;
+ }
}
+
diff --git a/classes/File_redirection.php b/classes/File_redirection.php
index 0eae68178..212cc3615 100644
--- a/classes/File_redirection.php
+++ b/classes/File_redirection.php
@@ -133,7 +133,7 @@ class File_redirection extends Memcached_DataObject
$file->limit(1);
$file->orderBy('len');
$file->find(true);
- if (!empty($file->id)) {
+ if (!empty($file->url) && (strlen($file->url) < strlen($long_url))) {
return $file->url;
}
diff --git a/classes/Foreign_link.php b/classes/Foreign_link.php
index 606560951..c0b356ece 100644
--- a/classes/Foreign_link.php
+++ b/classes/Foreign_link.php
@@ -11,7 +11,7 @@ class Foreign_link extends Memcached_DataObject
public $__table = 'foreign_link'; // table name
public $user_id; // int(4) primary_key not_null
- public $foreign_id; // int(4) primary_key not_null
+ public $foreign_id; // bigint(8) primary_key not_null unsigned
public $service; // int(4) primary_key not_null
public $credentials; // varchar(255)
public $noticesync; // tinyint(1) not_null default_1
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index 5f71f716b..33ac70dd0 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -227,4 +227,28 @@ class Memcached_DataObject extends DB_DataObject
$c->set($ckey, $cached, MEMCACHE_COMPRESSED, $expiry);
return new ArrayWrapper($cached);
}
+
+ // We overload so that 'SET NAMES "utf8"' is called for
+ // each connection
+
+ function _connect()
+ {
+ global $_DB_DATAOBJECT;
+ $exists = !empty($this->_database_dsn_md5) &&
+ isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]);
+ $result = parent::_connect();
+ if (!$exists) {
+ $DB = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
+ if (common_config('db', 'type') == 'mysql' &&
+ common_config('db', 'utf8')) {
+ $conn = $DB->connection;
+ if ($DB instanceof DB_mysqli) {
+ mysqli_set_charset($conn, 'utf8');
+ } else if ($DB instanceof DB_mysql) {
+ mysql_set_charset('utf8', $conn);
+ }
+ }
+ }
+ return $result;
+ }
}
diff --git a/classes/Notice.php b/classes/Notice.php
index 1b5c0ab0a..895b5d2c7 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -124,6 +124,8 @@ class Notice extends Memcached_DataObject
$profile = Profile::staticGet($profile_id);
+ $final = common_shorten_links($content);
+
if (!$profile) {
common_log(LOG_ERR, 'Problem saving notice. Unknown user.');
return _('Problem saving notice. Unknown user.');
@@ -134,7 +136,7 @@ class Notice extends Memcached_DataObject
return _('Too many notices too fast; take a breather and post again in a few minutes.');
}
- if (common_config('site', 'dupelimit') > 0 && !Notice::checkDupes($profile_id, $content)) {
+ if (common_config('site', 'dupelimit') > 0 && !Notice::checkDupes($profile_id, $final)) {
common_log(LOG_WARNING, 'Dupe posting by profile #' . $profile_id . '; throttled.');
return _('Too many duplicate messages too quickly; take a breather and post again in a few minutes.');
}
@@ -165,8 +167,8 @@ class Notice extends Memcached_DataObject
$notice->reply_to = $reply_to;
$notice->created = common_sql_now();
- $notice->content = $content;
- $notice->rendered = common_render_content($content, $notice);
+ $notice->content = $final;
+ $notice->rendered = common_render_content($final, $notice);
$notice->source = $source;
$notice->uri = $uri;
@@ -202,13 +204,9 @@ class Notice extends Memcached_DataObject
$notice->saveReplies();
$notice->saveTags();
- $notice->saveGroups();
- if (common_config('queue', 'enabled')) {
- $notice->addToAuthorInbox();
- } else {
- $notice->addToInboxes();
- }
+ $notice->addToInboxes();
+ $notice->saveGroups();
$notice->query('COMMIT');
@@ -218,13 +216,7 @@ class Notice extends Memcached_DataObject
# Clear the cache for subscribed users, so they'll update at next request
# XXX: someone clever could prepend instead of clearing the cache
- if (common_config('memcached', 'enabled')) {
- if (common_config('queue', 'enabled')) {
- $notice->blowAuthorCaches();
- } else {
- $notice->blowCaches();
- }
- }
+ $notice->blowCaches();
return $notice;
}
@@ -277,6 +269,18 @@ class Notice extends Memcached_DataObject
return true;
}
+ function getUploadedAttachment() {
+ $post = clone $this;
+ $query = 'select file.url as uploaded from file join file_to_post on file.id = file_id where post_id=' . $post->escape($post->id) . ' and url like "%/notice/%/file"';
+ $post->query($query);
+ $post->fetch();
+ $ret = $post->uploaded;
+// var_dump($post);
+ $post->free();
+// die();
+ return $ret;
+ }
+
function hasAttachments() {
$post = clone $this;
$query = "select count(file_id) as n_attachments from file join file_to_post on (file_id = file.id) join notice on (post_id = notice.id) where post_id = " . $post->escape($post->id);
@@ -297,17 +301,6 @@ class Notice extends Memcached_DataObject
$this->blowGroupCache($blowLast);
}
- function blowAuthorCaches($blowLast=false)
- {
- // Clear the user's cache
- $cache = common_memcache();
- if (!empty($cache)) {
- $cache->delete(common_cache_key('notice_inbox:by_user:'.$this->profile_id));
- }
- $this->blowNoticeCache($blowLast);
- $this->blowPublicCache($blowLast);
- }
-
function blowGroupCache($blowLast=false)
{
$cache = common_memcache();
@@ -443,22 +436,22 @@ class Notice extends Memcached_DataObject
# XXX: too many args; we need to move to named params or even a separate
# class for notice streams
- static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=null, $since=null) {
+ static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $max_id=0, $order=null, $since=null) {
if (common_config('memcached', 'enabled')) {
- # Skip the cache if this is a since, since_id or before_id qry
- if ($since_id > 0 || $before_id > 0 || $since) {
- return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since);
+ # Skip the cache if this is a since, since_id or max_id qry
+ if ($since_id > 0 || $max_id > 0 || $since) {
+ return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $max_id, $order, $since);
} else {
return Notice::getCachedStream($qry, $cachekey, $offset, $limit, $order);
}
}
- return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since);
+ return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $max_id, $order, $since);
}
- static function getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order, $since) {
+ static function getStreamDirect($qry, $offset, $limit, $since_id, $max_id, $order, $since) {
$needAnd = false;
$needWhere = true;
@@ -480,7 +473,7 @@ class Notice extends Memcached_DataObject
$qry .= ' notice.id > ' . $since_id;
}
- if ($before_id > 0) {
+ if ($max_id > 0) {
if ($needWhere) {
$qry .= ' WHERE ';
@@ -489,7 +482,7 @@ class Notice extends Memcached_DataObject
$qry .= ' AND ';
}
- $qry .= ' notice.id < ' . $before_id;
+ $qry .= ' notice.id <= ' . $max_id;
}
if ($since) {
@@ -647,17 +640,17 @@ class Notice extends Memcached_DataObject
}
}
- function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0, $since=null)
+ function publicStream($offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
{
$ids = Notice::stream(array('Notice', '_publicStreamDirect'),
array(),
'public',
- $offset, $limit, $since_id, $before_id, $since);
+ $offset, $limit, $since_id, $max_id, $since);
return Notice::getStreamByIds($ids);
}
- function _publicStreamDirect($offset=0, $limit=20, $since_id=0, $before_id=0, $since=null)
+ function _publicStreamDirect($offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
{
$notice = new Notice();
@@ -681,8 +674,8 @@ class Notice extends Memcached_DataObject
$notice->whereAdd('id > ' . $since_id);
}
- if ($before_id != 0) {
- $notice->whereAdd('id < ' . $before_id);
+ if ($max_id != 0) {
+ $notice->whereAdd('id <= ' . $max_id);
}
if (!is_null($since)) {
@@ -726,33 +719,6 @@ class Notice extends Memcached_DataObject
return;
}
- function addToAuthorInbox()
- {
- $enabled = common_config('inboxes', 'enabled');
-
- if ($enabled === true || $enabled === 'transitional') {
- $user = User::staticGet('id', $this->profile_id);
- if (empty($user)) {
- return;
- }
- $inbox = new Notice_inbox();
- $UT = common_config('db','type')=='pgsql'?'"user"':'user';
- $qry = 'INSERT INTO notice_inbox (user_id, notice_id, created) ' .
- "SELECT $UT.id, " . $this->id . ", '" . $this->created . "' " .
- "FROM $UT " .
- "WHERE $UT.id = " . $this->profile_id . ' ' .
- 'AND NOT EXISTS (SELECT user_id, notice_id ' .
- 'FROM notice_inbox ' .
- "WHERE user_id = " . $this->profile_id . ' '.
- 'AND notice_id = ' . $this->id . ' )';
- if ($enabled === 'transitional') {
- $qry .= " AND $UT.inboxed = 1";
- }
- $inbox->query($qry);
- }
- return;
- }
-
function saveGroups()
{
$enabled = common_config('inboxes', 'enabled');
@@ -1024,15 +990,15 @@ class Notice extends Memcached_DataObject
}
}
- function stream($fn, $args, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $since=null, $tag=null)
+ function stream($fn, $args, $cachekey, $offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
{
$cache = common_memcache();
if (empty($cache) ||
- $since_id != 0 || $before_id != 0 || !is_null($since) ||
+ $since_id != 0 || $max_id != 0 || (!is_null($since) && $since > 0) ||
($offset + $limit) > NOTICE_CACHE_WINDOW) {
return call_user_func_array($fn, array_merge($args, array($offset, $limit, $since_id,
- $before_id, $since, $tag)));
+ $max_id, $since)));
}
$idkey = common_cache_key($cachekey);
diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php
index dec14b0d1..8a27e1747 100644
--- a/classes/Notice_inbox.php
+++ b/classes/Notice_inbox.php
@@ -43,15 +43,15 @@ class Notice_inbox extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
- function stream($user_id, $offset, $limit, $since_id, $before_id, $since)
+ function stream($user_id, $offset, $limit, $since_id, $max_id, $since)
{
return Notice::stream(array('Notice_inbox', '_streamDirect'),
array($user_id),
'notice_inbox:by_user:'.$user_id,
- $offset, $limit, $since_id, $before_id, $since);
+ $offset, $limit, $since_id, $max_id, $since);
}
- function _streamDirect($user_id, $offset, $limit, $since_id, $before_id, $since)
+ function _streamDirect($user_id, $offset, $limit, $since_id, $max_id, $since)
{
$inbox = new Notice_inbox();
@@ -61,8 +61,8 @@ class Notice_inbox extends Memcached_DataObject
$inbox->whereAdd('notice_id > ' . $since_id);
}
- if ($before_id != 0) {
- $inbox->whereAdd('notice_id < ' . $before_id);
+ if ($max_id != 0) {
+ $inbox->whereAdd('notice_id <= ' . $max_id);
}
if (!is_null($since)) {
diff --git a/classes/Notice_tag.php b/classes/Notice_tag.php
index e5b772243..758a66594 100644
--- a/classes/Notice_tag.php
+++ b/classes/Notice_tag.php
@@ -46,7 +46,7 @@ class Notice_tag extends Memcached_DataObject
return Notice::getStreamByIds($ids);
}
- function _streamDirect($tag, $offset, $limit, $since_id, $before_id, $since)
+ function _streamDirect($tag, $offset, $limit, $since_id, $max_id, $since)
{
$nt = new Notice_tag();
@@ -59,8 +59,8 @@ class Notice_tag extends Memcached_DataObject
$nt->whereAdd('notice_id > ' . $since_id);
}
- if ($before_id != 0) {
- $nt->whereAdd('notice_id < ' . $before_id);
+ if ($max_id != 0) {
+ $nt->whereAdd('notice_id < ' . $max_id);
}
if (!is_null($since)) {
diff --git a/classes/Profile.php b/classes/Profile.php
index afc0ea4f7..4a459b974 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -170,7 +170,7 @@ class Profile extends Memcached_DataObject
$ids = Notice::stream(array($this, '_streamDirect'),
array(),
'profile:notice_ids:' . $this->id,
- $offset, $limit, $since_id, $before_id, $since);
+ $offset, $limit, $since_id, $max_id, $since);
return Notice::getStreamByIds($ids);
}
@@ -225,8 +225,8 @@ class Profile extends Memcached_DataObject
$notice->whereAdd('id > ' . $since_id);
}
- if ($before_id != 0) {
- $notice->whereAdd('id < ' . $before_id);
+ if ($max_id != 0) {
+ $notice->whereAdd('id <= ' . $max_id);
}
if (!is_null($since)) {
diff --git a/classes/Reply.php b/classes/Reply.php
index 4439053b4..49b1e05e5 100644
--- a/classes/Reply.php
+++ b/classes/Reply.php
@@ -22,16 +22,16 @@ class Reply extends Memcached_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
- function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
{
$ids = Notice::stream(array('Reply', '_streamDirect'),
array($user_id),
'reply:stream:' . $user_id,
- $offset, $limit, $since_id, $before_id, $since);
+ $offset, $limit, $since_id, $max_id, $since);
return $ids;
}
- function _streamDirect($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
+ function _streamDirect($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $max_id=0, $since=null)
{
$reply = new Reply();
$reply->profile_id = $user_id;
@@ -40,8 +40,8 @@ class Reply extends Memcached_DataObject
$reply->whereAdd('notice_id > ' . $since_id);
}
- if ($before_id != 0) {
- $reply->whereAdd('notice_id < ' . $before_id);
+ if ($max_id != 0) {
+ $reply->whereAdd('notice_id < ' . $max_id);
}
if (!is_null($since)) {
diff --git a/classes/User.php b/classes/User.php
index 8cc8285f1..c7eede94e 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -402,7 +402,6 @@ class User extends Memcached_DataObject
function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
{
$ids = Reply::stream($this->id, $offset, $limit, $since_id, $before_id, $since);
- common_debug("Ids = " . implode(',', $ids));
return Notice::getStreamByIds($ids);
}
diff --git a/classes/User_group.php b/classes/User_group.php
index 7cc31e702..a135015ba 100644
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -58,7 +58,7 @@ class User_group extends Memcached_DataObject
return Notice::getStreamByIds($ids);
}
- function _streamDirect($offset, $limit, $since_id, $before_id, $since)
+ function _streamDirect($offset, $limit, $since_id, $max_id, $since)
{
$inbox = new Group_inbox();
@@ -71,8 +71,8 @@ class User_group extends Memcached_DataObject
$inbox->whereAdd('notice_id > ' . $since_id);
}
- if ($before_id != 0) {
- $inbox->whereAdd('notice_id < ' . $before_id);
+ if ($max_id != 0) {
+ $inbox->whereAdd('notice_id <= ' . $max_id);
}
if (!is_null($since)) {