Exemple #1
0
function mmb_isOn($var, $key)
{
    return mmb_validate($var, $key, '') == 'on' ? 1 : 0;
}
Exemple #2
0
        $SessionId = StartSession($UserId);
    }
    $changepasswordsessionid = "";
    $action = "";
} elseif ($action == "UserLogout") {
    // Выход
    CloseSession($SessionId, 3);
    $SessionId = "";
    $action = "";
    $view = "MainPage";
} elseif ($action == "CancelChangeUserData") {
    // Действие вызывается ссылкой Отмена
    CMmb::setViews('ViewUserData', '');
} elseif ($action == "FindUser") {
    // Действие вызывается поиском участника
    $FindString = mmb_validate($_POST, 'FindString', '');
    if (trim($FindString) == '' or trim($FindString) == 'Часть ФИО') {
        CMmb::setShortResult('Не указан критерий поиска.', '');
        return;
    }
    if (trim($FindString) == 'все-все' or trim($FindString) == 'все-все-все') {
        $sqlFindString = '';
    } else {
        $sqlFindString = trim($FindString);
    }
    $sql = "select count(*) as FindUsersCount\n\t\t        from  Users u\n\t\t\twhere ltrim(COALESCE(u.user_password, '')) <> '' \n                              and u.user_hide = 0 \n\t\t\t      and COALESCE(u.user_noshow, 0) = 0\n                              and user_name like '%{$sqlFindString}%'";
    //echo 'sql '.$sql;
    if (CSql::singleValue($sql, 'FindUsersCount') > 0) {
        $view = "ViewUsers";
    } else {
        CMmb::setShortResult('Не найдено пользователей, чьи ФИО содержат ' . trim($FindString), '');
Exemple #3
0
}
print "Типы сообщений: <select name=\"levels[]\" size=\"6\" multiple style=\"margin-left: 10px; margin-right: 5px; vertical-align: top;\"\n            onchange=\"document.LogsForm.submit();\">";
foreach ($allLevels as $lev) {
    $sel = in_array($lev, $levels) ? ' selected="selected"' : '';
    print "<option value=\"{$lev}\"{$sel}>{$lev}</option>\n";
}
print "</select>\n\n";
// фильтруем кол-во ошибок и печатаем селект
$limit = mmb_validateInt($_REQUEST, 'num_rec', 100);
print 'Количество: <select name="num_rec" style="margin-left: 10px; margin-right: 5px;" onchange="document.LogsForm.submit();">';
foreach (array(100, 500, 1000, 5000) as $lim) {
    $sel = $lim == $limit ? ' selected="selected"' : '';
    print "<option value=\"{$lim}\"{$sel}>{$lim}</option>\n";
}
print "</select>\n";
$searchVal = ReverseEscapeString(mmb_validate($_REQUEST, 'search', ''));
print "<input type=\"text\" placeholder=\"Искать\" name=\"search\" onchange=\"document.LogsForm.submit()\" style=\"margin-left: 2em;\" value='" . CMmbUI::toHtml($searchVal) . "'/>";
print "</div>\n";
$cond = count($levels) == 0 ? 'true' : "logs_level in ('" . implode("', '", $levels) . "')";
if ($searchVal == '') {
    $searchCond = 'true';
} else {
    $search = array("%", "_", "[", "]");
    $replace = array("\\%", "\\_", "\\[", "\\]");
    $searchVal = str_replace($search, $replace, $searchVal);
    $searchCond = "logs_message like(" . CSql::quote("%{$searchVal}%") . ")";
}
$sql = "select logs_id, logs_level, user_id, logs_operation, logs_message, logs_dt, logs_duration from Logs \n        where {$cond} and {$searchCond} \n        order by logs_id desc \n        limit {$limit}";
$Result = MySqlQuery($sql);
print "<table class='std'>\n";
print "<tr class='gray head'><th>#</th><th width='50'>id</th><th>Время</th><th>Уровень</th><th>Пользователь</th><th>Операция</th><th>Сообщение</th><th>Длительность</th></tr>\n";
Exemple #4
0
        }
        mysql_free_result($result);
    }
    function GetTeamPlace($teamId)
    {
        return isset($this->teamPlaces[$teamId]) ? $this->teamPlaces[$teamId] : 0;
    }
    function GetUserDistance($userId, $distanceId)
    {
        return isset($this->userDistance[$userId]) && isset($this->userDistance[$userId][$distanceId]) ? $this->userDistance[$userId][$distanceId] : null;
    }
}
$TabIndex = 0;
/*print('<form  name="RankUsersForm"  action="'.$MyPHPScript.'" method="post">'."\r\n");
	print('<input type="hidden" name="action" value="">'."\r\n");*/
$ShowAllRaids = mmb_validate($_GET, 'rating', '') == 'all';
$js = "window.location.search = '?rating' + (this.checked ? '=all' : ''); ";
print 'Отображать все марш-броски (долгая загрузка) <input type="checkbox"  autocomplete="off" name="ShowAllRaids" ' . ($ShowAllRaids ? 'checked="checked"' : '') . ' tabindex="' . ++$TabIndex . '"
		title="Отображать все марш-броски" onchange="' . $js . '" />' . "\r\n";
//print('</form>'."\r\n");
print '<br/><br/>' . "\r\n";
print '<div style="margin-top: 15px; max-width: 1500px;" align="left">Рейтинг по версии slazav: по всем ММБ суммируется отношение времени лидера к времени участника.
	       <br/>Для марш-бросков с несколькими дистанциями это отношение дополнительно умножается на отношение  длины текущей дистанции к максимальной  из длин дистанций.
	        Рейтинг участника марш-броска не рассчитывается в следующих случаях: 1) команда вне зачёта; 2) команда не финишировала; 3) участник сошёл с дистанции.
	        Для марш-бросков до 2012 года сход участников не отражён в данных - можно сообщать о неточностях на общий адрес или в сообщество (ЖЖ)
	       </div>' . "\r\n";
print '<br/>' . "\r\n";
// Возможно здесь нужно вызвать пересчёт рейтинга по всем ММБ и это не долго
// RecalcTeamUsersRank(0);
$sql = "select tu.user_id, CASE WHEN COALESCE(u.user_noshow, 0) = 1 THEN '{$Anonimus}' ELSE u.user_name END as user_name,  SUM(tu.teamuser_rank) as userrank,\n\t                   COUNT(tu.teamuser_id) as userrankcount,\n\t\t\t   0 as distance_id, '&nbsp;' as distance_name,  'Итог' as raid_name,\n\t\t\t   '&nbsp;' as team_num, '&nbsp;' as team_name\n\t            from  TeamUsers tu\n\t\t          inner join Users u\n\t\t\t  on u.user_id = tu.user_id\n\t\t          inner join Teams t\n\t\t\t  on t.team_id = tu.team_id\n\t\t          inner join Distances d\n\t\t\t  on t.distance_id = d.distance_id\n\t\t    where d.distance_hide = 0\n\t\t\t  and t.team_hide = 0\n\t\t          and  COALESCE(t.team_outofrange, 0) = 0\n\t\t          and  COALESCE(t.team_result, 0) > 0\n\t\t\t  and  COALESCE(tu.teamuser_rank, 0) > 0\n\t\t    group by tu.user_id\n\t\t    order by userrank DESC\n\t\t  ";
/*
Exemple #5
0
         // Точка уже есть и пользователь сошёл - обновляем точку
         $sql = "update TeamLevelDismiss set levelpoint_id = {$LevelPointId} where teamleveldismiss_id = {$DismissId}";
         $rs = MySqlQuery($sql);
     } else {
         // Точки нет, а пользователь сошёл - создаём точку
         $sql = "insert into TeamLevelDismiss (teamuser_id, levelpoint_id, device_id) \n\t\t\t        values ({$HideTeamUserId}, {$LevelPointId}, 1) ";
         $rs = MySqlQuery($sql);
     }
 } else {
     if ($DismissId) {
         // Точка есть, а пользователь не сошёл - удаляем точку
         $sql = "delete from TeamLevelDismiss where teamleveldismiss_id = {$DismissId}";
         $rs = MySqlQuery($sql);
     } else {
         // ТОчка нет и пользователь не сошёл - ничего не делаем
         $view = mmb_validate($_POST, 'view', 'ViewTeamData');
         return;
     }
 }
 // Конец разбора возможных ситуаций со сходами и наличием точки в TeamLevelDismiss
 /*
 	$sql = "update TeamUsers set levelpoint_id = ".($LevelPointId > 0 ? $LevelPointId : 'null' )." where teamuser_id = ".$HideTeamUserId;
 	$rs = MySqlQuery($sql);
 	$view = "ViewTeamData";
 */
 // Письмо об изменениях	всем, кроме автора изменений
 // !!! Сход относится к результатам на дистанции и об их изменений письма слать не надо
 $ChangeDataUserName = CSql::userName($UserId);
 $sql = "select u.user_email, u.user_name, t.team_num, d.distance_name, r.raid_name\n\t\tfrom Users u\n\t\t\tinner join TeamUsers tu on tu.user_id = u.user_id\n\t\t\tinner join Teams t on tu.team_id = t.team_id\n\t\t\tinner join Distances d on t.distance_id = d.distance_id\n\t\t\tinner join Raids r on d.raid_id = r.raid_id\n\t\twhere tu.teamuser_hide = 0 and tu.team_id = {$TeamId} and u.user_id <> {$UserId}\n\t\torder by tu.teamuser_id asc";
 $Result = MySqlQuery($sql);
 while ($Row = mysql_fetch_assoc($Result)) {
Exemple #6
0
print "</td></tr>\n";
// Информация о дистанции(ях)
$sql = "SELECT d.distance_name, d.distance_data, d.distance_id FROM Distances d WHERE d.distance_hide = 0 AND d.raid_id = {$RaidId}";
$Result = MySqlQuery($sql);
while ($Row = mysql_fetch_assoc($Result)) {
    ShowDistanceHeader($RaidId, $Row['distance_id'], $Row['distance_name'], $Row['distance_data'], $lottery_count, $colspan);
}
mysql_free_result($Result);
// ============ Вывод списка команд ===========================
// Выводим список команд
if ($OrderType == 'Num') {
    // Сортировка по номеру (в обратном порядке)
    $sql = "select t.team_num, t.team_id, t.team_usegps, t.team_name, t.team_greenpeace,\n \t\t\t               t.team_mapscount,  d.distance_name, d.distance_id,\n\t\t\t       \t\t\tCOALESCE(t.team_outofrange, 0) as  team_outofrange,\n\t\t\t\t\t\tCOALESCE(t.team_dismiss, 0) as  team_dismiss\n\t        \tfrom  Teams t\n\t\t    \t\t\tinner join  Distances d on t.distance_id = d.distance_id\n\t\t\t\twhere d.distance_hide = 0 and t.team_hide = 0 and d.raid_id = {$RaidId}\n\t\t\t\t\t\tand {$DistanceCondition} and {$GpsCondition}\n\t\t\t\torder by team_num desc";
} elseif ($OrderType == 'Place') {
    // Сортировка по месту требует более хитрого запроса
    $levelPointId = mmb_validate($_REQUEST, 'LevelPointId', '');
    if (!empty($levelPointId)) {
        $LevelCondition = "tlp.levelpoint_id = {$levelPointId}";
        $sql = "select t.team_num, t.team_id, t.team_usegps, t.team_name, t.team_greenpeace,\n\t\t\t               t.team_mapscount, lp.levelpoint_order as team_progress,\n\t\t\t               CASE WHEN COALESCE(t.team_minlevelpointorderwitherror, 0) > lp.levelpoint_order THEN 0 ELSE COALESCE(t.team_minlevelpointorderwitherror, 0) END as team_error,\n\t\t\t\t\t       d.distance_name, d.distance_id,\n\t                       TIME_FORMAT(tlp.teamlevelpoint_result, '%H:%i') as team_sresult,\n\t\t\t\t\t       COALESCE(t.team_outofrange, 0) as  team_outofrange,\n\t\t\t\t\t       COALESCE(t.team_dismiss, 0) as  team_dismiss,\n\t\t\t\t\t       COALESCE(t.team_donelevelpoint, COALESCE(lp.levelpoint_name, '')) as levelpoint_name,\n\t\t\t\t\t       COALESCE(t.team_comment, '') as team_comment /*,\n\t\t\t\t\t       COALESCE(t.team_skippedlevelpoint, '') as team_skippedlevelpoint */\n\t\t\t\t\tfrom  Teams t\n\t\t\t\t\t\t\tinner join  Distances d\ton t.distance_id = d.distance_id\n\t\t\t\t\t\t\tinner join  TeamLevelPoints tlp\ton t.team_id = tlp.team_id\n       \t\t\t\t\t\tinner join LevelPoints lp on tlp.levelpoint_id = lp.levelpoint_id\n\t\t\t\t  \twhere t.team_hide = 0 and {$LevelCondition} and {$GpsCondition}\n\t\t\t\t    order by distance_name, team_outofrange, team_progress desc, team_error asc, tlp.teamlevelpoint_result asc, team_num asc ";
    } else {
        $sql = "select t.team_num, t.team_id, t.team_usegps, t.team_name, t.team_greenpeace,\n\t\t\t               t.team_mapscount, t.team_maxlevelpointorderdone as team_progress,\n\t\t\t               COALESCE(t.team_minlevelpointorderwitherror, 0) as team_error,\n\t\t\t\t\t       d.distance_name, d.distance_id,\n\t\t\t               TIME_FORMAT(t.team_result, '%H:%i') as team_sresult,\n\t\t\t\t\t       COALESCE(t.team_outofrange, 0) as  team_outofrange,\n\t\t\t\t\t       COALESCE(t.team_dismiss, 0) as  team_dismiss,\n\t\t\t\t\t       COALESCE(t.team_donelevelpoint, COALESCE(lp.levelpoint_name, '')) as levelpoint_name,\n\t\t\t\t    \t   COALESCE(t.team_comment, '') as team_comment /*,\n\t\t\t\t\t\t   COALESCE(t.team_skippedlevelpoint, '') as team_skippedlevelpoint */\n\t\t\t\t\t  from  Teams t\n\t\t\t\t\t\t\tinner join  Distances d\ton t.distance_id = d.distance_id\n\t\t\t\t\t\t\tleft outer join LevelPoints lp\n\t\t\t\t\t\t\ton lp.distance_id = t.distance_id\n\t\t\t\t\t   \t\t\tand lp.levelpoint_order = t.team_maxlevelpointorderdone\n\t\t\t\t  \t  where d.distance_hide = 0 and t.team_hide = 0 and d.raid_id = {$RaidId}\n\t\t\t\t  \t\t\tand {$DistanceCondition} and {$GpsCondition}\n\t\t\t          order by distance_name, team_outofrange, team_progress desc, team_error asc, team_result asc, team_num asc ";
    }
    $skpd = microtime(true);
    $skippedPoints = GetAllSkippedPoints($RaidId, $levelPointId);
    $skpd = microtime(true) - $skpd;
    $skpd0 = $skippedPoints['__time__'];
    //$skpd0 = 0;
    // Конец проверки, задана ли точка фильтрации
} elseif ($OrderType == 'Errors') {
    // Не знаю, как будет реализовано
    $sql = "select  t.team_num, t.team_id, t.team_usegps, t.team_name, t.team_greenpeace,\n\t\t\t                t.team_mapscount, COALESCE(t.team_maxlevelpointorderdone, 0) as team_progress,\n\t\t\t                COALESCE(t.team_minlevelpointorderwitherror, 0) as team_error,\n\t\t\t\t\t        d.distance_name, d.distance_id,\n                            TIME_FORMAT(t.team_result, '%H:%i') as team_sresult,\n\t\t\t\t\t\t\tCOALESCE(t.team_outofrange, 0) as  team_outofrange,\n\t\t\t\t\t\t\tCOALESCE(t.team_dismiss, 0) as  team_dismiss,\n\t\t\t       \t\t\tCOALESCE(lp.levelpoint_name, '') as levelpoint_name,\n\t\t\t       \t\t\tCONCAT_WS(' Комментарий: ', COALESCE(errt.errcomment, ''), COALESCE(t.team_comment, '')) as team_comment\n\t\t\t  \t\tfrom  Teams t\n\t\t\t\t\t\t\tinner join\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tselect tlp.team_id,\n\t\t\t\t\t\t\t\tGROUP_CONCAT(CONCAT_WS(' - ', lp.levelpoint_name, err.error_name) ORDER BY lp.levelpoint_order, ' ') as errcomment\n\t\t\t\t  \t\t\t\tfrom TeamLevelPoints tlp\n\t\t\t\t  \t\t\t\t     inner join LevelPoints lp\n\t\t\t\t  \t\t\t\t     on tlp.levelpoint_id = lp.levelpoint_id\n\t\t\t\t  \t\t\t\t     inner join Errors err\n\t\t\t\t  \t\t\t\t     on tlp.error_id = err.error_id\n\t\t\t\t\t\t\t\twhere COALESCE(tlp.error_id, 0) <> 0\n\t\t\t\t  \t\t\t\tgroup by tlp.team_id\n\t\t\t\t\t\t\t\t) errt\n\t\t\t\t\t\t\ton t.team_id = errt.team_id\n\t\t\t\t\t\t\tinner join  Distances d\n\t\t\t\t\t\t\ton t.distance_id = d.distance_id\n\t\t\t\t\t\t\tleft outer join LevelPoints lp\n\t\t\t\t\t\t\ton lp.distance_id = t.distance_id\n\t\t\t\t   \t\t\t\tand lp.levelpoint_order = t.team_maxlevelpointorderdone\n\t\t\t  \t\twhere d.distance_hide = 0 and t.team_hide = 0 and d.raid_id = {$RaidId}\n\t\t\t  \t\t\t\tand {$DistanceCondition}\n\t\t\t        order by distance_name, team_outofrange, team_progress desc, team_error asc, team_result asc, team_num asc ";
Exemple #7
0
    error_reporting(E_ALL);
} else {
    ini_set('display_errors', 1);
    error_reporting(E_ERROR);
}
// Пробегаем помассивам POST GET REQUEST COOKIE  и чистим возможные sql инъекции и мусор
ClearArrays();
// Устанавливаем часовой пояс по умолчанию
date_default_timezone_set("Europe/Moscow");
// Флаг ошибки (1 - цвет текста statustext становится красным и всплывает окно с сообщением)
// и текст, который выводится в статусную строку (под логотип)
$alert = 0;
$statustext = "";
//"Сегодня: ".date("d.m.Y")."  &nbsp; Время: ".date("H:i:s");
// Инициализируем права доступа пользователя
$SessionId = mmb_validate($_COOKIE, CMmb::CookieName, '');
$OldSessionId = $SessionId;
$RaidId = (int) mmb_validateInt($_REQUEST, 'RaidId', 0);
$TeamId = (int) mmb_validateInt($_REQUEST, 'TeamId', 0);
$DistanceId = (int) mmb_validateInt($_REQUEST, 'DistanceId', 0);
// 21/03/2016  получаем $UserId из сессии.
// эта инициализация сейчас перекрываетвя в GetPrivileges, но есдли в будующем захочется отказаться от GetPrivileges
// то полезно пользователя определять здесь и остальные необходимые операции тоже здесь делать
$UserId = (int) CSql::userId($SessionId);
// обновляем данные сессии (удаляем закрытые, пишем в cookies
UpdateSession($SessionId);
// 27/12/2013 Заменил на сортировку по ключу
// Находим последний ММБ, если ММБ не указан, чтобы определить привелегии
if (empty($RaidId)) {
    //GetPrivileges($SessionId, $RaidId, $TeamId, $UserId, $Administrator, $TeamUser, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange);
    $orderBy = CSql::userAdmin($UserId) ? 'raid_id' : 'raid_registrationenddate';
Exemple #8
0
 }
 // Получаем информацию об этапах, которые могла проходить команда
 $sql = "select l.level_id, l.level_name, l.level_pointnames, l.level_starttype, l.level_pointpenalties,\n\t\tl.level_begtime, l.level_maxbegtime, l.level_minendtime, l.level_endtime,\n\t\ttl.teamlevel_begtime, tl.teamlevel_endtime,\n\t\ttl.teamlevel_points, tl.teamlevel_progress, tl.teamlevel_penalty,\n\t\ttl.teamlevel_id\n\t\tfrom Teams t\n\t\t\tinner join Distances d on t.distance_id = d.distance_id\n\t\t\tinner join Levels l on d.distance_id = l.distance_id\n\t\t\tleft outer join TeamLevels tl on l.level_id = tl.level_id and t.team_id = tl.team_id and tl.teamlevel_hide = 0\n\t\twhere l.level_hide = 0  and t.team_id = {$TeamId}";
 $rs = MySqlQuery($sql);
 // ================ Цикл обработки данных по этапам
 $statustext = "";
 while ($Row = mysql_fetch_assoc($rs)) {
     // По этому ключу потом определяем, есть ли уже строчка в TeamLevels или её нужно создать
     $TeamLevelId = $Row['teamlevel_id'];
     $levelPfx = 'Level' . $Row['level_id'];
     // Обрабатываем сход с этапа
     $TeamLevelProgress = mmb_validateInt($_POST, $levelPfx . '_progress', 0);
     // Вычисляем время выхода на этап
     $BegYear = mmb_validate($_POST, $levelPfx . '_begyear', '');
     $BegDate = mmb_validate($_POST, $levelPfx . '_begdate', '');
     $BegTime = mmb_validate($_POST, $levelPfx . '_begtime', '');
     $BegYDTs = CSql::timeString($BegYear, $BegDate, $BegTime);
     // Конвертируем в даты php для сравнения
     $BegYDT = strtotime(substr(trim($BegYDTs), 1, -1));
     $BegMinYDT = strtotime(substr(trim($Row['level_begtime']), 1, -1));
     $BegMaxYDT = strtotime(substr(trim($Row['level_maxbegtime']), 1, -1));
     // Обнуляем время старта, если он не в порядке готовности
     if ($Row['level_starttype'] != 1) {
         $BegYDTs = "NULL";
     } else {
         if ($BegYDT < $BegMinYDT or $BegYDT > $BegMaxYDT) {
             if ($TeamLevelProgress > 0) {
                 $statustext = $statustext . "</br> старта '{$Row['level_name']}'";
             }
             // Теперь не выходим, а ставим время NULL - вдруг пользователь сохранить хотел КП
             $BegYDTs = "NULL";
Exemple #9
0
    // Меняем статус в журнале
    $sql = " update UserUnionLogs set union_status = 3 \n             where userunionlog_id = {$UserUnionLogId}";
    MySqlQuery($sql);
    CMmb::setViews('ViewUserUnionPage', '');
} elseif ($action == 'AddLink') {
    $pUserId = mmb_validateInt($_POST, 'UserId');
    if ($pUserId <= 0) {
        CMmb::setErrorMessage('Пользователь не найден');
        return;
    }
    if ($SessionId <= 0) {
        CMmb::setErrorMessage('Сессия не найдена');
        return;
    }
    $pLinkName = trim(mmb_validate($_POST, 'NewLinkName'));
    $pLinkUrl = trim(mmb_validate($_POST, 'NewLinkUrl'));
    $pLinkTypeId = mmb_validateInt($_POST, 'LinkTypeId');
    $pLinkRaidId = mmb_validateInt($_POST, 'LinkRaidId');
    if ($pLinkRaidId <= 0) {
        CMmb::setErrorMessage('ММБ не найден');
        return;
    }
    if (empty($pLinkUrl) or $pLinkUrl == 'Адрес ссылки на впечатление') {
        $alert = 1;
        CMmb::setResult('Не указан адрес ссылки', 'ViewUserData');
        return;
    }
    if (empty($pLinkTypeId)) {
        $alert = 1;
        CMmb::setResult('Не указан тип ссылки', 'ViewUserData');
        return;