/**
 * Массовое утверждение записей
 * 
 * @param  int $content_id идентификатор сущности из admin_contents
 * @param  string $stream_id идентификатор потока
 * @param  string $sid JSON строка с массивом идентификаторов записей
 * @param  string $user_id JSON строка с массивом UID авторов записей
 * @param  int $content_cnt количество записей в потоке
 * @param  int $status статус сущностей: 0 - для модерирования, 1 - утвержденные, 2 - удаленные
 * @param  string $is_sent JSON строка с массивом флагов было ли отправлено уведомление
 * @return object xajaxResponse
 */
function massApproveContent($content_id = 0, $stream_id = '', $sid = '', $user_id = '', $content_cnt = 0, $status = 0, $is_sent = '')
{
    global $user_content;
    $objResponse = new xajaxResponse();
    $objResponse->script('user_content.spinner.hide(true);');
    if ($user_content->hasContentPermissions($content_id) && $status != 1) {
        $aStream = array();
        $checkStream = $user_content->checkStream($content_id, $stream_id, $_SESSION['uid'], $aStream);
        if ($checkStream) {
            $aSid = _jsonArray($sid);
            $aUid = _jsonArray($user_id);
            $aSend = _jsonArray($is_sent);
            $nSid = count($aSid);
            if (is_array($aSid) && $nSid && is_array($aUid) && count($aUid) && is_array($aSend) && count($aSend) && $nSid == count($aUid) && $nSid == count($aSend)) {
                for ($i = 0; $i < $nSid; $i++) {
                    list($rec_content_id, $rec_id, $rec_type) = explode('_', $aSid[$i]);
                    $user_content->resolveContent($stream_id, $_SESSION['uid'], $aUid[$i], $rec_content_id, $rec_id, $rec_type, 1, $aSend[$i]);
                    $content_cnt--;
                    $objResponse->script("\$('my_div_content_{$sid}').destroy();");
                }
                $user_content->checkStream($content_id, $stream_id, $_SESSION['uid'], $aStream, $nSid);
                if (!$status) {
                    $nLimit = user_content::CONTENTS_PER_PAGE - $content_cnt;
                    if ($content_id != user_content::MODER_MSSAGES) {
                        $user_content->chooseContent($content_id, $stream_id, $aStream['stream_num'], $nLimit);
                    } elseif (!$status && $content_cnt < user_content::MESSAGES_PER_PAGE) {
                        $user_content->chooseContent(1, $stream_id, $aStream['stream_num'], user_content::MESSAGES_PER_PAGE);
                    }
                    $nLimit = $content_id == user_content::MODER_MSSAGES ? user_content::MESSAGES_PER_PAGE : user_content::CONTENTS_PER_PAGE;
                    _parseContents($objResponse, $aStream, $content_id, $user_content->getContent($content_id, $stream_id, 0, 0, $nLimit));
                }
                $objResponse->script("parent.\$('span_num_{$stream_id}').set('html', '#{$aStream['title_num']}')");
            }
            $objResponse->script("parent.\$('check_{$stream_id}').set('checked', false)");
            $objResponse->script("\$(user_content.scrollWindow).scrollTo(0, user_content.scrollPosition);");
        } else {
            _loseStream($objResponse, $stream_id);
        }
    } else {
        _parsePermissionsDenied($objResponse);
    }
    $objResponse->script('user_content.spinner.resize();');
    return $objResponse;
}
/**
 * Редактирование предложений фрилансеров Сделаю
 * 
 * @param  string $sId идентификатор записи
 * @param  int $nEdit флаг редактирования
 * @param  array $aForm данные формы редактирования
 * @param  string $sDrawFunc имя функции для выполнения после сохранения
 * @param  string $sParams JSON кодированные дополнительные параметры
 * @return xajaxResponse 
 */
function admEditSdelau($sId = '', $nEdit = 0, $aForm = array(), $sDrawFunc = '', $sParams = '')
{
    session_start();
    $objResponse = new xajaxResponse();
    if (hasPermissions('projects')) {
        list($rec_id, $rec_type) = explode('_', $sId);
        $aParams = _jsonArray($sParams);
        if ($sDrawFunc == 'stream0' || $sDrawFunc == 'stream1' || $sDrawFunc == 'stream2') {
            if (!_admEditBeforeStreams($objResponse, $nEdit, $aForm, $aParams, user_content::MODER_SDELAU, $sId, $sDrawFunc)) {
                return $objResponse;
            }
        }
        if ($nEdit) {
            _admEditSdelauSaveForm($objResponse, $rec_id, $rec_type, $aForm, $sDrawFunc);
        } else {
            _admEditSdelauParseForm($objResponse, $rec_id, $rec_type, $aParams);
        }
    }
    return $objResponse;
}
/**
 * Активирует пользователей.
 * 
 * @param string $sUsers  JSON строка с массивом UID пользователей
 * @param int    $nReload 1 - если нужно перезагрузить страницу
 *
 * @return object xajaxResponse
 */
function activateUser($sUsers = '', $nReload = 0)
{
    session_start();
    $objResponse = new xajaxResponse();
    if (hasPermissions('users')) {
        $aUsers = _jsonArray($sUsers);
        if ($aUsers) {
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/wizard_registration.php';
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_employer.php';
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_freelancer.php';
            foreach ($aUsers as $sUid) {
                if (users::SetActiveByUid($sUid)) {
                    $user = new users();
                    $user->GetUserByUID($sUid);
                    if ($user->role[0] == 1) {
                        $wiz_user = wizard::isUserWizard($sUid, step_employer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_EMP_ID);
                    } else {
                        $wiz_user = wizard::isUserWizard($sUid, step_freelancer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_FRL_ID);
                    }
                    step_wizard::setStatusStepAdmin(step_wizard::STATUS_COMPLITED, $sUid, $wiz_user['id']);
                    $objResponse->script("\$('activate_{$sUid}').set('html','');");
                }
            }
            $objResponse->script('adminLogCheckUsers(false)');
            $objResponse->script('$("chk_all").checked=false;');
        }
        if ($nReload) {
            $objResponse->script('window.location.reload(true)');
        }
    }
    return $objResponse;
}
/**
 * Сохраняет жалобу на спам в личных сообщениях
 * 
 * @param  string $sSpamerId UID спамера
 * @param  string $sUserId UID пожаловавшегося пользователя
 * @param  string $sParams JSON строка с массивом параметров жалобы на спам
 * @return object xajaxResponse
 */
function sendSpamComplaint($sSpamerId = '', $sUserId = '', $sParams = '')
{
    session_start();
    $objResponse = new xajaxResponse();
    $aParams = _jsonArray($sParams);
    if ($sSpamerId && $sUserId && $aParams) {
        require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/messages_spam.php";
        $oSpam = new messages_spam();
        $bSpam = $oSpam->addSpamComplaint($sSpamerId, $sUserId, $aParams);
        if ($bSpam) {
            $objResponse->assign('mess_spam_' . $aParams['num'], 'innerHTML', messages_spam::COMPLAINT_PENDING_TXT);
        } else {
            $objResponse->alert('Ошибка сохранения жалобы');
        }
        $objResponse->script("\$('spam_complaint_popup').setStyle('display','none');");
    }
    return $objResponse;
}
/**
 * Изменение редактирования пользователя
 * 
 * @param  string $sUsers      JSON строка с массивом UID пользователей
 * @param  int    $nActId      ID действия из admin_actions (1, 2)
 * @param  int    $sWarnId     ID предупреждения при редактировании/снятии
 * @param  string $reasonId    ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 1,2)
 * @param  string $reasonName  НЕ ИСПОЛЬЗУЕТСЯ. Краткое описание причины действия (из селекта)
 * @param  string $reasonText  Текст причины
 * @param  string $draw_func   способ отображения
 * @param  string $sContext    Контекст (для лога админских действий)
 * @return object xajaxResponse
 */
function updateUserWarn($sUsers = '', $nActId, $sWarnId = 0, $reasonId = null, $reasonName, $reasonText, $draw_func, $sContext = '')
{
    session_start();
    $objResponse = new xajaxResponse();
    if (hasPermissions('users')) {
        $reasonId = $reasonId ? $reasonId : null;
        $aContext = _jsonArray($sContext);
        $aContext = $aContext ? $aContext : array('uid' => '', 'code' => 0, 'link' => '', 'name' => '');
        $aUsers = _jsonArray($sUsers);
        $bCheck = true;
        if ($aContext['uid'] == 'moder') {
            global $user_content;
            $bCheck = $user_content->checkContent($aContext['contentId'], $aContext['streamId'], $aContext['recId']);
        }
        if ($bCheck && $aUsers && is_string($reasonText) && $reasonText != '') {
            require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
            $users = new users();
            foreach ($aUsers as $sUid) {
                $users->GetUserByUID($sUid);
                if ($users->uid) {
                    $sReason = str_replace('%USERNAME%', $users->uname . ' ' . $users->usurname, $reasonText);
                    $sReason = change_q($sReason, FALSE, 0, TRUE);
                    $sUniqId = "warnUser{$sUid}";
                    $sObjName = $users->uname . ' ' . $users->usurname . '[' . $users->login . ']';
                    $sObjLink = '/users/' . $users->login;
                    if ($nActId == 2 && $sWarnId) {
                        // снимаем предупреждение
                        $users->UnWarn($sWarnId);
                        // пишем лог админских действий
                        admin_log::addLog(admin_log::OBJ_CODE_USER, 2, $sUid, $sUid, $sObjName, $sObjLink, 0, '', $reasonId, $sReason);
                        $actFlag = -1;
                    } elseif ($nActId == 1 && $sWarnId) {
                        // редактируем предупреждение
                        admin_log::updateUserWarn($sWarnId, $sReason, $reasonId);
                        $actFlag = 0;
                    } elseif ($nActId == 1 && !$sWarnId && $users->warn < 3 && !$users->is_banned) {
                        $aUserContent = array();
                        $sUserContent = '';
                        if ($aContext['code'] == 2 && preg_match('#^blog_msg_([\\d]+)#', $aContext['uid'], $aMatch)) {
                            /*require_once( $_SERVER['DOCUMENT_ROOT'].'/classes/blogs.php' );
                             	$aUserContent = blogs::GetMsgInfo( $aMatch[1], $err, $perm );
                             	
                             	if ( $aUserContent ) {
                             		$sUserContent = $aContext['link'] . ($aUserContent['msgtext'] ? "\n\n" . $aUserContent['msgtext'] : '');
                             	}*/
                        }
                        // делаем предупреждение
                        $sNewWarnId = $users->Warn($users->login, $sReason, $reasonId, $aContext['link'], $sUserContent);
                        // пишем лог админских действий
                        admin_log::addLog(admin_log::OBJ_CODE_USER, 1, $sUid, $sUid, $sObjName, $sObjLink, $aContext['code'], $aContext['link'], $reasonId, $sReason, $sNewWarnId, $aContext['name']);
                        $actFlag = 1;
                    }
                    WarnsHTML($draw_func, $sUid, $users, $objResponse, $sUniqId, $aContext['uid'], $actFlag);
                }
            }
        }
        $objResponse->script("\$\$(\"div[id^='ov-notice']\").setStyle('display', 'none');");
        $objResponse->script("if(banned.reload==1){window.location.reload(true);}");
        $objResponse->script("if(banned.zero){banned.zeroShow();}");
        if ($aContext['uid'] == 'moder') {
            // если варнинг делается из потока модерирования
            $objResponse->script('user_content.resolveContent(user_content.resolveSid, 2, user_content.resolveUid)');
            $objResponse->script("parent.\$\$(\"div[id^='ov-notice']\").setStyle('display', 'none');");
        }
    }
    return $objResponse;
}