namespace Friendica\Model;
+use dba;
use Friendica\BaseObject;
use Friendica\Content\Text;
use Friendica\Core\Addon;
use Friendica\Core\Config;
use Friendica\Core\L10n;
+use Friendica\Core\Lock;
use Friendica\Core\PConfig;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBM;
-use Friendica\Model\Contact;
-use Friendica\Model\Conversation;
-use Friendica\Model\Group;
-use Friendica\Model\Term;
use Friendica\Object\Image;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\OStatus;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\XML;
-use Friendica\Util\Lock;
-use dba;
use Text_LanguageDetect;
require_once 'boot.php';
$param_string = self::addTablesToFields(dba::buildParameter($params), $fields);
- $table = "`item` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, false);
+ $table = "`item` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, false, $usermode);
$sql = "SELECT " . $select_fields . " FROM " . $table . $condition_string . $param_string;
$param_string = self::addTablesToFields($param_string, $threadfields);
$param_string = self::addTablesToFields($param_string, $fields);
- $table = "`thread` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, true);
+ $table = "`thread` " . self::constructJoins($uid, $select_fields . $condition_string . $param_string, true, $usermode);
$sql = "SELECT " . $select_fields . " FROM " . $table . $condition_string . $param_string;
*
* @return string The SQL joins for the "select" functions
*/
- private static function constructJoins($uid, $sql_commands, $thread_mode)
+ private static function constructJoins($uid, $sql_commands, $thread_mode, $user_mode)
{
if ($thread_mode) {
$master_table = "`thread`";
$joins = '';
}
- $joins .= sprintf("STRAIGHT_JOIN `contact` ON `contact`.`id` = $master_table.`contact-id`
- AND NOT `contact`.`blocked`
- AND ((NOT `contact`.`readonly` AND NOT `contact`.`pending` AND (`contact`.`rel` IN (%s, %s)))
- OR `contact`.`self` OR (`item`.`id` != `item`.`parent`) OR `contact`.`uid` = 0)
- STRAIGHT_JOIN `contact` AS `author` ON `author`.`id` = $master_table.`author-id` AND NOT `author`.`blocked`
- STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = $master_table.`owner-id` AND NOT `owner`.`blocked`
- LEFT JOIN `user-item` ON `user-item`.`iid` = $master_table_key AND `user-item`.`uid` = %d",
- CONTACT_IS_SHARING, CONTACT_IS_FRIEND, intval($uid));
+ if ($user_mode) {
+ $joins .= sprintf("STRAIGHT_JOIN `contact` ON `contact`.`id` = $master_table.`contact-id`
+ AND NOT `contact`.`blocked`
+ AND ((NOT `contact`.`readonly` AND NOT `contact`.`pending` AND (`contact`.`rel` IN (%s, %s)))
+ OR `contact`.`self` OR (`item`.`id` != `item`.`parent`) OR `contact`.`uid` = 0)
+ STRAIGHT_JOIN `contact` AS `author` ON `author`.`id` = $master_table.`author-id` AND NOT `author`.`blocked`
+ STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = $master_table.`owner-id` AND NOT `owner`.`blocked`
+ LEFT JOIN `user-item` ON `user-item`.`iid` = $master_table_key AND `user-item`.`uid` = %d",
+ CONTACT_IS_SHARING, CONTACT_IS_FRIEND, intval($uid));
+ } else {
+ if (strpos($sql_commands, "`contact`.") !== false) {
+ $joins .= "STRAIGHT_JOIN `contact` ON `contact`.`id` = $master_table.`contact-id`";
+ }
+ if (strpos($sql_commands, "`author`.") !== false) {
+ $joins .= " STRAIGHT_JOIN `contact` AS `author` ON `author`.`id` = $master_table.`author-id`";
+ }
+ if (strpos($sql_commands, "`owner`.") !== false) {
+ $joins .= " STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = $master_table.`owner-id`";
+ }
+ }
if (strpos($sql_commands, "`group_member`.") !== false) {
$joins .= " STRAIGHT_JOIN `group_member` ON `group_member`.`contact-id` = $master_table.`contact-id`";
}
// To avoid timing problems, we are using locks.
- $locked = Lock::set('item_insert_content');
+ $locked = Lock::acquire('item_insert_content');
if (!$locked) {
logger("Couldn't acquire lock for URI " . $item['uri'] . " - proceeding anyway.");
}
logger('Could not insert content for URI ' . $item['uri'] . ' - trying asynchronously');
}
if ($locked) {
- Lock::remove('item_insert_content');
+ Lock::release('item_insert_content');
}
}
}
$base_condition = ['verb' => $verbs, 'deleted' => false, 'gravity' => GRAVITY_ACTIVITY,
- 'author-id' => $author_contact['id'], 'uid' => item['uid']];
+ 'author-id' => $author_contact['id'], 'uid' => $item['uid']];
$condition = array_merge($base_condition, ['parent' => $item_id]);
$like_item = self::selectFirst(['id', 'guid', 'verb'], $condition);