function SetEvent($RESULT_ID, $IN_EVENT1 = false, $IN_EVENT2 = false, $IN_EVENT3 = false, $money = "", $currency = "", $goto = "", $chargeback = "N") { $err_mess = CAllFormResult::err_mess() . "<br>Function: SetEvent<br>Line: "; global $DB, $strError; if (CModule::IncludeModule("statistic")) { $RESULT_ID = intval($RESULT_ID); $strSql = "SELECT FORM_ID FROM b_form_result WHERE ID='" . $RESULT_ID . "'"; $z = $DB->Query($strSql, false, $err_mess . __LINE__); if ($zr = $z->Fetch()) { $WEB_FORM_ID = $zr["FORM_ID"]; $strSql = "SELECT SID, STAT_EVENT1, STAT_EVENT2, STAT_EVENT3 FROM b_form WHERE ID = '" . $WEB_FORM_ID . "'"; $z = $DB->Query($strSql, false, $err_mess . __LINE__); $zr = $z->Fetch(); if ($IN_EVENT1 === false) { $event1 = strlen($zr["STAT_EVENT1"]) <= 0 ? "form" : $zr["STAT_EVENT1"]; } else { $event1 = $IN_EVENT1; } if ($IN_EVENT2 === false) { $event2 = strlen($zr["STAT_EVENT2"]) <= 0 ? $zr["SID"] : $zr["STAT_EVENT2"]; } else { $event2 = $IN_EVENT2; } if ($IN_EVENT3 === false) { $event3 = strlen($zr["STAT_EVENT3"]) <= 0 ? ($GLOBALS['APPLICATION']->IsHTTPS() ? "https://" : "http://") . $_SERVER["HTTP_HOST"] . "/bitrix/admin/form_result_list.php?lang=" . LANGUAGE_ID . "&WEB_FORM_ID=" . $WEB_FORM_ID . "&find_id=" . $RESULT_ID . "&find_id_exact_match=Y&set_filter=Y" : $zr["STAT_EVENT3"]; } else { $event3 = $IN_EVENT3; } CStatEvent::AddCurrent($event1, $event2, $event3, $money, $currency, $goto, $chargeback); return true; } else { $strError .= GetMessage("FORM_ERROR_RESULT_NOT_FOUND") . "<br>"; } } return false; }
public static function KeepVoting() { global $DB, $VOTING_LAMP, $USER_ALREADY_VOTE, $USER_GROUP_PERMISSION, $USER; $err_mess = CAllVote::err_mess() . "<br>Function: KeepVoting<br>Line: "; $VOTING_LAMP = "green"; $USER_ALREADY_VOTE = "N"; $PUBLIC_VOTE_ID = intval($_REQUEST["PUBLIC_VOTE_ID"]); $aMsg = array(); $VOTE_ID = 0; $arVote = array(); $arQuestions = array(); if (!(!empty($_REQUEST["vote"]) && $PUBLIC_VOTE_ID > 0 && check_bitrix_sessid())) { $aMsg[] = array("id" => "bad_params", "text" => GetMessage("VOTE_NOT_FOUND")); } elseif (($VOTE_ID = intVal(GetVoteDataByID($PUBLIC_VOTE_ID, $arChannel, $arVote, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, $arGroupAnswers, "N"))) && ($VOTE_ID <= 0 || $arVote["LAMP"] != "green")) { $VOTING_LAMP = "red"; if ($VOTE_ID <= 0) { $aMsg[] = array("id" => "VOTE_ID", "text" => GetMessage("VOTE_NOT_FOUND")); } else { $aMsg[] = array("id" => "LAMP", "text" => GetMessage("VOTE_RED_LAMP")); } } elseif ($arChannel["USE_CAPTCHA"] == "Y" && !$USER->IsAuthorized()) { include_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/captcha.php"; $cpt = new CCaptcha(); if (!empty($_REQUEST["captcha_word"])) { $captchaPass = COption::GetOptionString("main", "captcha_password", ""); if (!$cpt->CheckCodeCrypt($_REQUEST["captcha_word"], $_REQUEST["captcha_code"], $captchaPass)) { $GLOBALS["BAD_CAPTCHA"] = "Y"; $aMsg[] = array("id" => "CAPTCHA", "text" => GetMessage("VOTE_BAD_CAPTCHA")); } } else { if (!$cpt->CheckCode($_REQUEST["captcha_word"], 0)) { $GLOBALS["NO_CAPTCHA"] = "Y"; $aMsg[] = array("id" => "CAPTCHA", "text" => GetMessage("VOTE_BAD_CAPTCHA")); } } } if (empty($aMsg)) { // get user id $_SESSION["VOTE_USER_ID"] = CVote::SetVoteUserID(); $GLOBALS["VOTING_ID"] = $VOTE_ID; // check: can user vote $UNIQUE_TYPE = $arVote["UNIQUE_TYPE"]; $KEEP_IP_SEC = $arVote["KEEP_IP_SEC"]; $CHANNEL_ID = $arVote["CHANNEL_ID"]; $StatusVote = CVote::UserAlreadyVote($VOTE_ID, $_SESSION["VOTE_USER_ID"], $UNIQUE_TYPE, $KEEP_IP_SEC, $USER->GetID()); $USER_ALREADY_VOTE = $StatusVote != false ? "Y" : "N"; $USER_GROUP_PERMISSION = CVote::UserGroupPermission($CHANNEL_ID); // if user can vote that if (($USER_ALREADY_VOTE == "N" || $StatusVote == 8 && $_REQUEST["REVOTE_ID"] == $VOTE_ID) && $USER_GROUP_PERMISSION >= 2) { $arSqlAnswers = array(); // check answers foreach ($arQuestions as $qID => $arQuestion) { $arSqlAnswers[$arQuestion["ID"]] = array(); $bIndicators = array(); foreach ($arQuestion["ANSWERS"] as $arAnswer) { switch ($arAnswer["FIELD_TYPE"]) { case 0: // radio // radio case 2: // dropdown list $fieldName = ($arAnswer["FIELD_TYPE"] == 0 ? "vote_radio_" : "vote_dropdown_") . $qID; $aID = intval($GLOBALS[$fieldName]); if (!isset($bIndicators[$fieldName]) && array_key_exists($aID, $arQuestion["ANSWERS"])) { if (!empty($arAnswer['MESSAGE'])) { $arSqlAnswers[$qID][$aID] = array("ANSWER_ID" => $aID); } $bIndicators[$fieldName] = "Y"; } break; case 1: // checkbox // checkbox case 3: // multiselect list $fieldName = ($arAnswer["FIELD_TYPE"] == 1 ? "vote_checkbox_" : "vote_multiselect_") . $qID; $res = $GLOBALS[$fieldName]; if (!isset($bIndicators[$fieldName]) && is_array($res) && !empty($res)) { reset($res); foreach ($res as $aID) { if (array_key_exists($aID, $arQuestion["ANSWERS"])) { $arSqlAnswers[$qID][$aID] = array("ANSWER_ID" => $aID); } } $bIndicators[$fieldName] = "Y"; } break; case 4: // field // field case 5: // text $aID = $arAnswer["ID"]; $fieldName = ($arAnswer["FIELD_TYPE"] == 4 ? "vote_field_" : "vote_memo_") . $aID; $MESSAGE = trim($GLOBALS[$fieldName]); if ($MESSAGE != "") { $arSqlAnswers[$qID][$aID] = array("ANSWER_ID" => $aID, "MESSAGE" => "'" . $DB->ForSql(trim($MESSAGE), 2000) . "'"); } break; } } if (empty($arSqlAnswers[$qID])) { unset($arSqlAnswers[$qID]); if ($arQuestion['REQUIRED'] == 'Y') { $aMsg[] = array("id" => "QUESTION_" . $qID, "text" => GetMessage("VOTE_REQUIRED_MISSING")); $GLOBALS["VOTE_REQUIRED_MISSING"] = "Y"; break; } } } if (!empty($aMsg)) { /* do nothing; */ } elseif (!empty($arSqlAnswers)) { // vote event $arFields = array("VOTE_ID" => $VOTE_ID, "VOTE_USER_ID" => intval($_SESSION["VOTE_USER_ID"]), "DATE_VOTE" => $DB->GetNowFunction(), "STAT_SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]), "IP" => "'" . $DB->ForSql($_SERVER["REMOTE_ADDR"], 15) . "'", "VALID" => "'Y'"); /***************** Event onBeforeVoting ****************************/ foreach (GetModuleEvents("vote", "onBeforeVoting", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array(&$arFields, &$arSqlAnswers)) === false) { return false; } } /***************** /Event ******************************************/ if ($StatusVote == 8 && $_REQUEST["REVOTE_ID"] == $VOTE_ID) { $strSql = "SELECT VE.ID, VEQ.QUESTION_ID, VEA.ANSWER_ID" . " FROM b_vote_event VE " . "\tLEFT JOIN b_vote_event_question VEQ ON (VEQ.EVENT_ID=VE.ID)" . "\tLEFT JOIN b_vote_event_answer VEA ON (VEA.EVENT_QUESTION_ID=VEQ.ID)" . "\tLEFT JOIN b_vote_user VU ON (VE.VOTE_USER_ID = VU.ID)" . " WHERE VE.VOTE_ID=" . $VOTE_ID . " AND VU.AUTH_USER_ID=" . intval($USER->GetID()) . " ORDER BY VE.ID ASC, VEQ.QUESTION_ID ASC"; $db_res = $DB->Query($strSql, false, $err_mess . __LINE__); if ($db_res && ($res = $db_res->Fetch())) { if ($USER->GetID() > 0 && CModule::IncludeModule("im")) { CIMNotify::DeleteByTag("VOTING|" . $VOTE_ID, $USER->GetID()); } $del = false; $delQ = false; do { if ($delQ !== $res["QUESTION_ID"]) { if ($del !== $res["ID"]) { CVoteEvent::Delete($res["ID"]); $del = $res["ID"]; $arVote["COUNTER"] = intval($arVote["COUNTER"]) - 1; } $delQ = $res["QUESTION_ID"]; $arQuestions[$res["QUESTION_ID"]]["COUNTER"] = intval($arQuestions[$res["QUESTION_ID"]]["COUNTER"]) - 1; } $arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]]["COUNTER"] = intval($arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]]["COUNTER"]) - 1; } while ($res = $db_res->Fetch()); } $USER_ALREADY_VOTE = "N"; } unset($GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]); unset($GLOBALS["VOTE_CACHE"]["VOTE"][$VOTE_ID]); $EVENT_ID = intval($DB->Insert("b_vote_event", $arFields, $err_mess . __LINE__)); if ($EVENT_ID > 0) { $arSqlQuestionsID = array(); $arSqlAnswersID = array(); foreach ($arSqlAnswers as $qID => $arSqlAnswer) { $arFields = array("EVENT_ID" => $EVENT_ID, "QUESTION_ID" => $qID); $EVENT_QUESTION_ID = intval($DB->Insert("b_vote_event_question", $arFields, $err_mess . __LINE__)); if ($EVENT_QUESTION_ID > 0) { $arSqlQuestionsID[] = $qID; $arQuestions[$qID]["COUNTER"] = intval($arQuestions[$qID]["COUNTER"]) + 1; foreach ($arSqlAnswer as $aID => $res) { $res["EVENT_QUESTION_ID"] = $EVENT_QUESTION_ID; if ($DB->Insert("b_vote_event_answer", $res, $err_mess . __LINE__)) { $arSqlAnswersID[$aID] = $qID; $arQuestions[$qID]["ANSWERS"][$aID]["COUNTER"] = intval($arQuestions[$qID]["ANSWERS"][$aID]["COUNTER"]) + 1; } } } } if (empty($arSqlQuestionsID) || empty($arSqlAnswersID)) { $DB->Query("DELETE FROM b_vote_event WHERE ID=" . $EVENT_ID, $arFields, $err_mess . __LINE__); } else { $arFields = array("COUNTER" => "COUNTER+1"); $DB->Update("b_vote", $arFields, "WHERE ID='" . $VOTE_ID . "'", $err_mess . __LINE__); $arVote["COUNTER"] = intval($arVote["COUNTER"]) + 1; $DB->Update("b_vote_question", $arFields, "WHERE ID in (" . implode(", ", $arSqlQuestionsID) . ")", $err_mess . __LINE__); $DB->Update("b_vote_answer", $arFields, "WHERE ID in (" . implode(", ", array_keys($arSqlAnswersID)) . ")", $err_mess . __LINE__); // increment user counter CVote::UpdateVoteUserID($_SESSION["VOTE_USER_ID"]); $GLOBALS["VOTING_OK"] = "Y"; $_SESSION["VOTE_ARRAY"][] = $VOTE_ID; if ($UNIQUE_TYPE & 8) { $_SESSION["VOTE"]["VOTES"][$VOTE_ID] = $EVENT_ID; } // statistic module if (CModule::IncludeModule("statistic")) { $event3 = $arVote["EVENT3"]; if (!empty($event3)) { $event3 = "http://" . $_SERVER["HTTP_HOST"] . "/bitrix/admin/vote_user_results.php?EVENT_ID=" . $EVENT_ID . "&lang=" . LANGUAGE_ID; } CStatEvent::AddCurrent($arVote["EVENT1"], $arVote["EVENT2"], $event3); } // notification if (!!$arVote["AUTHOR_ID"] && $arVote["AUTHOR_ID"] != $USER->GetID()) { if (empty($arVote["TITLE"])) { $arQuestion = reset($arQuestions); $arVote["TITLE"] = $arQuestion["QUESTION"]; } if ($arVote["NOTIFY"] == "I" && CModule::IncludeModule("im")) { $arVote["TOTAL_URL"] = ""; if (!empty($arVote["URL"])) { if (defined('SITE_SERVER_NAME')) { $arVote["TOTAL_URL"] = SITE_SERVER_NAME; } $arVote["TOTAL_URL"] = !empty($arVote["TOTAL_URL"]) ? $arVote["TOTAL_URL"] : COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]); if (!empty($arVote["TOTAL_URL"])) { $arVote["TOTAL_URL"] = (CMain::IsHTTPS() ? "https" : "http") . "://" . $arVote["TOTAL_URL"] . $arVote["URL"]; } } // send notification $gender = $USER->getParam("PERSONAL_GENDER") == "F" ? "_F" : ""; $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "TO_USER_ID" => $arVote["AUTHOR_ID"], "FROM_USER_ID" => $USER->GetID(), "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "vote", "NOTIFY_EVENT" => "voting", "NOTIFY_TAG" => "VOTING|" . $VOTE_ID, "NOTIFY_MESSAGE" => !empty($arVote["URL"]) ? GetMessage("V_NOTIFY_MESSAGE_HREF" . $gender, array("#VOTE_TITLE#" => $arVote["TITLE"], "#VOTE_URL#" => $arVote["URL"])) : GetMessage("V_NOTIFY_MESSAGE" . $gender, array("#VOTE_TITLE#" => $arVote["TITLE"])), "NOTIFY_MESSAGE_OUT" => !empty($arVote["TOTAL_URL"]) ? GetMessage("V_NOTIFY_MESSAGE_OUT_HREF" . $gender, array("#VOTE_TITLE#" => $arVote["TITLE"], "#VOTE_URL#" => $arVote["TOTAL_URL"])) : GetMessage("V_NOTIFY_MESSAGE" . $gender, array("#VOTE_TITLE#" => $arVote["TITLE"]))); CIMNotify::Add($arMessageFields); } else { if ($arVote["NOTIFY"] == "Y") { // send e-mail $db_user = CUser::GetById($arVote["AUTHOR_ID"]); if ($db_user && ($arUser = $db_user->Fetch()) && !empty($arUser["EMAIL"])) { $arEventFields = array("EMAIL_TO" => $arUser["EMAIL"], "VOTE_STATISTIC" => "", "ID" => $EVENT_ID, "TIME" => GetTime(time(), "FULL"), "VOTE_TITLE" => $arVote["TITLE"], "VOTE_DESCRIPTION" => $arVote["DESCRIPTION"], "VOTE_ID" => $arVote["ID"], "VOTE_COUNTER" => $arVote["COUNTER"], "URL" => $arVote["URL"], "CHANNEL" => $arChannel["TITLE"], "CHANNEL_ID" => $arChannel["ID"], "VOTER_ID" => $_SESSION["VOTE_USER_ID"], "USER_NAME" => $USER->GetFullName(), "LOGIN" => $USER->GetLogin(), "USER_ID" => $USER->GetID(), "STAT_GUEST_ID" => intval($_SESSION["SESS_GUEST_ID"]), "SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]), "IP" => $_SERVER["REMOTE_ADDR"]); $arEventFields["USER_NAME"] = !!$arEventFields["USER_NAME"] ? $arEventFields["USER_NAME"] : $arEventFields["LOGIN"]; // VOTE_STATISTIC $text = array(); foreach ($arSqlAnswersID as $aID => $qID) { $text[$qID] = is_array($text[$qID]) ? $text[$qID] : array(); if ($arQuestions[$qID]["ANSWERS"][$aID]["FIELD_TYPE"] == 4 || $arQuestions[$qID]["ANSWERS"][$aID]["FIELD_TYPE"] == 5) { if (!empty($arSqlAnswers[$qID][$aID]["MESSAGE"])) { $text[$qID][] = $arSqlAnswers[$qID][$aID]["MESSAGE"]; } } else { $text[$qID][] = $arQuestions[$qID]["ANSWERS"][$aID]["MESSAGE"]; } } foreach ($text as $qID => $txt) { $text[$qID] = " - " . $arQuestions[$qID]["QUESTION"] . "\n - " . implode(", ", $text[$qID]); } $arEventFields["VOTE_STATISTIC"] = "\n" . implode("\n\n", $text); $arrSites = CVoteChannel::GetSiteArray($arChannel["ID"]); CEvent::Send("VOTE_FOR", $arrSites, $arEventFields, "N"); } } } } } /***************** Event onAfterVoting *****************************/ foreach (GetModuleEvents("vote", "onAfterVoting", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($VOTE_ID, $EVENT_ID)); } /***************** /Event ******************************************/ } } else { $GLOBALS["USER_VOTE_EMPTY"] = "Y"; $aMsg[] = array("id" => "VOTE_ID", "text" => GetMessage("USER_VOTE_EMPTY")); } } else { $aMsg[] = array("id" => "VOTE_ID", "text" => $USER_GROUP_PERMISSION >= 2 ? GetMessage("VOTE_ALREADY_VOTE") : GetMessage("VOTE_ACCESS_DENIED")); } } if (!empty($aMsg)) { $e = new CAdminException($aMsg, "CVote::KeepVoting"); $GLOBALS["APPLICATION"]->ThrowException($e); $GLOBALS["VOTING_OK"] = "N"; return false; } return true; }
function Set($arFields, &$MID, $id = "", $checkRights = "Y", $sendEmailToAuthor = "Y", $sendEmailToTechsupport = "Y") { global $DB, $APPLICATION, $USER; $err_mess = CAllTicket::err_mess() . "<br>Function: Set<br>Line: "; $v0 = self::Set_InitVar($arFields, $id, $checkRights, $sendEmailToAuthor, $sendEmailToTechsupport); if (!is_array($v0)) { return $v0; } $v = $v0["v"]; /* isNew, CHECK_RIGHTS, SEND_EMAIL_TO_AUTHOR, SEND_EMAIL_TO_TECHSUPPORT, bAdmin, bSupportTeam, bSupportClient, bDemo, bOwner, uid, bActiveCoupon, IsSpam */ /** @var CSupportTableFields $f */ $f = $v0["f"]; /* ID, SITE_ID, MODIFIED_GUEST_ID, OWNER_USER_ID, OWNER_SID, HOLD_ON, IS_SPAM */ // если модифицируем обращение то if (!$v->isNew) { unset($arFields['COUPON']); $arFields['ID'] = $f->ID; $arFields = CTicket::ExecuteEvents('OnBeforeTicketUpdate', $arFields, false); $v->closeDate = isset($arFields["CLOSE"]) && $arFields["CLOSE"] == "Y"; //$close // запоминаем предыдущие важные значения $v->arrOldFields = array(); $arr = array("TITLE" => "T.TITLE", "RESPONSIBLE_USER_ID" => "T.RESPONSIBLE_USER_ID", "SLA_ID" => "T.SLA_ID", "CATEGORY_ID" => "T.CATEGORY_ID", "CRITICALITY_ID" => "T.CRITICALITY_ID", "STATUS_ID" => "T.STATUS_ID", "MARK_ID" => "T.MARK_ID", "DIFFICULTY_ID" => "T.DIFFICULTY_ID", "DATE_CLOSE" => "T.DATE_CLOSE", "HOLD_ON" => "T.HOLD_ON", "RESPONSE_TIME" => "S.RESPONSE_TIME", "RESPONSE_TIME_UNIT" => "S.RESPONSE_TIME_UNIT"); $str = "T.ID"; foreach ($arr as $s) { $str .= "," . $s; } $strSql = "SELECT " . $str . ", SITE_ID FROM b_ticket T LEFT JOIN b_ticket_sla S ON T.SLA_ID = S.ID WHERE T.ID='" . $f->ID . "'"; $z = $DB->Query($strSql, false, $err_mess . __LINE__); if ($zr = $z->Fetch()) { $f->SITE_ID = $zr["SITE_ID"]; if (intval($v->uid) == $zr["RESPONSIBLE_USER_ID"]) { $v->bSupportTeam = "Y"; } foreach ($arr as $key => $s) { $v->arrOldFields[$key] = $zr[$key]; } } $f->FromArray($arFields, "SITE_ID,MODIFIED_MODULE_NAME,SLA_ID,SOURCE_ID", array(CSupportTableFields::MORE0, CSupportTableFields::NOT_EMTY_STR)); if (!$f->MODIFIED_MODULE_NAME) { $f->MODIFIED_MODULE_NAME = ''; } $f->FromArray($arFields, "CATEGORY_ID,RESPONSIBLE_USER_ID,STATUS_ID,DIFFICULTY_ID,CRITICALITY_ID,SUPPORT_COMMENTS"); if (isset($arFields['CHANGE_TITLE'])) { $f->set('TITLE', $arFields['CHANGE_TITLE']); } $f->set("MODIFIED_USER_ID", $v->uid, array(CSupportTableFields::MORE0)); $f->setCurrentTime("TIMESTAMP_X"); if ($v->closeDate) { $f->setCurrentTime("DATE_CLOSE"); } // ?remake? { $v->IS_GROUP_USER = '******'; if ($v->bAdmin) { $IS_GROUP_USER = '******'; } elseif ($v->CHECK_RIGHTS == 'Y' && ($v->bSupportClient || $v->bSupportTeam)) { if ($v->bSupportTeam) { $join_query = '(T.RESPONSIBLE_USER_ID IS NOT NULL AND T.RESPONSIBLE_USER_ID=O.USER_ID)'; } else { $join_query = '(T.OWNER_USER_ID IS NOT NULL AND T.OWNER_USER_ID=O.USER_ID)'; } $strSql = "SELECT 'x'\n\t\t\t\tFROM b_ticket T\n\t\t\t\tINNER JOIN b_ticket_user_ugroup O ON {$join_query}\n\t\t\t\tINNER JOIN b_ticket_user_ugroup C ON (O.GROUP_ID=C.GROUP_ID)\n\t\t\t\tINNER JOIN b_ticket_ugroups G ON (O.GROUP_ID=G.ID)\n\t\t\t\tWHERE T.ID='" . $f->ID . "' AND C.USER_ID='" . $v->uid . "' AND C.CAN_VIEW_GROUP_MESSAGES='Y' AND G.IS_TEAM_GROUP='" . ($v->bSupportTeam ? "Y" : "N") . "'"; $z = $DB->Query($strSql); if ($zr = $z->Fetch()) { $v->IS_GROUP_USER = '******'; } } // } if (isset($arFields["AUTO_CLOSE_DAYS"]) && intval($arFields["AUTO_CLOSE_DAYS"]) >= 0) { if (intval($arFields["AUTO_CLOSE_DAYS"]) == 0) { // get from module settings $f->AUTO_CLOSE_DAYS = COption::GetOptionString('support', "DEFAULT_AUTO_CLOSE_DAYS"); } else { $f->AUTO_CLOSE_DAYS = $arFields["AUTO_CLOSE_DAYS"]; } } if (is_array($v->arrOldFields) && is_array($arFields) && $arFields["CLOSE"] == "N" && strlen($v->arrOldFields["DATE_CLOSE"]) > 0) { $f->DATE_CLOSE = null; $f->REOPEN = "Y"; } // Если есть что и мы Аднины или из группы ТП, запишем в базу $v->FirstUpdateRes = false; if ($v->bSupportTeam || $v->bAdmin) { $arFields_i = $f->ToArray(CSupportTableFields::ALL, array(CSupportTableFields::ONLY_CHANGED), true); if ($v->CHECK_RIGHTS == "N" && isset($arFields["MARK_ID"]) && intval($arFields["MARK_ID"]) > 0) { $arFields_i["MARK_ID"] = intval($arFields["MARK_ID"]); } if (count($arFields_i) > 0) { $v->SupportTeamUpdateRes = $DB->Update("b_ticket", $arFields_i, "WHERE ID='" . $f->ID . "'", $err_mess . __LINE__); //$rows1 $GLOBALS["USER_FIELD_MANAGER"]->Update("SUPPORT", $f->ID, $arFields); // если указана отметка о спаме то установим отметку о спаме if (strlen($f->IS_SPAM) > 0) { CTicket::MarkAsSpam($f->ID, $f->IS_SPAM, $v->CHECK_RIGHTS); } $v->newSLA = isset($arFields_i["SLA_ID"]) && $v->arrOldFields["SLA_ID"] != $arFields_i["SLA_ID"]; } } elseif ($v->bOwner || $v->bSupportClient) { $arFields_i = $f->ToArray("TIMESTAMP_X,DATE_CLOSE,CRITICALITY_ID,MODIFIED_USER_ID,MODIFIED_GUEST_ID,MODIFIED_MODULE_NAME,REOPEN", array(CSupportTableFields::ONLY_CHANGED), true); $arFields_i["MARK_ID"] = intval($arFields["MARK_ID"]); if (count($arFields_i) > 0) { $v->SupportClientUpdateRes = $DB->Update("b_ticket", $arFields_i, "WHERE ID='" . $f->ID . "' AND (OWNER_USER_ID='" . $v->uid . "' OR CREATED_USER_ID='" . $v->uid . "' OR '" . $v->CHECK_RIGHTS . "'='N' OR '" . $v->IS_GROUP_USER . "'='Y')", $err_mess . __LINE__); $GLOBALS["USER_FIELD_MANAGER"]->Update("SUPPORT", $f->ID, $arFields); } } // поля для записи лога /*$arFields_log = array( "LOG" => "Y", "MESSAGE_CREATED_USER_ID" => $MODIFIED_USER_ID, "MESSAGE_CREATED_MODULE_NAME" => $MODIFIED_MODULE_NAME, "MESSAGE_CREATED_GUEST_ID" => $MODIFIED_GUEST_ID, "MESSAGE_SOURCE_ID" => intval($arFields["SOURCE_ID"]) );*/ $v->arFields_log = array("LOG" => "Y", "MESSAGE_CREATED_USER_ID" => $f->MODIFIED_USER_ID, "MESSAGE_CREATED_MODULE_NAME" => $f->MODIFIED_MODULE_NAME, "MESSAGE_CREATED_GUEST_ID" => $f->MODIFIED_GUEST_ID, "MESSAGE_SOURCE_ID" => $f->SOURCE_ID); // если необходимо соблюдать права то if ($v->CHECK_RIGHTS == "Y") { // если update техподдержки не прошел то if (intval($v->SupportTeamUpdateRes) <= 0) { // убираем из массива исходных значений то что может менять только техподдержка unset($v->arrOldFields["RESPONSIBLE_USER_ID"]); unset($v->arrOldFields["SLA_ID"]); unset($v->arrOldFields["CATEGORY_ID"]); unset($v->arrOldFields["DIFFICULTY_ID"]); unset($v->arrOldFields["STATUS_ID"]); } // если update автора не прошел то if (intval($v->SupportClientUpdateRes) <= 0) { // убираем из массива исходных значений то что может менять только автор unset($v->arrOldFields["MARK_ID"]); } } // если состоялся один из updat'ов то if (intval($v->SupportTeamUpdateRes) > 0 || intval($v->SupportClientUpdateRes) > 0) { // добавляем сообщение $arFields["MESSAGE_CREATED_MODULE_NAME"] = $arFields["MODIFIED_MODULE_NAME"]; if (is_set($arFields, "IMAGE")) { $arFields["FILES"][] = $arFields["IMAGE"]; } $arFiles = null; $MID = CTicket::AddMessage($f->ID, $arFields, $arFiles, $v->CHECK_RIGHTS); $v->arrFILES = $arFiles; $MID = intval($MID); $dateType = array(); $dateType["EVENT"] = array(CTicket::UPDATE); if ($v->newSLA) { $dateType["EVENT"][] = CTicket::NEW_SLA; $dateType["OLD_SLA_RESPONSE_TIME"] = $v->arrOldFields["RESPONSE_TIME"]; $dateType["OLD_SLA_RESPONSE_TIME_UNIT"] = $v->arrOldFields["RESPONSE_TIME_UNIT"]; } if ($f->REOPEN == "Y") { $dateType["EVENT"][] = CTicket::REOPEN; } //CTicket::UpdateLastParams2($f->ID, $dateType); CTicket::UpdateLastParamsN($f->ID, $dateType, true, true); /*// если обращение закрывали то if($v->closeDate) { // удалим агентов-напоминальщиков и обновим параметры обращения CTicketReminder::Remove($f->ID); }*/ if (is_array($v->arrOldFields) && is_array($arFields)) { // определяем что изменилось $v->arChange = array(); if ($MID > 0) { if ($arFields["HIDDEN"] != "Y") { $v->arChange["MESSAGE"] = "Y"; } else { $v->arChange["HIDDEN_MESSAGE"] = "Y"; } } if ($arFields["CLOSE"] == "Y" && strlen($v->arrOldFields["DATE_CLOSE"]) <= 0) { $v->arChange["CLOSE"] = "Y"; } elseif ($arFields["CLOSE"] == "N" && strlen($v->arrOldFields["DATE_CLOSE"]) > 0) { $v->arChange["OPEN"] = "Y"; } if (array_key_exists("HOLD_ON", $arFields)) { if ($v->arrOldFields["HOLD_ON"] == null) { $v->arrOldFields["HOLD_ON"] = 'N'; } if ($arFields["HOLD_ON"] == null) { $arFields["HOLD_ON"] = 'N'; } if ($v->arrOldFields["HOLD_ON"] != $arFields["HOLD_ON"]) { if ($arFields["HOLD_ON"] == "Y") { $v->arChange["HOLD_ON_ON"] = "Y"; } else { $v->arChange["HOLD_ON_OFF"] = "Y"; } } unset($v->arrOldFields["HOLD_ON"]); } foreach ($v->arrOldFields as $key => $value) { if (isset($arFields[$key])) { if ($key === 'TITLE' && $value !== $arFields[$key]) { $v->arChange[$key] = "Y"; } elseif (intval($value) != intval($arFields[$key])) { $v->arChange[$key] = "Y"; } } } // получим текущие значения обращения CTimeZone::Disable(); $z = CTicket::GetByID($f->ID, $f->SITE_ID, "N"); CTimeZone::Enable(); if ($zr = $z->Fetch()) { $nf = (object) $zr; $rsSite = CSite::GetByID($nf->SITE_ID); $v->arrSite = $rsSite->Fetch(); self::Set_sendMails($nf, $v, $arFields); //if ($v->arChange['SLA_ID'] == 'Y' || $v->arChange['OPEN'] == 'Y') CTicketReminder::Update($nf->ID, true); } } CTicket::ExecuteEvents('OnAfterTicketUpdate', $arFields, false); } } else { // restrict to set SLA_ID directly, allow through events or automatically if (isset($arFields['SLA_ID']) && !($v->bSupportTeam || $v->bAdmin || $v->bDemo || $v->bActiveCoupon)) { unset($arFields['SLA_ID']); } $arFields = CTicket::ExecuteEvents('OnBeforeTicketAdd', $arFields, false); if (!$arFields) { return false; } if (!((strlen(trim($arFields["OWNER_SID"])) > 0 || intval($arFields["OWNER_USER_ID"]) > 0) && ($v->bSupportTeam || $v->bAdmin))) { $f->OWNER_USER_ID = $v->uid > 0 ? $v->uid : null; $f->OWNER_SID = null; $f->OWNER_GUEST_ID = intval($_SESSION["SESS_GUEST_ID"]) > 0 ? intval($_SESSION["SESS_GUEST_ID"]) : null; } $f->FromArray($arFields, "CREATED_USER_ID,CREATED_MODULE_NAME,CATEGORY_ID,STATUS_ID,DIFFICULTY_ID,CRITICALITY_ID,SOURCE_ID,TITLE", array(CSupportTableFields::MORE0, CSupportTableFields::NOT_EMTY_STR)); if (!$f->CREATED_USER_ID) { $f->set("CREATED_USER_ID", $v->uid, array(CSupportTableFields::MORE0)); } $f->setCurrentTime("LAST_MESSAGE_DATE,DAY_CREATE,TIMESTAMP_X,DEADLINE_SOURCE_DATE"); $f->DATE_CREATE = time() + CTimeZone::GetOffset(); // если обращение создается сотрудником техподдержки, администратором или демо пользователем if ($v->bSupportTeam || $v->bAdmin || $v->Demo) { $f->FromArray($arFields, "SUPPORT_COMMENTS", array(CSupportTableFields::NOT_EMTY_STR)); } if (!self::Set_getCOUPONandSLA($v, $f, $arFields)) { return false; } // $f +SLA_ID $v +V_COUPON +bActiveCoupon if ($v->bActiveCoupon) { $f->COUPON = $v->V_COUPON; } self::Set_getResponsibleUser($v, $f, $arFields); // $f +RESPONSIBLE_USER_ID $v +T_EVENT1 +T_EVENT2 +T_EVENT3 // поля для записи лога $v->arFields_log = array("LOG" => "Y", "MESSAGE_CREATED_USER_ID" => $f->CREATED_USER_ID, "MESSAGE_CREATED_MODULE_NAME" => $f->CREATED_MODULE_NAME, "MESSAGE_CREATED_GUEST_ID" => $f->MODIFIED_GUEST_ID, "MESSAGE_SOURCE_ID" => $f->SOURCE_ID); $acd0 = intval(COption::GetOptionString("support", "DEFAULT_AUTO_CLOSE_DAYS")); $f->AUTO_CLOSE_DAYS = $acd0 <= 0 ? 7 : $acd0; $arFields["AUTO_CLOSE_DAYS"] = $f->AUTO_CLOSE_DAYS; $arFields_i = $f->ToArray(CSupportTableFields::ALL, array(CSupportTableFields::NOT_NULL, CSupportTableFields::NOT_DEFAULT), true); $id = $DB->Insert("b_ticket", $arFields_i, $err_mess . __LINE__); if (!($id > 0)) { return $id; } $f->ID = $id; $GLOBALS["USER_FIELD_MANAGER"]->Update("SUPPORT", $f->ID, $arFields); $arFields["MESSAGE_AUTHOR_SID"] = $f->OWNER_SID; $arFields["MESSAGE_AUTHOR_USER_ID"] = $f->OWNER_USER_ID; $arFields["MESSAGE_CREATED_MODULE_NAME"] = $f->CREATED_MODULE_NAME; $arFields["MESSAGE_SOURCE_ID"] = $f->SOURCE_ID; $arFields["HIDDEN"] = "N"; $arFields["LOG"] = "N"; $arFields["IS_LOG"] = "N"; if (is_set($arFields, "IMAGE")) { $arFields["FILES"][] = $arFields["IMAGE"]; } $arFiles = null; $MID = CTicket::AddMessage($f->ID, $arFields, $arFiles, $v->CHECK_RIGHTS); $v->arrFILES = $arFiles; $MID = intval($MID); if (intval($MID) > 0) { //CTicket::UpdateLastParams2($f->ID, array("EVENT"=>array(CTicket::ADD))); CTicket::UpdateLastParamsN($f->ID, array("EVENT" => array(CTicket::ADD)), true, true); // если указана отметка о спаме то установим отметку о спаме if (strlen($f->IS_SPAM) > 0) { CTicket::MarkAsSpam($f->ID, $f->IS_SPAM, $v->CHECK_RIGHTS); } /******************************************** $nf - Заново прочитанные из базы поля ********************************************/ CTimeZone::Disable(); $z = CTicket::GetByID($f->ID, $f->SITE_ID, "N", "N"); CTimeZone::Enable(); if ($zr = $z->Fetch()) { $nf = (object) $zr; $rsSite = CSite::GetByID($nf->SITE_ID); $v->arrSite = $rsSite->Fetch(); self::Set_sendMails($nf, $v, $arFields); // создаем событие в модуле статистики if (CModule::IncludeModule("statistic")) { if (!$v->category_set) { $v->T_EVENT1 = "ticket"; $v->T_EVENT2 = ""; $v->T_EVENT3 = ""; } if (strlen($v->T_EVENT3) <= 0) { $v->T_EVENT3 = "http://" . $_SERVER["HTTP_HOST"] . "/bitrix/admin/ticket_edit.php?ID=" . $f->ID . "&lang=" . $v->arrSite["LANGUAGE_ID"]; } CStatEvent::AddCurrent($v->T_EVENT1, $v->T_EVENT2, $v->T_EVENT3); } } } // !!! ПРОВЕРИТЬ $arFields ТОЧНО ЛИ ВСЕ $arFields[..] = .. ТАКИЕ ЖЕ КАК В ОРИГИНАЛЕ !!! $arFields['ID'] = $f->ID; $arFields['MID'] = $MID; CTicket::ExecuteEvents('OnAfterTicketAdd', $arFields, true); } return $f->ID; }
<?php //define("STOP_STATISTICS", true); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; if (isset($_SESSION["player_files"]) && is_array($_SESSION["player_files"]) && isset($_REQUEST["id"]) && isset($_SESSION["player_files"][$_REQUEST["id"]])) { $arFile = $_SESSION["player_files"][$_REQUEST["id"]]; if ($arFile["STAT_EVENT"] && !$arFile["WAS_STAT_EVENT"] && strlen($arFile["STAT_EVENT1"]) > 0 && CModule::IncludeModule('statistic')) { CStatEvent::AddCurrent($arFile["STAT_EVENT1"], $arFile["STAT_EVENT2"], $arFile["STAT_EVENT3"]); $_SESSION["player_files"][$_REQUEST["id"]]["WAS_STAT_EVENT"] = true; } if ($arFile["SHOW_COUNTER_EVENT"] && !$arFile["WAS_SHOW_COUNTER_EVENT"] && CModule::IncludeModule('iblock')) { CIBlockElement::CounterInc($_REQUEST["id"]); $_SESSION["player_files"][$_REQUEST["id"]]["WAS_SHOW_COUNTER_EVENT"] = true; } } require_once $_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_after.php";
function PrologActions() { /** @global CMain $APPLICATION */ global $APPLICATION, $USER; if (defined("BX_CHECK_SHORT_URI") && BX_CHECK_SHORT_URI) { if ($arUri = CBXShortUri::GetUri($_SERVER["REQUEST_URI"])) { CBXShortUri::SetLastUsed($arUri["ID"]); if (CModule::IncludeModule("statistic")) { CStatEvent::AddCurrent("short_uri_redirect", "", "", "", "", $arUri["URI"], "N", SITE_ID); } LocalRedirect($arUri["URI"], true, CBXShortUri::GetHttpStatusCodeText($arUri["STATUS"])); die; } } //session expander if (COption::GetOptionString("main", "session_expand", "Y") != "N" && (!defined("BX_SKIP_SESSION_EXPAND") || BX_SKIP_SESSION_EXPAND == false)) { $arPolicy = $USER->GetSecurityPolicy(); $phpSessTimeout = ini_get("session.gc_maxlifetime"); if ($arPolicy["SESSION_TIMEOUT"] > 0) { $sessTimeout = min($arPolicy["SESSION_TIMEOUT"] * 60, $phpSessTimeout); } else { $sessTimeout = $phpSessTimeout; } $cookie_prefix = COption::GetOptionString('main', 'cookie_name', 'BITRIX_SM'); $salt = $_COOKIE[$cookie_prefix . '_UIDH'] . "|" . $_SERVER["REMOTE_ADDR"] . "|" . @filemtime($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/version.php") . "|" . LICENSE_KEY . "|" . CMain::GetServerUniqID(); $key = md5(bitrix_sessid() . $salt); $bShowMess = $USER->IsAuthorized() && COption::GetOptionString("main", "session_show_message", "Y") != "N"; $ext = array('ajax'); if ($bShowMess) { $ext[] = "fx"; } CUtil::InitJSCore($ext); $jsMsg = '<script type="text/javascript">' . "\n" . ($bShowMess ? 'bxSession.mess.messSessExpired = \'' . CUtil::JSEscape(GetMessage("MAIN_SESS_MESS", array("#TIMEOUT#" => round($sessTimeout / 60)))) . '\';' . "\n" : '') . 'bxSession.Expand(' . $sessTimeout . ', \'' . bitrix_sessid() . '\', ' . ($bShowMess ? 'true' : 'false') . ', \'' . $key . '\');' . "\n" . '</script>'; if ($APPLICATION->IsJSOptimized()) { $APPLICATION->AddHeadScript('/bitrix/js/main/session.js'); $APPLICATION->AddAdditionalJS($jsMsg); } else { $APPLICATION->AddHeadString('<script type="text/javascript" src="' . CUtil::GetAdditionalFileURL('/bitrix/js/main/session.js') . '"></script>' . "\n" . $jsMsg, true); } $_SESSION["BX_SESSION_COUNTER"] = intval($_SESSION["BX_SESSION_COUNTER"]) + 1; if (!defined("BX_SKIP_SESSION_TERMINATE_TIME")) { $_SESSION["BX_SESSION_TERMINATE_TIME"] = time() + $sessTimeout; } } //user auto time zone via js cookies if (CTimeZone::Enabled()) { CTimeZone::SetAutoCookie(); } // check user options set via cookie if ($USER->IsAuthorized()) { $cookieName = COption::GetOptionString("main", "cookie_name", "BITRIX_SM") . "_LAST_SETTINGS"; if (!empty($_COOKIE[$cookieName])) { CUserOptions::SetCookieOptions($cookieName); } } if (COption::GetOptionString("main", "buffer_content", "Y") == "Y" && (!defined("BX_BUFFER_USED") || BX_BUFFER_USED !== true)) { ob_start(array(&$APPLICATION, "EndBufferContent")); $APPLICATION->buffered = true; define("BX_BUFFER_USED", true); register_shutdown_function(create_function('', 'while(@ob_end_flush());')); } foreach (GetModuleEvents("main", "OnProlog", true) as $arEvent) { ExecuteModuleEventEx($arEvent); } }
public static function Set_Event($event1, $event2="", $event3="", $goto="", $money="", $currency="", $chargeback="N", $site_id=false) { return CStatEvent::AddCurrent($event1, $event2, $event3, $money, $currency, $goto, $chargeback, $site_id); }
define("ADMIN_SECTION", false); if (!empty($_REQUEST['site_id']) && preg_match('/^[a-z0-9_]{2}$/i', $_REQUEST['site_id'])) { define('SITE_ID', $_REQUEST['site_id']); } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; global $APPLICATION; if (CModule::IncludeModule("statistic")) { if (strlen($_REQUEST["site_id"]) <= 0) { $site_id = false; $referer_url = strlen($_SERVER["HTTP_REFERER"]) <= 0 ? $_SESSION["SESS_HTTP_REFERER"] : $_SERVER["HTTP_REFERER"]; if (strlen($referer_url)) { $url = @parse_url($referer_url); if ($url) { $rs = CSite::GetList($v1 = "LENDIR", $v2 = "DESC", array("ACTIVE" => "Y", "DOMAIN" => "%" . $url["host"], "IN_DIR" => $url["path"])); if ($arr = $rs->Fetch()) { $site_id = $arr["ID"]; } } } } else { $site_id = $_REQUEST["site_id"]; } $goto = preg_replace("/#EVENT_GID#/i", urlencode(CStatEvent::GetGID($site_id)), $_REQUEST["goto"]); CStatEvent::AddCurrent($_REQUEST["event1"], $_REQUEST["event2"], $_REQUEST["event3"], $_REQUEST["money"], $_REQUEST["currency"], $goto, $_REQUEST["chargeback"], $site_id); } else { $goto = preg_replace("/#EVENT_GID#/i", "", $_REQUEST["goto"]); } if (intval($id) > 0 && CModule::IncludeModule("advertising")) { CAdvBanner::Click($id); } LocalRedirect($goto);
<?php define("ADMIN_SECTION", false); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; global $APPLICATION; if (CModule::IncludeModule("statistic")) { if (strlen($site_id) <= 0) { $referer_url = strlen($_SERVER["HTTP_REFERER"]) <= 0 ? $_SESSION["SESS_HTTP_REFERER"] : $_SERVER["HTTP_REFERER"]; if (strlen($referer_url) > 0) { $url = parse_url($referer_url); $rs = CSite::GetList($v1 = "LENDIR", $v2 = "DESC", array("ACTIVE" => "Y", "DOMAIN" => "%" . $url["host"], "IN_DIR" => $url["path"])); $arr = $rs->Fetch(); $site_id = $arr["ID"]; } } if (strlen($site_id) <= 0) { $site_id = false; } $goto = eregi_replace("#EVENT_GID#", urlencode(CStatEvent::GetGID($site_id)), $goto); CStatEvent::AddCurrent($event1, $event2, $event3, $money, $currency, $goto, $chargeback, $site_id); } else { $goto = eregi_replace("#EVENT_GID#", "", $goto); } LocalRedirect($goto);
public static function CheckUri() { if ($arUri = static::GetUri(Bitrix\Main\Context::getCurrent()->getRequest()->getDecodedUri())) { static::SetLastUsed($arUri["ID"]); if (CModule::IncludeModule("statistic")) { CStatEvent::AddCurrent("short_uri_redirect", "", "", "", "", $arUri["URI"], "N", SITE_ID); } LocalRedirect($arUri["URI"], true, static::GetHttpStatusCodeText($arUri["STATUS"])); return true; } return false; }