Exemplo n.º 1
0
/**
 * Напрямую установить номер сообщества при своей сортировке в звкладке "Я вступил".
 * 
 * @param int    $sCommId  сообщество котоое перемещаем
 * @param int    $nOldNum  текущий номер сообщества
 * @param int    $nNum     номер который желаем присвоить
 * @param int    $total    общее количество сообществ
 * @param string $group_id код группы для перерисовки списка в случае успеха
 * @param string $sub_om   код дополнительного условия сортировки или вкладки для перерисовки списка в случае успеха
 * @param int    $page     номер страницы для перерисовки списка в случае успеха
 *
 * @return object xajaxResponse
 */
function CommuneSetPosition($sCommId = '', $nOldNum = 0, $nNum = 0, $total = 0, $group_id = 0, $sub_om = '', $page = 1)
{
    global $session;
    session_start();
    $objResponse = new xajaxResponse();
    $sUserId = get_uid(false);
    if ($sCommId && $sUserId && !intval($nNum)) {
        $objResponse->script("\$('commune_set_order_{$sCommId}').setStyle('display', 'none');");
        $objResponse->assign('position_time_' . $sCommId, 'value', '');
        return $objResponse;
    }
    if (commune::CommuneSetPosition($sCommId, $sUserId, $nOldNum, $nNum, $total)) {
        // была перенумерация: обновляем список
        $group_id = $group_id ? $group_id : null;
        return CommuneGetList($group_id, $sub_om, $page);
    }
    // перенумерации не было: просто закрываем попап
    $objResponse->script("\$('commune_set_order_{$sCommId}').setStyle('display', 'none');");
    $objResponse->assign('position_time_' . $sCommId, 'value', '');
    return $objResponse;
}
Exemplo n.º 2
0
 /**
  * Напрямую установить номер сообщества при своей сортировке в звкладке "Я вступил"
  *
  * @param  int $sCommId сообщество котоое перемещаем
  * @param  int $sUserId текущий юзер
  * @param  int $nCurrNum текущий номер сообщества
  * @param  int $nNum номер который желаем присвоить
  * @param  int $nTotal общее количество сообществ
  * @return bool true on sussess or false on failure
  */
 function CommuneSetPosition($sCommId = '', $sUserId = '', $nCurrNum = 0, $nNum = 0, $nTotal = 0)
 {
     $nNum = intval($nNum);
     if (!$sCommId || !$sUserId || !$nCurrNum || !$nNum) {
         // ошибка ввода
         return false;
     }
     if ($nNum < 1) {
         // желаем присвоить номер 0 или еще меньше
         return false;
     }
     $nNum = $nNum > $nTotal ? $nTotal : $nNum;
     if ($nNum == $nCurrNum) {
         // мы желаем присвоить такой же номер как был - нечего менять
         return false;
     }
     global $DB;
     $nLimit = 2;
     $nOffset = $nCurrNum > $nNum ? $nNum - 1 : $nNum;
     $nOffset--;
     if ($nOffset < 0) {
         $nOffset = 0;
         $nLimit = 1;
     }
     $sQuery = "SELECT COALESCE(position_time, accepted_time) AS pos \n            FROM commune_members WHERE user_id = ? AND is_accepted = true  AND is_deleted = false AND is_banned = false \n            ORDER BY pos DESC LIMIT {$nLimit} OFFSET {$nOffset}";
     $aRows = $DB->rows($sQuery, $sUserId);
     if ($DB->error) {
         // ошибка
         return false;
     }
     $nCnt = count($aRows);
     if ($nCnt) {
         if ($nCnt > 1) {
             // получили 2 строки: вычисляем середину и присваем ее сообществу
             $nStart = strtotime($aRows[0]['pos']);
             $nEnd = strtotime($aRows[1]['pos']);
             $nMiddle = ceil(($nStart + $nEnd) / 2);
             $sDate = date('Y-m-d H:i:s', $nMiddle);
             if ($sDate == $aRows[0]['pos'] || $sDate == $aRows[1]['pos']) {
                 // даты сомкнулись: требуется пересчет позиций
                 if (commune::CommuneCalculatePositions($sUserId)) {
                     return commune::CommuneSetPosition($sCommId, $sUserId, $nNum);
                 } else {
                     // не пересчитали
                     return false;
                 }
             }
         } else {
             // поместить в начало либо в конец списка
             $sDate = $nCurrNum > $nNum ? date('Y-m-d H:i:s') : date('Y-m-d H:i:s', strtotime($aRows[0]['pos'] . ' -1 week'));
         }
         $sQuery = 'UPDATE commune_members SET position_time = ? WHERE commune_id = ? AND user_id = ?';
         $DB->query($sQuery, $sDate, $sCommId, $sUserId);
         if ($DB->error) {
             // ошибка
             return false;
         }
     } else {
         // ошибка
         return false;
     }
     return true;
 }