Example #1
0
 public static function Add($LOG_ID, $GROUP_CODE, $bShare = false, $followSet = true)
 {
     global $DB;
     if (is_array($GROUP_CODE)) {
         foreach ($GROUP_CODE as $GROUP_CODE_TMP) {
             CSocNetLogRights::Add($LOG_ID, $GROUP_CODE_TMP, $bShare, $followSet);
         }
         return false;
     } else {
         $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetLogRightsAdd");
         while ($arEvent = $db_events->Fetch()) {
             if (ExecuteModuleEventEx($arEvent, array($LOG_ID, $GROUP_CODE)) === false) {
                 return false;
             }
         }
         $NEW_RIGHT_ID = $DB->Add("b_sonet_log_right", array("LOG_ID" => $LOG_ID, "GROUP_CODE" => $GROUP_CODE), array(), "", true);
         if ($NEW_RIGHT_ID) {
             if (preg_match('/^U(\\d+)$/', $GROUP_CODE, $matches)) {
                 if ($followSet) {
                     CSocNetLogFollow::Set($matches[1], "L" . $LOG_ID, "Y", ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL", SITE_ID));
                 }
             } elseif ($bShare && preg_match('/^SG(\\d+)$/', $GROUP_CODE, $matches)) {
                 // get all members who unfollow and set'em unfollow from the date
                 $arUserIDToCheck = array();
                 $rsGroupMembers = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $matches[1], "USER_ACTIVE" => "Y", "<=ROLE" => SONET_ROLES_USER), false, false, array("USER_ID"));
                 while ($arGroupMembers = $rsGroupMembers->Fetch()) {
                     $arUserIDToCheck[] = $arGroupMembers["USER_ID"];
                 }
                 if (!empty($arUserIDToCheck)) {
                     $arUserIDFollowDefault = array("Y" => array(), "N" => array());
                     $arUserIDAlreadySaved = array();
                     $default_follow_type = COption::GetOptionString("socialnetwork", "follow_default_type", "Y");
                     $rsFollow = CSocNetLogFollow::GetList(array("USER_ID" => $arUserIDToCheck, "CODE" => "**"), array("USER_ID", "TYPE"));
                     while ($arFollow = $rsFollow->Fetch()) {
                         $arUserIDFollowDefault[$arFollow["TYPE"]][] = $arFollow["USER_ID"];
                     }
                     $rsFollow = CSocNetLogFollow::GetList(array("USER_ID" => $arUserIDToCheck, "CODE" => "L" . $LOG_ID), array("USER_ID"));
                     while ($arFollow = $rsFollow->Fetch()) {
                         $arUserIDAlreadySaved[] = $arFollow["USER_ID"];
                     }
                     foreach ($arUserIDToCheck as $iUserID) {
                         // for them who not followed by default and not already saved follow/unfollow for the log entry
                         if (!in_array($iUserID, $arUserIDAlreadySaved) && ($default_follow_type == "N" && !in_array($iUserID, $arUserIDFollowDefault["Y"]) || $default_follow_type == "Y" && in_array($iUserID, $arUserIDFollowDefault["N"]))) {
                             CSocNetLogFollow::Add($iUserID, "L" . $LOG_ID, "N", ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL", SITE_ID));
                         }
                     }
                 }
             }
         }
         if (defined("BX_COMP_MANAGED_CACHE")) {
             $GLOBALS["CACHE_MANAGER"]->ClearByTag("SONET_LOG_" . intval($LOG_ID));
         }
         return $NEW_RIGHT_ID;
     }
 }
Example #2
0
 function Set($user_id, $code = "**", $type = "Y", $follow_date = false, $site_id = SITE_ID)
 {
     static $LOG_CACHE;
     if (strlen($code) <= 0) {
         $code = "**";
     }
     if ($type != "Y") {
         $type = "N";
     }
     if (intval($user_id) <= 0) {
         $user_id = $GLOBALS["USER"]->GetID();
     }
     $arFollows = array();
     $rsFollow = CSocNetLogFollow::GetList(array("USER_ID" => $user_id, "CODE" => array_unique(array("**", $code))));
     while ($arFollow = $rsFollow->Fetch()) {
         $arFollows[$arFollow["CODE"]] = array("TYPE" => $arFollow["TYPE"], "FOLLOW_DATE" => $arFollow["FOLLOW_DATE"]);
     }
     if (array_key_exists("**", $arFollows)) {
         $default_type = $arFollows["**"]["TYPE"];
     } else {
         $default_type = COption::GetOptionString("socialnetwork", "follow_default_type", "Y");
     }
     if (preg_match('/^L(\\d+)$/', $code, $matches)) {
         $log_id = intval($matches[1]);
         if ($log_id > 0) {
             if (isset($LOG_CACHE[$log_id])) {
                 $arLog = $LOG_CACHE[$log_id];
             } else {
                 $rsLog = CSocNetLog::GetList(array("ID" => "DESC"), array("ID" => $log_id), false, false, array("ID", "LOG_UPDATE", "LOG_DATE"), array("CHECK_RIGHTS" => "N", "USE_SUBSCRIBE" => "N", "USE_FOLLOW" => "N"));
                 if ($arLog = $rsLog->Fetch()) {
                     $LOG_CACHE[$log_id] = $arLog;
                 }
             }
             if ($arLog) {
                 $log_date = strlen($arLog["LOG_DATE"]) > 0 ? $arLog["LOG_DATE"] : false;
                 $log_update = strlen($arLog["LOG_UPDATE"]) > 0 ? $arLog["LOG_UPDATE"] : false;
                 if (array_key_exists($code, $arFollows)) {
                     // already in the follows table
                     $res = CSocNetLogFollow::Update($user_id, $code, $type, strlen($arFollows[$code]["FOLLOW_DATE"]) > 0 ? $arFollows[$code]["FOLLOW_DATE"] : ($type == "N" ? $log_update : $log_date));
                 } elseif ($type != $default_type) {
                     // new record in the follow table only if not equal to default type
                     $res = CSocNetLogFollow::Add($user_id, $code, $type, $follow_date ? $follow_date : ($type == "N" ? $log_update : $log_date));
                 }
             }
         }
     } else {
         if (array_key_exists($code, $arFollows)) {
             $res = CSocNetLogFollow::Update($user_id, $code, $type, false);
         } else {
             $res = CSocNetLogFollow::Add($user_id, $code, $type, false);
         }
     }
     return $res;
 }