function CheckFields($arUserField, $value) { if (!($arUserField && is_array($arUserField["USER_TYPE"]) && $arUserField["USER_TYPE"]["CLASS_NAME"] == __CLASS__)) return true; $arData = (isset($GLOBALS[$arUserField["FIELD_NAME"]."_DATA"]) ? $GLOBALS[$arUserField["FIELD_NAME"]."_DATA"] : false); $aMsg = array(); if (!empty($arData) && CModule::IncludeModule("vote")) { $arVote = array( "ID" => $value, "CHANNEL_ID" => $arUserField["SETTINGS"]["CHANNEL_ID"], "TITLE" => $arData["TITLE"], "URL" => $arData["URL"], "NOTIFY" => $arUserField["SETTINGS"]["NOTIFY"], "DATE_END" => GetTime((isset($arData["DATE_END"]) ? MakeTimeStamp($arData["DATE_END"]) : 1924984799), "FULL"), "QUESTIONS" => array()); $arVoteQuestions = array(); $arQuestions = is_array($arData["QUESTIONS"]) ? $arData["QUESTIONS"] : array(); if (!$arVote["ID"]) { $arVote["DATE_START"] = GetTime(CVote::GetNowTime(), "FULL"); } else { $db_res = CVoteQuestion::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arVote["CHANNEL_ID"], "VOTE_ID" => $arVote["ID"])); if ($db_res && $res = $db_res->Fetch()) { do { $arVoteQuestions[$res["ID"]] = $res + array("ANSWERS" => array()); } while ($res = $db_res->Fetch()); } if (!empty($arVoteQuestions)) { $db_res = CVoteAnswer::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arVote["CHANNEL_ID"], "VOTE_ID" => $arVote["ID"])); if ($db_res && $res = $db_res->Fetch()) { do { if (is_set($arVoteQuestions, $res["QUESTION_ID"])) $arVoteQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res; } while ($res = $db_res->Fetch()); } } } foreach ($arQuestions as $key => $arQuestion) { $res = array( "ID" => (array_key_exists($arQuestion["ID"], $arVoteQuestions) ? $arQuestion["ID"] : false), "QUESTION" => trim($arQuestion["QUESTION"]), "MULTI" => ($arQuestion["MULTI"] == "Y" ? "Y" : "N"), "ANSWERS" => array()); $arQuestion["ANSWERS"] = (is_array($arQuestion["ANSWERS"]) ? $arQuestion["ANSWERS"] : array()); $arVoteAnswers = ($res["ID"] > 0 ? $arVoteQuestions[$res["ID"]]["ANSWERS"] : array()); foreach ($arQuestion["ANSWERS"] as $arAnswer) { $resa = array( "ID" => (array_key_exists($arAnswer["ID"], $arVoteAnswers) ? $arAnswer["ID"] : false), "MESSAGE" => trim($arAnswer["MESSAGE"]), "FIELD_TYPE" => ($res["MULTI"] == "Y" ? 1 : 0)); if (empty($resa["MESSAGE"])){ continue; } if (!!$resa["ID"]) { unset($arVoteAnswers[$resa["ID"]]); } $res["ANSWERS"][] = $resa; } foreach ($arVoteAnswers as $arAnswer) { $res["ANSWERS"][] = array_merge($arAnswer, array("DEL" => "Y")); } if (empty($res["ANSWERS"]) && empty($res["QUESTION"]) && !$res["ID"]) { continue; } if (!!$res["ID"]) { unset($arVoteQuestions[$res["ID"]]); } $arVote["QUESTIONS"][] = $res; } $arVoteParams = array(); if (!empty($arVote["QUESTIONS"])) { $arVoteParams = array( "UNIQUE_TYPE" => $arUserField["SETTINGS"]['UNIQUE'], "DELAY" => intval($arUserField["SETTINGS"]['UNIQUE_IP_DELAY']["DELAY"]), "DELAY_TYPE" => $arUserField["SETTINGS"]['UNIQUE_IP_DELAY']["DELAY_TYPE"]); } if (!VoteVoteEditFromArray($arUserField["SETTINGS"]["CHANNEL_ID"], $arVote["ID"], $arVote, ($res = ($arVoteParams + array("bOnlyCheck" => "Y"))))) { $aMsg[] = array( "id" => $arUserField["FIELD_NAME"], "text" => (($e = $GLOBALS['APPLICATION']->GetException()) && $e ? preg_replace("/\<br(.*?)\>/", " ", $e->GetString()) : GetMessage("VT_UNKNOWN_ERROR_ADD_VOTE")) ); } else { $GLOBALS[__CLASS__.$arUserField["ENTITY_VALUE_ID"]] = array("VOTE" => $arVote, "PARAMS" => $arVoteParams); } } return $aMsg; }
function VoteVoteEditFromArray($CHANNEL_ID, $VOTE_ID = false, $arFields = array(), $params = array()) { $CHANNEL_ID = intVal($CHANNEL_ID); if ($CHANNEL_ID <= 0 || empty($arFields)) { return false; } elseif (CVote::UserGroupPermission($CHANNEL_ID) <= 0) { return false; } $aMsg = array(); $params = is_array($params) ? $params : array(); $params["UNIQUE_TYPE"] = is_set($params, "UNIQUE_TYPE") ? intVal($params["UNIQUE_TYPE"]) : 20; $params["DELAY"] = is_set($params, "DELAY") ? intVal($params["DELAY"]) : 10; $params["DELAY_TYPE"] = is_set($params, "DELAY_TYPE") && in_array($params['DELAY_TYPE'], array("S", "M", "H", "D")) ? $params["DELAY_TYPE"] : "D"; $arVote = array(); $arQuestions = array(); $arFieldsQuestions = array(); $arFieldsVote = array("CHANNEL_ID" => $CHANNEL_ID, "AUTHOR_ID" => $GLOBALS["USER"]->GetID(), "UNIQUE_TYPE" => $params["UNIQUE_TYPE"], "DELAY" => $params["DELAY"], "DESCRIPTION_TYPE" => $params["DELAY_TYPE"]); if (!empty($arFields["DATE_START"])) { $arFieldsVote["DATE_START"] = $arFields["DATE_START"]; } if (!empty($arFields["DATE_END"])) { $arFieldsVote["DATE_END"] = $arFields["DATE_END"]; } if (!empty($arFields["TITLE"])) { $arFieldsVote["TITLE"] = $arFields["TITLE"]; } if (isset($arFields["ACTIVE"])) { $arFieldsVote["ACTIVE"] = $arFields["ACTIVE"]; } if (isset($arFields["NOTIFY"])) { $arFieldsVote["NOTIFY"] = $arFields["NOTIFY"]; } if (isset($arFields["URL"])) { $arFieldsVote["URL"] = $arFields["URL"]; } /************** Fatal errors ***************************************/ if (!CVote::CheckFields("UPDATE", $arFieldsVote)) { $e = $GLOBALS['APPLICATION']->GetException(); $aMsg[] = array("id" => "VOTE_ID", "text" => $e->GetString()); } elseif (intval($VOTE_ID) > 0) { $db_res = CVote::GetByID($VOTE_ID); if (!($db_res && ($res = $db_res->Fetch()))) { $aMsg[] = array("id" => "VOTE_ID", "text" => GetMessage("VOTE_VOTE_NOT_FOUND", array("#ID#", $VOTE_ID))); } elseif ($res["CHANNEL_ID"] != $CHANNEL_ID) { $aMsg[] = array("id" => "CHANNEL_ID", "text" => GetMessage("VOTE_CHANNEL_ID_ERR")); } else { $arVote = $res; $db_res = CVoteQuestion::GetList($arVote["ID"], $by = "s_id", $order = "asc", array(), $is_filtered); if ($db_res && ($res = $db_res->Fetch())) { do { $arQuestions[$res["ID"]] = $res + array("ANSWERS" => array()); } while ($res = $db_res->Fetch()); } $db_res = CVoteAnswer::GetListEx(array("ID" => "ASC"), array("VOTE_ID" => $arVote["ID"])); if ($db_res && ($res = $db_res->Fetch())) { do { $arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res; } while ($res = $db_res->Fetch()); } } } if (!empty($aMsg)) { $e = new CAdminException(array_reverse($aMsg)); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } /************** Fatal errors/***************************************/ if (!empty($arFieldsVote["TITLE"]) && !empty($arVote["TITLE"])) { $q = reset($arQuestions); if ($arVote["TITLE"] == substr($q["QUESTION"], 0, strlen($arVote["TITLE"]))) { unset($arFieldsVote["TITLE"]); } } /************** Check Data *****************************************/ // Questions $arFields["QUESTIONS"] = is_array($arFields["QUESTIONS"]) ? $arFields["QUESTIONS"] : array(); $iQuestions = 0; foreach ($arFields["QUESTIONS"] as $key => $arQuestion) { if ($arQuestion["DEL"] != "Y") { $arQuestion["ID"] = intval($arQuestion["ID"]); $arQuestion = array("ID" => $arQuestion["ID"] > 0 && is_set($arQuestions, $arQuestion["ID"]) ? $arQuestion["ID"] : false, "QUESTION" => trim($arQuestion["QUESTION"]), "ANSWERS" => is_array($arQuestion["ANSWERS"]) ? $arQuestion["ANSWERS"] : array()); $arAnswers = $arQuestion["ID"] > 0 ? $arQuestions[$arQuestion["ID"]]["ANSWERS"] : array(); foreach ($arQuestion["ANSWERS"] as $keya => $arAnswer) { $arAnswer["ID"] = intVal($arAnswer["ID"]); $arAnswer["MESSAGE"] = trim($arAnswer["MESSAGE"]); if (!empty($arAnswer["MESSAGE"]) && $arAnswer["DEL"] != "Y") { $arQuestion["ANSWERS"][$keya] = array("MESSAGE" => $arAnswer["MESSAGE"], "FIELD_TYPE" => $arAnswer["FIELD_TYPE"]); if ($arAnswer["ID"] > 0 && is_set($arAnswers, $arAnswer["ID"])) { $arQuestion["ANSWERS"][$keya]["ID"] = $arAnswer["ID"]; unset($arAnswers[$arAnswer["ID"]]); } } } } if ($arQuestion["DEL"] == "Y" || empty($arQuestion["QUESTION"]) || empty($arQuestion["ANSWERS"])) { if ($arQuestion["DEL"] != "Y" && !(empty($arQuestion["QUESTION"]) && empty($arQuestion["ANSWERS"]))) { $aMsg[] = array("id" => "QUESTION_" . $key, "text" => empty($arQuestion["QUESTION"]) ? GetMessage("VOTE_QUESTION_EMPTY", array("#NUMBER#" => $key)) : GetMessage("VOTE_ANSWERS_EMPTY", array("#QUESTION#" => $arQuestion["QUESTION"]))); } continue; } if ($arQuestion["ID"] > 0) { unset($arQuestions[$arQuestion["ID"]]); foreach ($arAnswers as $arAnswer) { $arQuestion["ANSWERS"][] = $arAnswer + array("DEL" => "Y"); } } $iQuestions++; $arFieldsQuestions[$key] = $arQuestion; } foreach ($arQuestions as $arQuestion) { $arFieldsQuestions[] = $arQuestion + array("DEL" => "Y"); } if (!empty($aMsg)) { $e = new CAdminException(array_reverse($aMsg)); $GLOBALS["APPLICATION"]->ThrowException($e); return false; } elseif (empty($arFieldsQuestions) && $VOTE_ID <= 0) { return true; } elseif ($params["bOnlyCheck"] == "Y") { return true; } /************** Check Data/*****************************************/ /************** Main actions with return ***************************/ if (empty($arFieldsVote["TITLE"])) { $q = reset($arFieldsQuestions); $arFieldsVote["TITLE"] = null; do { if ($q["DEL"] != "Y") { $arFieldsVote["TITLE"] = $q["QUESTION"]; break; } } while ($q = next($arFieldsQuestions)); reset($arFieldsQuestions); } if (empty($arVote)) { $arFieldsVote["UNIQUE_TYPE"] = $params["UNIQUE_TYPE"]; $arFieldsVote["DELAY"] = $params["DELAY"]; $arFieldsVote["DELAY_TYPE"] = $params["DELAY_TYPE"]; $arVote["ID"] = intval(CVote::Add($arFieldsVote)); } else { CVote::Update($VOTE_ID, $arFieldsVote); } if ($iQuestions > 0 && $arVote["ID"] > 0) { $iQuestions = 0; foreach ($arFieldsQuestions as $arQuestion) { if ($arQuestion["DEL"] == "Y") { CVoteQuestion::Delete($arQuestion["ID"]); continue; } elseif ($arQuestion["ID"] > 0) { $arQuestion["C_SORT"] = ($iQuestions + 1) * 10; CVoteQuestion::Update($arQuestion["ID"], $arQuestion); } else { $arQuestion["C_SORT"] = ($iQuestions + 1) * 10; $arQuestion["VOTE_ID"] = $arVote["ID"]; $arQuestion["ID"] = intVal(CVoteQuestion::Add($arQuestion)); if ($arQuestion["ID"] <= 0) { continue; } } $iQuestions++; $iAnswers = 0; foreach ($arQuestion["ANSWERS"] as $arAnswer) { if ($arAnswer["DEL"] == "Y") { CVoteAnswer::Delete($arAnswer["ID"]); continue; } if ($arAnswer["ID"] > 0) { $arAnswer["C_SORT"] = $iAnswers * 10; CVoteAnswer::Update($arAnswer["ID"], $arAnswer); } else { $arAnswer["QUESTION_ID"] = $arQuestion["ID"]; $arAnswer["C_SORT"] = ($iAnswers + 1) * 10; $arAnswer["ID"] = intVal(CVoteAnswer::Add($arAnswer)); if ($arAnswer["ID"] <= 0) { continue; } } $iAnswers++; } if ($iAnswers <= 0) { CVoteQuestion::Delete($arQuestion["ID"]); $iQuestions--; } } } if (intVal($arVote["ID"]) <= 0) { return false; } elseif ($iQuestions <= 0) { CVote::Delete($arVote["ID"]); return 0; } return $arVote["ID"]; /************** Actions/********************************************/ /* $arFields = array( "ID" => 345, "TITLE" => "test", "...", "QUESTIONS" => array( array( "ID" => 348, "QUESTION" => "test", "ANSWERS" => array( array( "ID" => 340, "MESSAGE" => "test"), array( "ID" => 0, "MESSAGE" => "test"), array( "ID" => 350, "DEL" => "Y", "MESSAGE" => "test") ) ), array( "ID" => 351, "DEL" => "Y", "QUESTION" => "test", "ANSWERS" => array( array( "ID" => 0, "MESSAGE" => "test"), array( "ID" => 478, "DEL" => "Y", "MESSAGE" => "test") ) ), array( "ID" => 0, "QUESTION" => "test", "ANSWERS" => array( array( "ID" => 0, "MESSAGE" => "test"), ) ), ) ); */ }
********************************************************************/ /******************************************************************** Data ********************************************************************/ $arResult["CONTROL_UID"] = md5(randString(15)); $arResult["VOTES"] = array(); if ($arParams["bVarsFromForm"]) { $arResult["VOTES"] = is_array($_POST[$arParams["~INPUT_NAME"]]) ? $_POST[$arParams["~INPUT_NAME"] . "_DATA"] : array($_POST[$arParams["~INPUT_NAME"] . "_DATA"]); } else { if (!empty($arParams["INPUT_VALUE"])) { $db_res = CVote::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arParams["CHANNEL_ID"], "ACTIVE" => "Y", "@ID" => $arParams["INPUT_VALUE"])); while ($res = $db_res->Fetch()) { $arResult["VOTES"][$res["ID"]] = $res + array("QUESTIONS" => array()); } if (!empty($arResult["VOTES"])) { $db_res = CVoteQuestion::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arParams["CHANNEL_ID"], "ACTIVE" => "Y", "@VOTE_ID" => array_keys($arResult["VOTES"]))); while ($res = $db_res->Fetch()) { $arResult["VOTES"][$res["VOTE_ID"]]["QUESTIONS"][$res["ID"]] = $res + array("ANSWERS" => array()); } $db_res = CVoteAnswer::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arParams["CHANNEL_ID"], "ACTIVE" => "Y", "@VOTE_ID" => array_keys($arResult["VOTES"]))); while ($res = $db_res->Fetch()) { if ($res["FIELD_TYPE"] == 1) { $arResult["VOTES"][$res["VOTE_ID"]]["QUESTIONS"][$res["QUESTION_ID"]]["MULTI"] = "Y"; } $arResult["VOTES"][$res["VOTE_ID"]]["QUESTIONS"][$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res; } } } } if (!empty($arResult["VOTES"])) { function htmlspecialcharsmix(&$mixed)
public static function Copy($ID) { global $DB; $err_mess = CVote::err_mess() . "<br>Function: Copy<br>Line: "; $ID = intval($ID); if ($ID <= 0) { return false; } $rCurrentVote = CVote::GetByID($ID); if (!($arCurrentVote = $rCurrentVote->Fetch())) { return false; } unset($arCurrentVote["ID"]); $arCurrentVote['ACTIVE'] = "N"; $newImageId = false; if (intval($arCurrentVote['IMAGE_ID'] > 0)) { $imageId = $arCurrentVote['IMAGE_ID']; $newImageId = CFile::CopyFile($imageId); $arCurrentVote["IMAGE_ID"] = NULL; } $newID = CVote::Add($arCurrentVote); if ($newID === false) { return false; } $DB->Update("b_vote", array("COUNTER" => "0"), "WHERE ID=" . $newID, $err_mess . __LINE__); if ($newImageId) { $DB->Update("b_vote", array("IMAGE_ID" => $newImageId), "WHERE ID=" . $newID, $err_mess . __LINE__); } $state = true; $rQuestions = CVoteQuestion::GetList($ID, $by, $order, array(), $is_filtered); while ($arQuestion = $rQuestions->Fetch()) { $state = $state && CVoteQuestion::Copy($arQuestion['ID'], $newID) !== false; } if ($state == true) { return $newID; } else { return $state; } }
case "delete": if (!CVoteQuestion::Delete($ID)) { $lAdmin->AddGroupError(GetMessage("DELETE_ERROR"), $ID); } break; case "activate": case "deactivate": CVoteQuestion::setActive($ID, $_REQUEST['action'] == "activate"); break; } } } } } } $rsData = CVoteQuestion::GetList($VOTE_ID, $by, $order, $arFilter, $is_filtered); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("VOTE_PAGES"))); $lAdmin->bMultipart = true; $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "s_id", "default" => true), array("id" => "TIMESTAMP_X", "content" => GetMessage("VOTE_TIMESTAMP_X"), "sort" => "s_timestamp_x", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("VOTE_ACTIVE"), "sort" => "s_active", "default" => true), array("id" => "DIAGRAM", "content" => GetMessage("VOTE_DIAGRAM"), "sort" => "s_diagram", "default" => true), array("id" => "REQUIRED", "content" => GetMessage("VOTE_REQUIRED"), "sort" => "s_required", "default" => true), array("id" => "C_SORT", "content" => GetMessage("VOTE_C_SORT"), "sort" => "s_c_sort", "default" => true), array("id" => "IMAGE_ID", "content" => GetMessage("VOTE_IMAGE_ID"), "default" => true), array("id" => "QUESTION", "content" => GetMessage("VOTE_QUESTION"), "sort" => "s_question", "default" => true))); while ($arRes = $rsData->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arRes); $row->AddViewField("ACTIVE", $f_ACTIVE == "Y" ? GetMessage("MAIN_YES") : GetMessage("MAIN_NO")); $row->AddViewField("DIAGRAM", $f_DIAGRAM == "Y" ? GetMessage("MAIN_YES") : GetMessage("MAIN_NO")); $row->AddViewField("REQUIRED", $f_REQUIRED == "Y" ? GetMessage("MAIN_YES") : GetMessage("MAIN_NO")); $row->AddViewField("QUESTION", $arRes["QUESTION_TYPE"] == "text" ? htmlspecialcharsex($arRes["QUESTION"]) : HTMLToTxt($arRes["QUESTION"])); $row->AddViewFileField("IMAGE_ID", array("IMAGE" => "Y", "PATH" => "Y", "FILE_SIZE" => "Y", "DIMENSIONS" => "Y", "IMAGE_POPUP" => "Y")); if ($VOTE_RIGHT == "W") { $row->AddViewField("SITE", trim($str, " ,")); $row->AddCheckField("ACTIVE");
$arParams["SHOW_VOTE"] = $arParams["PERMISSION"] == "A" ? "N" : $arParams["SHOW_VOTE"]; } /************** Message ********************************************/ if ($arParams["MESSAGE_TYPE"] == "EDIT") { $res = CForumMessage::GetByIDEx($arParams["MID"], array("GET_TOPIC_INFO" => "Y")); if (!is_array($res) || empty($res)) { $arError[] = array("id" => "mid_is_lost", "text" => GetMessage("F_MID_IS_LOST")); } elseif ($arParams["MODE"] != "GROUP" && $res["FORUM_ID"] != $arParams["FID"]) { $arError[] = array("id" => "mid_is_lost", "text" => GetMessage("F_MID_IS_LOST_IN_FORUM")); } elseif ($arParams["MODE"] == "GROUP" && $res["TOPIC_INFO"]["SOCNET_GROUP_ID"] == $arParams["SOCNET_GROUP_ID"] || $arParams["MODE"] != "GROUP" && $res["TOPIC_INFO"]["OWNER_ID"] == $arParams["USER_ID"]) { $arResult["MESSAGE"] = $res; $arParams["TID"] = $res["TOPIC_INFO"]["ID"]; $arResult["TOPIC"] = $res["TOPIC_INFO"]; $arResult["TOPIC_FILTER"] = CForumTopic::GetByID($arParams["TID"]); if ($arParams["SHOW_VOTE"] == "Y" && $arResult["MESSAGE"]["PARAM1"] == "VT" && intVal($arResult["MESSAGE"]["PARAM2"]) > 0) { $db_res = CVoteQuestion::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arParams["VOTE_CHANNEL_ID"], "VOTE_ID" => $arResult["MESSAGE"]["PARAM2"])); if ($db_res && ($res = $db_res->Fetch())) { do { $arResult["~QUESTIONS"][$res["ID"]] = $res + array("ANSWERS" => array()); } while ($res = $db_res->Fetch()); } if (!empty($arResult["~QUESTIONS"])) { $db_res = CVoteAnswer::GetListEx(array("ID" => "ASC"), array("VOTE_ID" => $arResult["MESSAGE"]["PARAM2"])); if ($db_res && ($res = $db_res->Fetch())) { do { if (is_set($arResult["~QUESTIONS"], $res["QUESTION_ID"])) { $arResult["~QUESTIONS"][$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res; } } while ($res = $db_res->Fetch()); } }
function Reset($ID) { global $DB; $err_mess = CVoteQuestion::err_mess() . "<br>Function: Reset<br>Line: "; $ID = intval($ID); // удаляем вопросы при анкетировании $DB->Query("DELETE FROM b_vote_event_question WHERE QUESTION_ID='{$ID}'", false, $err_mess . __LINE__); // обнуляем счетчик у вопроса $arFields = array("COUNTER" => "0"); $DB->Update("b_vote_question", $arFields, "WHERE ID='{$ID}'", $err_mess . __LINE__); // обнуляем счетчики у ответов $arFields = array("COUNTER" => "0"); $DB->Update("b_vote_answer", $arFields, "WHERE QUESTION_ID='{$ID}'", $err_mess . __LINE__); }
$arResult["TOPIC"] = $arMessage["TOPIC_INFO"]; $arResult["TOPIC_FILTER"] = CForumTopic::GetByID($arMessage["TOPIC_ID"]); $arResult["MESSAGE"] = $arMessage; $arResult["MESSAGE"]["FILES"] = array(); $db_res = CForumFiles::GetList(array(), array("MESSAGE_ID" => $arParams["MID"])); if ($db_res && ($res = $db_res->Fetch())) { do { $arResult["MESSAGE"]["FILES"][$res["FILE_ID"]] = $res; } while ($res = $db_res->Fetch()); } if ($arParams["SHOW_VOTE"] == "Y" && $arMessage["PARAM1"] == "VT" && intVal($arMessage["PARAM2"]) > 0) { $db_vote = CVote::GetByID(intVal($arMessage["PARAM2"])); if ($db_vote && ($arVote = $db_vote->GetNext())) { $arResult['DATE_END'] = $arVote['DATE_END']; } $db_res = CVoteQuestion::GetListEx(array("ID" => "ASC"), array("CHANNEL_ID" => $arParams["VOTE_CHANNEL_ID"], "VOTE_ID" => $arMessage["PARAM2"])); if ($db_res && ($res = $db_res->Fetch())) { do { $arResult["~QUESTIONS"][$res["ID"]] = $res; $arResult["~QUESTIONS"][$res["ID"]]["ANSWERS"] = array(); } while ($res = $db_res->Fetch()); } if (!empty($arResult["~QUESTIONS"])) { $db_res = CVoteAnswer::GetListEx(array("ID" => "ASC"), array("VOTE_ID" => $arMessage["PARAM2"])); if ($db_res && ($res = $db_res->Fetch())) { do { if (is_set($arResult["~QUESTIONS"], $res["QUESTION_ID"])) { $arResult["~QUESTIONS"][$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res; if (intVal($res["FIELD_TYPE"]) == 1) { $arResult["~QUESTIONS"][$res["QUESTION_ID"]]["MULTI"] = "Y"; }
while ($res = $db_res->Fetch()) { $data = array("ID" => $res["ID"]); if (array_key_exists("PERSONAL_PHOTO", $res)) { $arFileTmp = CFile::ResizeImageGet($res["PERSONAL_PHOTO"], array("width" => 21, "height" => 21), BX_RESIZE_IMAGE_EXACT, false); $data["PHOTO"] = CFile::ShowImage($arFileTmp["src"], 21, 21, "border=0"); } $data["FULL_NAME"] = CUser::FormatName($_REQUEST["NAME_TEMPLATE"], $res); $data["URL"] = CUtil::JSEscape(CComponentEngine::MakePathFromTemplate($_REQUEST["URL_TEMPLATE"], array("UID" => $res["ID"], "user_id" => $res["ID"], "USER_ID" => $res["ID"]))); $arUsers[$res["ID"]] = $data; } $arVoteList["items"] = array(); foreach ($_REQUEST["ID"] as $id) { $arVoteList["items"][] = $arUsers[$id]; } if ($arParams["CACHE_TIME"] > 0) { $cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path); if (!!$arEventsInfo) { $db_res = CVoteQuestion::GetByID($arEventsInfo["QUESTION_ID"]); if ($db_res && ($res = $db_res->Fetch())) { CVoteCacheManager::SetTag($cache_path, "V", $res["VOTE_ID"]); } } $cache->EndDataCache($arVoteList); } } } } $APPLICATION->RestartBuffer(); Header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); echo CUtil::PhpToJsObject($arVoteList); die;
function OnAfterVoteQuestionUpdate($ID, $arFields) { if (array_key_exists("VOTE_ID", $arFields)) { self::ClearTag("V", $arFields["VOTE_ID"]); } else { $db_res = CVoteQuestion::GetByID($ID); if ($db_res && ($res = $db_res->Fetch())) { self::ClearTag("V", $res["VOTE_ID"]); } } self::ClearTag("Q", $ID); }
public static function Reset($ID, $VOTE_ID = false) { global $DB; $err_mess = CVoteQuestion::err_mess() . "<br>Function: Reset<br>Line: "; $ID = intVal($ID) > 0 ? intVal($ID) : false; $VOTE_ID = intVal($VOTE_ID) > 0 ? intVal($VOTE_ID) : false; if ($ID > 0) { $strSqlID = "" . $ID . ""; } elseif ($VOTE_ID > 0) { $strSqlID = "SELECT Q.ID FROM b_vote_question Q WHERE Q.VOTE_ID=" . $VOTE_ID; } else { return false; } // drop answer events $DB->Query("DELETE FROM b_vote_event_answer WHERE EVENT_QUESTION_ID IN (\n\t\t\tSELECT ID FROM b_vote_event_question WHERE QUESTION_ID IN (" . $strSqlID . "))", false, $err_mess . __LINE__); // drop question events $DB->Query("DELETE FROM b_vote_event_question WHERE QUESTION_ID IN (" . $strSqlID . ")", false, $err_mess . __LINE__); // zeroize answers counter $arFields = array("COUNTER" => "0"); $DB->Update("b_vote_answer", $arFields, "WHERE QUESTION_ID IN (" . $strSqlID . ")", $err_mess . __LINE__); // zeroize questions counter $arFields = array("COUNTER" => "0"); $DB->Update("b_vote_question", $arFields, "WHERE " . ($ID > 0 ? "ID = " . $ID . "" : "VOTE_ID = " . $VOTE_ID . ""), $err_mess . __LINE__); /***************** Cleaning cache **********************************/ if ($ID === false) { unset($GLOBALS["VOTE_CACHE"]["QUESTION"]); } else { unset($GLOBALS["VOTE_CACHE"]["QUESTION"][$ID]); } /***************** Cleaning cache/**********************************/ return true; }
$imageId = $arCurrentVote['IMAGE_ID']; $newImageId = CFile::CopyFile($imageId); $arCurrentVote["IMAGE_ID"] = NULL; } $newID = $ID; if ($newID === false) { return false; } $DB->Update("b_vote", array("COUNTER" => "0"), "WHERE ID=" . $newID, $err_mess . __LINE__); if ($newImageId) { $DB->Update("b_vote", array("IMAGE_ID" => $newImageId), "WHERE ID=" . $newID, $err_mess . __LINE__); } $state = true; $rQuestions = CVoteQuestion::GetList($oldID, $by, $order, array(), $is_filtered); while ($arQuestion = $rQuestions->Fetch()) { $state = $state && CVoteQuestion::Copy($arQuestion['ID'], $newID) !== false; } } if (!empty($save)) { if (!empty($_REQUEST["return_url"])) { LocalRedirect($_REQUEST["return_url"]); } LocalRedirect("vote_list.php?lang=" . LANGUAGE_ID . "&CHANNEL_ID=" . $arFields["CHANNEL_ID"]); } LocalRedirect($APPLICATION->GetCurPage() . "?lang=" . LANGUAGE_ID . "&CHANNEL_ID=" . $arFields["CHANNEL_ID"] . "&ID=" . $ID . "&" . $tabControl->ActiveTabParam() . (!empty($_REQUEST["return_url"]) ? "&return_url=" . urlencode($_REQUEST["return_url"]) : "")); } } /******************************************************************** /ACTIONS ********************************************************************/ if ($ID > 0) {
CVoteEvent::SetValid($ID, $varVALID); break; } } } /************** Initial list - Get data ****************************/ $rsData = CVoteEvent::GetList($by, $order, $arFilter, $is_filtered); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); /************** Initial list - Navigation **************************/ $lAdmin->NavText($rsData->GetNavPrint(GetMessage("VOTE_PAGES"))); $headers = array(array("id" => "ID", "content" => "ID", "sort" => "s_id", "default" => true), array("id" => "VOTE_USER_ID", "content" => GetMessage("VOTE_USER"), "sort" => "s_vote_user", "default" => true), array("id" => "STAT_SESSION_ID", "content" => GetMessage("VOTE_SESSION"), "sort" => "s_session", "default" => true), array("id" => "IP", "content" => "IP", "sort" => "s_ip", "default" => true), array("id" => "DATE_VOTE", "content" => GetMessage("VOTE_DATE"), "sort" => "s_date", "default" => true), array("id" => "VALID", "content" => GetMessage("VOTE_VALID"), "sort" => "s_valid", "default" => true)); $by = 'c_sort'; $order = 'asc'; $arAllQuestions = array(); $rsQuestions = CVoteQuestion::GetList($VOTE_ID, $by, $order, array(), $is_filtered); while ($arQuestion = $rsQuestions->Fetch()) { $headers[] = array("id" => "Q" . $arQuestion["ID"], "content" => htmlspecialcharsbx($arQuestion["QUESTION"]), "sort" => '', "default" => true); $arAllAnswers = array(); $rsAnswers = CVoteAnswer::GetList($arQuestion["ID"]); while ($arAnswer = $rsAnswers->Fetch()) { $arAllAnswers[$arAnswer['ID']] = $arAnswer; } $arAllQuestions[] = array('ID' => $arQuestion["ID"], 'ANSWERS' => $arAllAnswers); } $lAdmin->AddHeaders($headers); $arrUsers = array(); while ($arRes = $rsData->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arRes); $row->AddViewField("VALID", $f_VALID == "Y" ? GetMessage("MAIN_YES") : GetMessage("MAIN_NO")); $row->AddViewField("VOTE_USER_ID", "<a title=\"" . GetMessage("VOTE_USER_LIST_TITLE") . "\" href=\"vote_user_list.php?lang=" . LANGUAGE_ID . "&find_id={$f_VOTE_USER_ID}&set_filter=Y\">{$f_VOTE_USER_ID}</a>");
$_FILES["IMAGE_ID"] = is_array($_FILES["IMAGE_ID"]) ? $_FILES["IMAGE_ID"] : array(); $arFields = array("ACTIVE" => isset($_REQUEST["ACTIVE"]) ? $_REQUEST["ACTIVE"] : 'N', "VOTE_ID" => $VOTE_ID, "C_SORT" => $_REQUEST["C_SORT"], "QUESTION" => $_REQUEST["QUESTION"], "QUESTION_TYPE" => $_REQUEST["QUESTION_TYPE"], "IMAGE_ID" => $_FILES["IMAGE_ID"] + ($_REQUEST["IMAGE_ID_del"] == "Y" ? array("del" => "Y") : array()), "DIAGRAM" => isset($_REQUEST["DIAGRAM"]) ? $_REQUEST["DIAGRAM"] : 'N', "REQUIRED" => isset($_REQUEST["REQUIRED"]) ? $_REQUEST["REQUIRED"] : 'N', "DIAGRAM_TYPE" => $_REQUEST["DIAGRAM_TYPE"], "TEMPLATE" => $_REQUEST["TEMPLATE"], "TEMPLATE_NEW" => $_REQUEST["TEMPLATE_NEW"]); foreach ($_REQUEST["ANSWER"] as $pid) { if (intval($pid) <= 0) { continue; } $arAnswer = array("ID" => intVal($_REQUEST["ANSWER_ID_" . $pid]), "QUESTION_ID" => $ID, "ACTIVE" => $_REQUEST["ACTIVE_" . $pid] == 'Y' ? 'Y' : 'N', "C_SORT" => $_REQUEST["C_SORT_" . $pid], "MESSAGE" => $_REQUEST["MESSAGE_" . $pid] != ' ' ? trim($_REQUEST["MESSAGE_" . $pid]) : ' ', "FIELD_TYPE" => $_REQUEST["FIELD_TYPE_" . $pid], "FIELD_WIDTH" => intVal($_REQUEST["FIELD_WIDTH_" . $pid]), "FIELD_HEIGHT" => intVal($_REQUEST["FIELD_HEIGHT_" . $pid]), "FIELD_PARAM" => trim($_REQUEST["FIELD_PARAM_" . $pid]), "COLOR" => trim($_REQUEST["COLOR_" . $pid])); $arAnswersFields[$pid] = $arAnswer; if ($arAnswer["ID"] <= 0 && empty($arAnswer["MESSAGE"])) { unset($arAnswersFields[$pid]); } } if ($ID > 0) { $result = CVoteQuestion::Update($ID, $arFields); } else { $result = $ID = CVoteQuestion::Add($arFields); } $aMsg = array(); if (!$result) { $bVarsFromForm = true; } else { foreach ($arAnswersFields as $pid => $arAnswer) { $bResult = true; $APPLICATION->ResetException(); if ($_REQUEST["del_" . $pid] == "Y") { if ($arAnswer["ID"] > 0) { CVoteAnswer::Delete($arAnswer["ID"]); } unset($arAnswersFields[$pid]); } elseif ($arAnswer["ID"] > 0) { $bResult = CVoteAnswer::Update($arAnswer["ID"], $arAnswer);
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule("vote")) { return; } $arrChannels = array(); $arrVotes = array(); $arrQuestions = array(); $arDiagramType = array("-" => GetMessage("VOTE_BY_DEFAULT")) + GetVoteDiagramArray(); $rs = CVoteChannel::GetList($v1, $v2, array(), $v3); while ($arChannel = $rs->Fetch()) { $arrChannels[$arChannel["SID"]] = "[" . $arChannel["SID"] . "] " . $arChannel["TITLE"]; $rsVotes = CVote::GetList($v1, $v2, array("CHANNEL_ID" => $arChannel["ID"]), $v3); while ($arVote = $rsVotes->Fetch()) { $arrVotes[$arVote["ID"]] = "[" . $arVote["ID"] . "] (" . $arChannel["SID"] . ") " . TruncateText($arVote["TITLE"], 40); } } if (intval($arCurrentValues["VOTE_ID"]) > 0) { $rsQuestions = CVoteQuestion::GetList($arCurrentValues["VOTE_ID"], $vv1, $vv2, array(), $vv3); while ($arQuestion = $rsQuestions->Fetch()) { $QUESTION = $arQuestion["QUESTION_TYPE"] == "html" ? strip_tags($arQuestion["QUESTION"]) : $arQuestion["QUESTION"]; $QUESTION = TruncateText($QUESTION, 30); $arrQuestions["QUESTION_DIAGRAM_" . $arQuestion["ID"]] = array("NAME" => str_replace("#QUESTION#", $QUESTION, GetMessage("VOTE_TEMPLATE_FOR_QUESTION")), "TYPE" => "LIST", "ADDITIONAL_VALUES" => "N", "VALUES" => $arDiagramType); } } $arComponentParameters = array("PARAMETERS" => array("VOTE_ID" => array("NAME" => GetMessage("VOTE_POLL_ID"), "TYPE" => "LIST", "VALUES" => $arrVotes, "DEFAULT" => "={\$_REQUEST[\"VOTE_ID\"]}", "REFRESH" => "Y", "PARENT" => "BASE", "MULTIPLE" => "N", "ADDITIONAL_VALUES" => "Y"), "VOTE_ALL_RESULTS" => array("PARENT" => "BASE", "NAME" => GetMessage("VOTE_ALL_RESULTS"), "TYPE" => "CHECKBOX", "DEFAULT" => "N"), "CACHE_TIME" => array("DEFAULT" => 1200))); $arComponentParameters["PARAMETERS"] = array_merge($arComponentParameters["PARAMETERS"], $arrQuestions);
function GetVoteDataByID($VOTE_ID, &$arChannel, &$arVote, &$arQuestions, &$arAnswers, &$arDropDown, &$arMultiSelect, &$arGroupAnswers, $arAddParams = "N") { $VOTE_ID = intval($VOTE_ID); $arChannel = array(); $arVote = array(); $arQuestions = array(); $arAnswers = array(); $arDropDown = array(); $arMultiSelect = array(); $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID] = (is_array($GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]) ? $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID] : array()); if (empty($GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID])) { $db_res = CVote::GetByIDEx($VOTE_ID); if (!($db_res && $arVote = $db_res->GetNext())) { return false; } foreach ($arVote as $key => $res) { if (strpos($key, "CHANNEL_") === 0) { $arChannel[substr($key, 8)] = $res; } elseif (strpos($key, "~CHANNEL_") === 0) { $arChannel["~".substr($key, 9)] = $res; } } $by = "s_c_sort"; $order = "asc"; $db_res = CVoteQuestion::GetList($VOTE_ID, $by, $order, array("ACTIVE" => "Y"), $is_filtered); while ($res = $db_res->GetNext()) { $arQuestions[$res["ID"]] = $res + array("ANSWERS" => array()); } if (!empty($arQuestions)) { $db_res = CVoteAnswer::GetListEx( array("C_SORT" => "ASC"), array("VOTE_ID" => $VOTE_ID, "ACTIVE" => "Y", "@QUESTION_ID" => array_keys($arQuestions))); while ($res = $db_res->GetNext()) { $arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ID"]] = $res; $arAnswers[$res["QUESTION_ID"]][] = $res; switch ($res["FIELD_TYPE"]) // dropdown and multiselect and text inputs { case 2: $arDropDown[$res["QUESTION_ID"]] = (is_array($arDropDown[$res["QUESTION_ID"]]) ? $arDropDown[$res["QUESTION_ID"]] : array("reference" => array(), "reference_id" => array(), "~reference" => array())); $arDropDown[$res["QUESTION_ID"]]["reference"][] = $res["MESSAGE"]; $arDropDown[$res["QUESTION_ID"]]["~reference"][] = $res["~MESSAGE"]; $arDropDown[$res["QUESTION_ID"]]["reference_id"][] = $res["ID"]; break; case 3: $arMultiSelect[$res["QUESTION_ID"]] = (is_array($arMultiSelect[$res["QUESTION_ID"]]) ? $arMultiSelect[$res["QUESTION_ID"]] : array("reference" => array(), "reference_id" => array(), "~reference" => array())); $arMultiSelect[$res["QUESTION_ID"]]["reference"][] = $res["MESSAGE"]; $arMultiSelect[$res["QUESTION_ID"]]["~reference"][] = $res["~MESSAGE"]; $arMultiSelect[$res["QUESTION_ID"]]["reference_id"][] = $res["ID"]; break; } } $event_id = intval($arAddParams["bRestoreVotedData"] == "Y" && !!$_SESSION["VOTE"]["VOTES"][$VOTE_ID] ? $_SESSION["VOTE"]["VOTES"][$VOTE_ID] : 0); $db_res = CVoteEvent::GetUserAnswerStat($VOTE_ID, array("bGetMemoStat" => "N", "bGetEventResults" => $event_id)); if ($db_res && ($res = $db_res->Fetch())) { do { if (isset($arQuestions[$res["QUESTION_ID"]]) && is_array($arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]]) && is_array($res)) { $arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]] += $res; if ($event_id > 0 && !empty($res["RESTORED_ANSWER_ID"])) { switch ($arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]]["FIELD_TYPE"]): case 0: // radio case 2: // dropdown list $fieldName = ($arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]]["FIELD_TYPE"] == 0 ? "vote_radio_" : "vote_dropdown_").$res["QUESTION_ID"]; $_REQUEST[$fieldName] = $res["RESTORED_ANSWER_ID"]; break; case 1: // checkbox case 3: // multiselect list $fieldName = ($arQuestions[$res["QUESTION_ID"]]["ANSWERS"][$res["ANSWER_ID"]]["FIELD_TYPE"] == 1 ? "vote_checkbox_" : "vote_multiselect_").$res["QUESTION_ID"]; $_REQUEST[$fieldName] = (is_array($_REQUEST[$fieldName]) ? $_REQUEST[$fieldName] : array()); $_REQUEST[$fieldName][] = $res["ANSWER_ID"]; break; case 4: // field case 5: // text // do not restored break; endswitch; } } } while ($res = $db_res->Fetch()); } } reset($arChannel); reset($arVote); reset($arQuestions); reset($arDropDown); reset($arMultiSelect); reset($arAnswers); $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID] = array( "V" => $arVote, "C" => $arChannel, "QA" => array( "Q" => $arQuestions, "A" => $arAnswers, "M" => $arMultiSelect, "D" => $arDropDown, "G" => array(), "GA" => "N" ) ); } if ($arAddParams["bGetMemoStat"] == "Y" && $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["GA"] == "N") { $db_res = CVoteEvent::GetUserAnswerStat($VOTE_ID, array("bGetMemoStat" => "Y")); while($res = $db_res->GetNext(true, false)) { $arGroupAnswers[$res['ANSWER_ID']][] = $res; } $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["G"] = $arGroupAnswers; $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["GA"] = "Y"; } $arVote = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["V"]; $arChannel = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["C"]; $arQuestions = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["Q"]; $arAnswers = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["A"]; $arMultiSelect = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["M"]; $arDropDown = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["D"]; $arGroupAnswers = $GLOBALS["VOTE_CACHE_VOTING"][$VOTE_ID]["QA"]["G"]; return $arVote["ID"]; }