View source
<?php
include_once 'commons_follow_user.features.inc';
function commons_follow_user_commons_follow_get_nids($account, $options) {
$flag_ids = commons_follow_get_subscription_flags_ids('user');
if (empty($flag_ids)) {
return array();
}
$query = db_select('flagging', 'f');
$result = $query
->condition('fid', $flag_ids, 'IN')
->condition('uid', $account->uid, '=')
->condition('entity_type', 'user', '=')
->fields('f', array(
'entity_id',
))
->execute()
->fetchAll();
if (empty($result)) {
return array();
}
$uids = array();
foreach ($result as $row) {
$uids[] = (int) $row->entity_id;
}
$query = new EntityFieldQuery();
if (!empty($options['range'])) {
$query
->range(0, $options['range']);
}
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('uid', $uids, 'IN')
->execute();
$nids = array();
if (!empty($result['node'])) {
foreach ($result['node'] as $nid => $row) {
$nids[] = $nid;
}
}
return $nids;
}
function commons_follow_user_flag_flag($flag, $entity_id, $account, $flagging) {
if (module_exists('commons_activity_streams') && $flag->name == 'commons_follow_user') {
$followed_user = user_load($entity_id);
if (!$followed_user->status) {
return;
}
if (commons_follow_user_existing_follow_message($account->uid, array(
$followed_user->uid,
))) {
return;
}
$message = message_create('commons_follow_user_user_followed', array(), $account);
$wrapper = entity_metadata_wrapper('message', $message);
$wrapper->field_target_users[] = $followed_user->uid;
$wrapper
->save();
}
}
function commons_follow_user_existing_follow_message($acting_uid, $target_uids) {
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'message', '=')
->propertyCondition('uid', $acting_uid)
->propertyCondition('type', 'commons_follow_user_user_followed', '=')
->fieldCondition('field_target_users', 'target_id', $target_uids, 'IN')
->execute();
return !empty($query->ordered_results);
}
function commons_follow_user_commons_follow_get_message_ids(&$followed_mids, $followed_content = array()) {
if (empty($followed_content['commons_follow_user'])) {
return;
}
$result = db_query("SELECT m.mid AS mid\n FROM {message} m\n LEFT JOIN {field_data_field_target_users} tu ON m.mid=tu.entity_id\n WHERE tu.field_target_users_target_id IN(:uids)\n OR m.uid IN (:uids)", array(
':uids' => array_values($followed_content['commons_follow_user']),
));
foreach ($result as $this_result) {
$followed_mids[] = $this_result->mid;
}
}