Exemple #1
0
 function WF_UnLock($LAST_ID, $bWorkFlow = true)
 {
     global $DB, $USER;
     $LAST_ID = intval($LAST_ID);
     $USER_ID = is_object($USER) ? intval($USER->GetID()) : 0;
     if ($bWorkFlow === true) {
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tWF_PARENT_ELEMENT_ID,\n\t\t\t\t\tWF_LOCKED_BY\n\t\t\t\tFROM\n\t\t\t\t\tb_iblock_element\n\t\t\t\tWHERE\n\t\t\t\t\tID = " . $LAST_ID . "\n\t\t\t";
         $z = $DB->Query($strSql, false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__);
         $zr = $z->Fetch();
         if ($zr && ($zr["WF_LOCKED_BY"] == $USER_ID || CModule::IncludeModule('workflow') && CWorkflow::IsAdmin())) {
             $PARENT_ID = intval($zr["WF_PARENT_ELEMENT_ID"]);
             $DB->Query("\n\t\t\t\t\tUPDATE b_iblock_element\n\t\t\t\t\tSET\n\t\t\t\t\t\tWF_DATE_LOCK = null,\n\t\t\t\t\t\tWF_LOCKED_BY = null\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tID in (" . $LAST_ID . ", " . $PARENT_ID . ")\n\t\t\t\t\t\tOR WF_PARENT_ELEMENT_ID = " . $PARENT_ID . "\n\t\t\t\t", false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__);
         }
     } else {
         $DB->Query("\n\t\t\t\tUPDATE b_iblock_element\n\t\t\t\tSET\n\t\t\t\t\tWF_DATE_LOCK = null,\n\t\t\t\t\tWF_LOCKED_BY = null\n\t\t\t\tWHERE\n\t\t\t\t\tID = " . $LAST_ID, false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__);
     }
 }
Exemple #2
0
			$STATUS_PERMISSION = 2;
		else
			$STATUS_PERMISSION = CIBlockElement::WF_GetStatusPermission($arRes["WF_STATUS_ID"]);

		$intMinPerm = 2;

		$arUnLock = Array(
			"ICON" => "unlock",
			"TEXT" => GetMessage("IBLIST_A_UNLOCK"),
			"TITLE" => GetMessage("IBLIST_A_UNLOCK_ALT"),
			"ACTION" => "if(confirm('".GetMessageJS("IBLIST_A_UNLOCK_CONFIRM")."')) ".$lAdmin->ActionDoGroup($f_TYPE.$arRes_orig['ID'], "unlock", $sThisSectionUrl),
		);

		if ($arRes_orig['LOCK_STATUS']=="red")
		{
			if (CWorkflow::IsAdmin())
				$arActions[] = $arUnLock;
		}
		else
		{
			/*
			 * yellow unlock
			 * edit
			 * copy
			 * history
			 * view (?)
			 * edit_orig (?)
			 * delete
			 */
		if (
				CIBlockElementRights::UserHasRightTo($IBLOCK_ID, $f_ID, "element_edit")
 public static function WF_GetStatusPermission($STATUS_ID, $ID = false)
 {
     global $DB, $USER;
     $result = false;
     if (CModule::IncludeModule("workflow")) {
         if (CWorkflow::IsAdmin()) {
             return 2;
         } else {
             $ID = intval($ID);
             if ($ID) {
                 $arStatus = array();
                 $arSql = array("ID='" . $ID . "'", "WF_PARENT_ELEMENT_ID='" . $ID . "'");
                 foreach ($arSql as $where) {
                     $strSql = "SELECT ID, WF_STATUS_ID FROM b_iblock_element WHERE " . $where;
                     $rs = $DB->Query($strSql);
                     while ($ar = $rs->Fetch()) {
                         $arStatus[$ar["WF_STATUS_ID"]] = $ar["WF_STATUS_ID"];
                     }
                 }
             } else {
                 $arStatus = array(intval($STATUS_ID) => intval($STATUS_ID));
             }
             $arGroups = $USER->GetUserGroupArray();
             if (!is_array($arGroups)) {
                 $arGroups[] = 2;
             }
             $groups = implode(",", $arGroups);
             foreach ($arStatus as $STATUS_ID) {
                 $strSql = "SELECT max(G.PERMISSION_TYPE) as MAX_PERMISSION " . "FROM b_workflow_status2group G " . "WHERE G.STATUS_ID = " . $STATUS_ID . " " . "\tAND G.GROUP_ID in (" . $groups . ") ";
                 $rs = $DB->Query($strSql);
                 $ar = $rs->Fetch();
                 $ar["MAX_PERMISSION"] = intval($ar["MAX_PERMISSION"]);
                 if ($result === false || $result > $ar["MAX_PERMISSION"]) {
                     $result = $ar["MAX_PERMISSION"];
                 }
             }
         }
     }
     return $result;
 }
Exemple #4
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = CWorkflow::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB, $USER, $APPLICATION;
     $arSqlSearch = array();
     $strSqlSearch = "";
     $MAX_LOCK = intval(COption::GetOptionString("workflow", "MAX_LOCK_TIME", "60"));
     $arGroups = $USER->GetUserGroupArray();
     if (!is_array($arGroups)) {
         $arGroups[] = 2;
     }
     $groups = implode(",", $arGroups);
     $uid = intval($USER->GetID());
     if (is_array($arFilter)) {
         foreach ($arFilter as $key => $val) {
             if (strlen($val) <= 0 || "{$val}" == "NOT_REF") {
                 continue;
             }
             if (is_array($val) && count($val) <= 0) {
                 continue;
             }
             $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "N" ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.ID", $val, $match);
                     break;
                 case "DATE_MODIFY_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_MODIFY >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_MODIFY_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "D.DATE_MODIFY < " . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "MODIFIED_BY":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "Y" ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D.MODIFIED_BY, UM.LOGIN, UM.NAME, UM.LAST_NAME", $val, $match);
                     break;
                 case "MODIFIED_USER_ID":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "N" ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.MODIFIED_BY", $val, $match);
                     break;
                 case "LOCK_STATUS":
                     $arSqlSearch[] = "\n\t\t\t\t\t\tif (D.DATE_LOCK is null, 'green',\n\t\t\t\t\t\t\tif(DATE_ADD(D.DATE_LOCK, interval {$MAX_LOCK} MINUTE)<now(), 'green',\n\t\t\t\t\t\t\t\tif(D.LOCKED_BY={$uid}, 'yellow', 'red'))) = '" . $DB->ForSql($val) . "'";
                     break;
                 case "STATUS":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "Y" ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D.STATUS_ID, S.TITLE", $val, $match);
                     break;
                 case "STATUS_ID":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "N" ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.STATUS_ID", $val, $match);
                     break;
                 case "SITE_ID":
                 case "TITLE":
                 case "BODY":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "Y" ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D." . $key, $val, $match);
                     break;
                 case "FILENAME":
                     $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "Y" ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D.FILENAME", $val, $match, array("/", "\\", ".", "_"));
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY D.ID";
     } elseif ($by == "s_lock_status") {
         $strSqlOrder = "ORDER BY LOCK_STATUS";
     } elseif ($by == "s_date_modify") {
         $strSqlOrder = "ORDER BY D.DATE_MODIFY";
     } elseif ($by == "s_modified_by") {
         $strSqlOrder = "ORDER BY D.MODIFIED_BY";
     } elseif ($by == "s_filename") {
         $strSqlOrder = "ORDER BY D.FILENAME";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY D.TITLE";
     } elseif ($by == "s_site_id") {
         $strSqlOrder = "ORDER BY D.SITE_ID";
     } elseif ($by == "s_status") {
         $strSqlOrder = "ORDER BY D.STATUS_ID";
     } else {
         $by = "s_date_modify";
         $strSqlOrder = "ORDER BY D.DATE_MODIFY";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     if (CWorkflow::IsAdmin()) {
         $strSql = "\n\t\t\t\tSELECT DISTINCT\n\t\t\t\t\tD.*,\n\t\t\t\t\t" . $DB->DateToCharFunction("D.DATE_ENTER") . " DATE_ENTER,\n\t\t\t\t\t" . $DB->DateToCharFunction("D.DATE_MODIFY") . " DATE_MODIFY,\n\t\t\t\t\t" . $DB->DateToCharFunction("D.DATE_LOCK") . " DATE_LOCK,\n\t\t\t\t\tconcat('(',UM.LOGIN,') ',ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MUSER_NAME,\n\t\t\t\t\tconcat('(',UE.LOGIN,') ',ifnull(UE.NAME,''),' ',ifnull(UE.LAST_NAME,'')) EUSER_NAME,\n\t\t\t\t\tS.TITLE STATUS_TITLE,\n\t\t\t\t\tif (D.DATE_LOCK is null, 'green',\n\t\t\t\t\t\tif(DATE_ADD(D.DATE_LOCK, interval {$MAX_LOCK} MINUTE)<now(), 'green',\n\t\t\t\t\t\t\tif(D.LOCKED_BY={$uid}, 'yellow', 'red'))) LOCK_STATUS\n\t\t\t\tFROM\n\t\t\t\t\tb_workflow_document D\n\t\t\t\t\tLEFT JOIN b_workflow_status S ON (S.ID = D.STATUS_ID)\n\t\t\t\t\tLEFT JOIN b_user UM ON (UM.ID = D.MODIFIED_BY)\n\t\t\t\t\tLEFT JOIN b_user UE ON (UE.ID = D.ENTERED_BY)\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t";
     } else {
         $strSql = "\n\t\t\t\tSELECT DISTINCT\n\t\t\t\t\tD.*,\n\t\t\t\t\t" . $DB->DateToCharFunction("D.DATE_ENTER") . " DATE_ENTER,\n\t\t\t\t\t" . $DB->DateToCharFunction("D.DATE_MODIFY") . " DATE_MODIFY,\n\t\t\t\t\t" . $DB->DateToCharFunction("D.DATE_LOCK") . " DATE_LOCK,\n\t\t\t\t\tconcat('(',UM.LOGIN,') ',ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MUSER_NAME,\n\t\t\t\t\tconcat('(',UE.LOGIN,') ',ifnull(UE.NAME,''),' ',ifnull(UE.LAST_NAME,'')) EUSER_NAME,\n\t\t\t\t\tS.TITLE STATUS_TITLE,\n\t\t\t\t\tif (D.DATE_LOCK is null, 'green',\n\t\t\t\t\t\tif(DATE_ADD(D.DATE_LOCK, interval {$MAX_LOCK} MINUTE)<now(), 'green',\n\t\t\t\t\t\t\tif(D.LOCKED_BY={$uid}, 'yellow', 'red'))) LOCK_STATUS\n\t\t\t\tFROM\n\t\t\t\t\tb_workflow_document D\n\t\t\t\t\tINNER JOIN b_workflow_status2group G ON (G.STATUS_ID = D.STATUS_ID)\n\t\t\t\t\tLEFT JOIN b_workflow_status S ON (S.ID = D.STATUS_ID)\n\t\t\t\t\tLEFT JOIN b_user UM ON (UM.ID = D.MODIFIED_BY)\n\t\t\t\t\tLEFT JOIN b_user UE ON (UE.ID = D.ENTERED_BY)\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\tand G.GROUP_ID in ({$groups})\n\t\t\t\tand G.PERMISSION_TYPE >= '2'\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t";
     }
     $rs = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     $arr = array();
     while ($ar = $rs->Fetch()) {
         if ($USER->CanDoFileOperation('fm_edit_in_workflow', array($ar["SITE_ID"], $ar["FILENAME"]))) {
             $arr[] = $ar;
         }
     }
     $rs = new CDBResult();
     $rs->InitFromArray($arr);
     return $rs;
 }
Exemple #5
0
 function GetDropDownList($SHOW_ALL = "N", $strOrder = "desc", $arFilter = array())
 {
     global $USER;
     if (strtolower($strOrder) != "asc") {
         $strOrder = "desc";
     } else {
         $strOrder = "asc";
     }
     $arFilter["!=ACTIVE"] = "N";
     if (!(CWorkflow::IsAdmin() || $SHOW_ALL == "Y")) {
         $arGroups = $USER->GetUserGroupArray();
         if (!is_array($arGroups)) {
             $arGroups = array(2);
         }
         $arFilter["GROUP_ID"] = $arGroups;
         $arFilter["PERMISSION_TYPE_1"] = 1;
     }
     return CWorkflowStatus::GetList($by = "s_c_sort", $strOrder, $arFilter, $is_filtered, array("REFERENCE_ID", "REFERENCE", "IS_FINAL", "C_SORT"));
 }
Exemple #6
0
}
if (!empty($arParams["SHOW_NOTE"])) {
    ?>
<br />
<div class="wd-help-list selected" id="wd_list_note"><?php 
    echo $arParams["~SHOW_NOTE"];
    ?>
</div>
<?php 
}
if ($arParams["WORKFLOW"] == "workflow" && $arParams["PERMISSION"] >= "U" && $arParams["SHOW_WORKFLOW"] != "N") {
    ?>
<br />
<div class="wd-help-list selected">
<?php 
    if ($arParams["PERMISSION"] >= "W" && CWorkflow::IsAdmin()) {
        echo GetMessage("WD_WF_COMMENT1");
        ?>
<br /><?php 
    } elseif (!in_array(2, $arResult["WF_STATUSES_PERMISSION"])) {
        echo GetMessage("WD_WF_COMMENT2");
        ?>
<br /><?php 
    } else {
        foreach ($arResult["WF_STATUSES_PERMISSION"] as $key => $val) {
            if ($val == 2) {
                $arr[] = $arResult["WF_STATUSES"][$key];
            }
        }
        if (count($arr) == 1) {
            echo str_replace("#STATUS#", $arr[0], GetMessage("WD_WF_ATTENTION2"));
function CheckFields()
{
    global $DB, $strError, $FILENAME, $APPLICATION, $ID, $BODY, $USER, $SITE_ID, $STATUS_ID, $DOC_ROOT;
    $str = "";
    $arMsg = array();
    $SCRIPT_FILE_TYPE = GetFileType($FILENAME);
    $FILENAME = trim($FILENAME);
    $FILENAME = "/" . ltrim(_normalizePath($FILENAME), "/");
    $io = CBXVirtualIo::GetInstance();
    if (strlen($FILENAME) <= 0) {
        $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_FORGOT_FILENAME"));
    } elseif (!$io->ValidatePathString($FILENAME)) {
        $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_FILE_NAME_NOT_VALID"));
    } elseif ($SCRIPT_FILE_TYPE != "SOURCE") {
        $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_INCORRECT_FILETYPE"));
    } else {
        $SITE_ID = CWorkflow::__CheckSite($SITE_ID);
        if (!$SITE_ID) {
            $SITE_ID = CSite::GetSiteByFullPath($_SERVER['DOCUMENT_ROOT'] . $FILENAME);
        }
        if (!$USER->CanDoFileOperation('fm_edit_in_workflow', array($SITE_ID, $FILENAME))) {
            $s = str_replace("#FILENAME#", "{$FILENAME}", GetMessage("FLOW_ACCESS_DENIED"));
            $arMsg[] = array("id" => "FILENAME", "text" => $s . ": " . GetMessage("FLOW_MIN_RIGHTS"));
        } elseif ($STATUS_ID == 1 && !($USER->CanDoFileOperation('fm_edit_existent_file', array($SITE_ID, $FILENAME)) && $USER->CanDoFileOperation('fm_create_new_file', array($SITE_ID, $FILENAME)))) {
            $arMsg[] = array("id" => "FILENAME", "text" => GetMessage("FLOW_ACCESS_DENIED_FOR_FILE_WRITE", array("#FILENAME#" => $FILENAME)));
        } else {
            $z = CWorkflow::GetByFilename($FILENAME, $SITE_ID);
            if ($zr = $z->Fetch()) {
                if ($zr["ID"] != $ID && $zr["STATUS_ID"] != 1) {
                    $arMsg[] = array("id" => "FILENAME", "text" => str_replace("#FILENAME#", $FILENAME, GetMessage("FLOW_FILENAME_EXIST")));
                }
            }
        }
    }
    if (!CWorkflow::IsAdmin()) {
        $arGroups = $USER->GetUserGroupArray();
        if (!is_array($arGroups)) {
            $arGroups = array(2);
        }
        $arFilter = array("GROUP_ID" => $arGroups, "PERMISSION_TYPE_1" => 1, "ID_EXACT_MATCH" => "Y", "ID" => $STATUS_ID);
        $rsStatuses = CWorkflowStatus::GetList($by = "s_c_sort", $strOrder, $arFilter, $is_filtered, array("ID"));
        if (!$rsStatuses->Fetch()) {
            $arMsg[] = array("id" => "STATUS_ID", "text" => GetMessage("FLOW_ERROR_WRONG_STATUS"));
        }
    }
    $bIsPhp = IsPHP($BODY);
    if ($bIsPhp) {
        if ($USER->CanDoFileOperation('fm_lpa', array($SITE_ID, $FILENAME)) && !$USER->CanDoOperation('edit_php')) {
            if (CModule::IncludeModule("fileman")) {
                $old_res = CFileman::ParseFileContent($APPLICATION->GetFileContent($DOC_ROOT . $FILENAME), true);
                $old_BODY = $old_res["CONTENT"];
                $BODY = CMain::ProcessLPA($BODY, $old_BODY);
            } else {
                $arMsg[] = array("id" => "BODY", "text" => "Error! Fileman is not included!");
            }
        } else {
            if (!$USER->CanDoOperation('edit_php')) {
                $arMsg[] = array("id" => "BODY", "text" => GetMessage("FLOW_PHP_IS_NOT_AVAILABLE"));
            }
        }
    }
    if (!empty($arMsg)) {
        $e = new CAdminException($arMsg);
        $GLOBALS["APPLICATION"]->ThrowException($e);
        return false;
    }
    return true;
}
Exemple #8
0
 function _get_file_info_arr(&$res, $arParams = array())
 {
     global $USER;
     static $arFiles = array();
     static $arBPTemplateStates = array();
     static $arBPParamRequired = array();
     $trashID = $this->GetMetaID('TRASH');
     if ($this->workflow == 'bizproc') {
         if (!isset($arBPParamRequired[$this->IBLOCK_ID])) {
             $arBPParamRequired[$this->IBLOCK_ID] = $this->IsBpParamRequired();
         }
     }
     $info = array();
     if (!in_array($res["ID"], $arFiles)) {
         $res["SHOW"] = array();
         $res["PERMISSION"] = $this->permission;
         $res['SHOW']['SHARED'] = $res['SHARED'];
         $res["~NAME"] = $res["NAME"];
         $res['USER_FIELDS'] = $this->GetUfFields($res['ID']);
         if ($this->permission >= "U") {
             $res["SHOW"]["RIGHTS"] = $this->e_rights && (isset($res['E_RIGHTS']['element_rights_edit']) || $GLOBALS['USER']->CanDoOperation('webdav_change_settings')) ? "Y" : "N";
             if ($this->workflow == 'workflow') {
                 $original = $res;
                 $LAST_ID = CIBlockElement::WF_GetLast($res['ID']);
                 if ($LAST_ID != $res['ID']) {
                     $db_res = CIBlockElement::GetList(array(), array("ID" => $LAST_ID, "SHOW_HISTORY" => "Y"), false, array("nTopCount" => 1), $this->wfParams["selected_fields"]);
                     $res = $db_res->GetNext();
                     $res["FILE"]["FILE_SIZE"] = $this->GetFileSize($res);
                     if ($this->e_rights) {
                         $res['E_RIGHTS'] = $this->GetPermission('ELEMENT', $res['ID']);
                     }
                 }
                 $res["ORIGINAL"] = $original;
                 $res["PERMISSION"] = $original["PERMISSION"];
                 $res["REAL_ID"] = $res["ID"];
                 $res["ID"] = $original["ID"];
                 $res["PROPERTY_WEBDAV_INFO_VALUE"] = $original["PROPERTY_WEBDAV_INFO_VALUE"];
                 $res["PROPERTY_WEBDAV_INFO_VALUE_ID"] = $original["PROPERTY_WEBDAV_INFO_VALUE_ID"];
                 $res["TAGS"] = $original["TAGS"];
                 $res["~TAGS"] = $original["~TAGS"];
                 $res["PREVIEW_TEXT"] = $original["PREVIEW_TEXT"];
                 $res["~PREVIEW_TEXT"] = $original["~PREVIEW_TEXT"];
                 $res["NAME"] = $original["NAME"];
                 $res["~NAME"] = $original["~NAME"];
                 $res["LOCK_STATUS"] = $original["LOCK_STATUS"];
                 $res["LOCKED_USER_NAME"] = $original["LOCKED_USER_NAME"];
                 $res["WF_LOCKED_BY"] = $original["WF_LOCKED_BY"];
                 $res["WF_DATE_LOCK"] = $original["WF_DATE_LOCK"];
                 $res["LAST_ID"] = $LAST_ID;
                 $res["TYPE"] = "E";
                 $res["SHOW"]["COPY"] = "Y";
                 $res["STATUS_ID"] = CIBlockElement::WF_GetCurrentStatus($LAST_ID, $res["STATUS_TITLE"]);
                 $res["STATUS_PERMISSION"] = CIBlockElement::WF_GetStatusPermission($res["STATUS_ID"]);
                 if ($res["STATUS_PERMISSION"] >= 2 || ($this->e_rights ? isset($res['E_RIGHTS']['element_edit_any_wf_status']) : $this->permission >= "W")) {
                     $res["SHOW"]["UNLOCK"] = $res['LOCK_STATUS'] == "yellow" || $res['LOCK_STATUS'] == "red" && CWorkflow::IsAdmin() ? "Y" : "N";
                     $res["SHOW"]["LOCK"] = $res['LOCK_STATUS'] == "green" ? "Y" : "N";
                     $res["PERMISSION"] = $res['LOCK_STATUS'] == "red" && !CWorkflow::IsAdmin() ? "R" : $res["PERMISSION"];
                     // Edit History Delete
                     if ($res['ORIGINAL']['WF_NEW'] == "Y" || $res["WF_STATUS_ID"] <= 1) {
                         $res["SHOW"]["HISTORY"] = $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y";
                     } elseif ($res["WF_STATUS_ID"] > 1) {
                         $res["SHOW"]["HISTORY"] = $res["SHOW"]["EDIT"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y";
                         $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] == "Y" && $res["PERMISSION"] > "U" ? "Y" : "N";
                     }
                     if ($res["LOCK_STATUS"] == "red") {
                         $res["SHOW"]["UNLOCK"] = CWorkflow::IsAdmin() ? "Y" : "N";
                         $res["SHOW"]["EDIT"] = "N";
                         $res["SHOW"]["DELETE"] = "N";
                     } elseif ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) {
                         $res["SHOW"]["UNLOCK"] = "N";
                         $res["SHOW"]["LOCK"] = "N";
                         $res["SHOW"]["DELETE"] = "N";
                         $res["SHOW"]["EDIT"] = "N";
                     }
                 }
                 if ($res["STATUS_PERMISSION"] >= 2 || ($this->e_rights ? isset($res['E_RIGHTS']['element_delete']) : $this->permission >= "W")) {
                     $res["PERMISSION"] = $res['LOCK_STATUS'] == "red" && !CWorkflow::IsAdmin() ? "R" : $res["PERMISSION"];
                     if ($res['ORIGINAL']['WF_NEW'] == "Y" || $res["WF_STATUS_ID"] <= 1) {
                         $res["SHOW"]["DELETE"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y";
                     } elseif ($res["WF_STATUS_ID"] > 1) {
                         $res["SHOW"]["DELETE"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() && $res["PERMISSION"] > "U" ? "N" : "Y";
                     }
                 }
             } elseif ($this->workflow == "bizproc") {
                 if ($this->e_rights) {
                     $res["PERMISSION"] = $res["E_RIGHTS"];
                 }
                 if ($res['LOCK_STATUS'] != "red") {
                     $res['LOCK_STATUS_BP'] = call_user_func(array($this->wfParams["DOCUMENT_TYPE"][1], "IsDocumentLocked"), $res["ID"] | $res["item_id"], "") ? "red" : "green";
                     $res['LOCK_STATUS'] = $res['LOCK_STATUS_BP'] == "red" ? "red" : $res['LOCK_STATUS'];
                 }
                 $res["PERMISSION"] = $res['LOCK_STATUS'] == "red" ? "R" : $res["PERMISSION"];
                 $res["USER_GROUPS"] = $this->USER["GROUPS"];
                 if ($res["CREATED_BY"] == $GLOBALS["USER"]->GetID()) {
                     $res["USER_GROUPS"][] = "Author";
                 }
                 $res["DOCUMENT_ID"] = $this->wfParams["DOCUMENT_TYPE"];
                 $res["DOCUMENT_ID"][2] = $res["ID"] | $res["item_id"];
                 $res["~arDocumentStates"] = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], $res["DOCUMENT_ID"]);
                 $res["arDocumentStates"] = array();
                 foreach ($res["~arDocumentStates"] as $key => $arDocumentState) {
                     $res["~arDocumentStates"][$key]["ViewWorkflow"] = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $res["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"], "WorkflowId" => $key));
                     if (strlen($arDocumentState["ID"]) > 0 && $res["~arDocumentStates"][$key]["ViewWorkflow"]) {
                         $res["arDocumentStates"][$key] = $arDocumentState;
                         $res["PERMISSION"] = "U";
                     }
                 }
                 if ($res['LOCK_STATUS'] != "red") {
                     if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $res["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"]))) {
                         $res["PERMISSION"] = "W";
                     } elseif (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ReadDocument, $GLOBALS["USER"]->GetID(), $res["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"]))) {
                         $res["PERMISSION"] = "D";
                     }
                 }
                 if ($this->CheckRight($res["PERMISSION"], 'element_read') > "D") {
                     if ($arParams["get_clones"] == "Y" && intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0) {
                         $arFilter = array("WF_PARENT_ELEMENT_ID" => $res["ID"], "SHOW_HISTORY" => "Y");
                         $db_rs = CIBlockElement::GetList(array("ID" => "ASC"), $arFilter);
                         if ($db_rs && ($rs = $db_rs->Fetch())) {
                             $res["CHILDREN"] = array();
                             do {
                                 if ($rs["IBLOCK_SECTION_ID"] == $trashID) {
                                     continue;
                                 }
                                 $rs["SHOW"] = array();
                                 $rs["PERMISSION"] = "R";
                                 $rs["DOCUMENT_ID"] = $res["DOCUMENT_ID"];
                                 $rs["DOCUMENT_ID"][2] = $rs["ID"];
                                 $rs["~arDocumentStates"] = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], $rs["DOCUMENT_ID"]);
                                 $USER_GROUPS = $this->USER["GROUPS"];
                                 if ($rs["CREATED_BY"] == $GLOBALS["USER"]->GetID()) {
                                     $USER_GROUPS[] = "Author";
                                 }
                                 if (!CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ReadDocument, $GLOBALS["USER"]->GetID(), $rs["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"]))) {
                                     continue;
                                 }
                                 if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $rs["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"]))) {
                                     $rs["PERMISSION"] = "W";
                                 }
                                 $rs["arDocumentStates"] = array();
                                 foreach ($rs["~arDocumentStates"] as $key => $arDocumentState) {
                                     if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $rs["DOCUMENT_ID"], array("DocumentType" => $this->wfParams["DOCUMENT_TYPE"], "IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"], "WorkflowId" => $key))) {
                                         $rs["arDocumentStates"][$key] = $arDocumentState;
                                         $rs["PERMISSION"] = empty($rs["PERMISSION"]) ? "U" : $rs["PERMISSION"];
                                     }
                                 }
                                 if ($rs["PERMISSION"] >= "U") {
                                     if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $USER->GetID(), $rs["DOCUMENT_ID"], array("IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $USER_GROUPS, "DocumentStates" => $rs["~arDocumentStates"]))) {
                                         $rs["SHOW"]["BP_START"] = "Y";
                                     }
                                     $rs["SHOW"]["BP_VIEW"] = !empty($rs["arDocumentStates"]) ? "Y" : "N";
                                     $rs["SHOW"]["EDIT"] = $rs["PERMISSION"] >= "W" ? "Y" : "N";
                                     $rs["SHOW"]["BP"] = $rs["SHOW"]["BP_VIEW"] == "Y" || $rs["SHOW"]["BP_START"] == "Y" ? "Y" : "N";
                                     $rs["SHOW"]["EDIT"] = $rs["PERMISSION"] >= "W" && intVal($rs["WF_PARENT_ELEMENT_ID"]) > 0 || $this->permission >= "W" ? "Y" : "N";
                                     if ($rs["BP_LOCK_STATUS"] == "red") {
                                         $rs["SHOW"]["UNLOCK"] = CBPDocument::IsAdmin() ? "Y" : "N";
                                         $rs["SHOW"]["EDIT"] = "N";
                                     } elseif ($rs["LOCK_STATUS"] == "red" && $this->permission > "U") {
                                         $rs["SHOW"]["UNLOCK"] = "Y";
                                         $rs["SHOW"]["EDIT"] = "N";
                                     } elseif ($this->check_creator && $rs["CREATED_BY"] != $GLOBALS["USER"]->GetId()) {
                                         $rs["SHOW"]["UNLOCK"] = "N";
                                         $rs["SHOW"]["LOCK"] = "N";
                                         $rs["SHOW"]["DELETE"] = "N";
                                         $rs["SHOW"]["EDIT"] = "N";
                                     } else {
                                         $rs["SHOW"]["UNLOCK"] = $rs['LOCK_STATUS'] == "yellow" ? "Y" : "N";
                                         $rs["SHOW"]["LOCK"] = $rs['LOCK_STATUS'] == "green" ? "Y" : "N";
                                         $rs["SHOW"]["DELETE"] = $rs["SHOW"]["HISTORY"] = $rs["PERMISSION"] > "U" ? "Y" : "N";
                                     }
                                 }
                                 $res["CHILDREN"][$rs["ID"]] = $rs;
                             } while ($rs = $db_rs->Fetch());
                         }
                     }
                     if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::StartWorkflow, $USER->GetID(), $res["DOCUMENT_ID"], array("IBlockId" => $this->IBLOCK_ID, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $res["~arDocumentStates"]))) {
                         $res["SHOW"]["BP_START"] = "Y";
                     }
                     $res["SHOW"]["BP_VIEW"] = !empty($res["arDocumentStates"]) ? "Y" : "N";
                     if ($this->workflow == 'bizproc') {
                         $res["SHOW"]["BP_VERSIONS"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N";
                         $res["SHOW"]["BP_CLONE"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N";
                         $res["SHOW"]["COPY"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N";
                     } else {
                         $res["SHOW"]["BP_VERSIONS"] = $res["SHOW"]["BP_CLONE"] = $res["SHOW"]["COPY"] = 'N';
                     }
                     if ($this->CheckRight($res['PERMISSION'], 'element_edit_any_wf_status') < "W" && intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 || $res["WF_PARENT_ELEMENT_ID"] == $res["ID"]) {
                         $arDocumentStates = CBPDocument::GetDocumentStates($this->wfParams["DOCUMENT_TYPE"], null);
                         if (!empty($arDocumentStates)) {
                             CBPDocument::CanUserOperateDocumentType(CBPCanUserOperateOperation::WriteDocument, $GLOBALS["USER"]->GetID(), $this->wfParams["DOCUMENT_TYPE"], array("IBlockId" => $this->IBLOCK_ID, "IBlockPermission" => $this->permission, "UserGroups" => $this->USER["GROUPS"], "AllUserGroups" => $res["USER_GROUPS"], "DocumentStates" => $arDocumentStates));
                         } else {
                             $res["SHOW"]["BP_CLONE"] = "N";
                         }
                     }
                     $res["SHOW"]["BP"] = $res["SHOW"]["BP_VIEW"] == "Y" || $res["SHOW"]["BP_START"] == "Y" ? "Y" : "N";
                     $res["SHOW"]["EDIT"] = $this->CheckRight($res["PERMISSION"], "element_edit_any_wf_status") >= "W" ? "Y" : "N";
                     if ($res["LOCK_STATUS"] == "red") {
                         $res["SHOW"]["UNLOCK"] = CBPDocument::IsAdmin() || $this->CheckRight($res['PERMISSION'], "element_edit") > "W" ? "Y" : "N";
                         $res["SHOW"]["LOCK"] = "N";
                         $res["SHOW"]["HISTORY"] = $this->CheckRight($res['PERMISSION'], 'element_edit') > "U" ? "Y" : "N";
                         $res["SHOW"]["DELETE"] = "N";
                         $res["SHOW"]["EDIT"] = "N";
                     } elseif ($this->InTrash($res)) {
                         $bRightsEdit_gt_W = $this->CheckRight($res['PERMISSION'], 'element_rights_edit') > "W";
                         $res["SHOW"]["EDIT"] = $bRightsEdit_gt_W ? "Y" : "N";
                         $res["SHOW"]["HISTORY"] = $bRightsEdit_gt_W ? "Y" : "N";
                         $res["SHOW"]["DELETE"] = $bRightsEdit_gt_W ? "Y" : "N";
                         $res["SHOW"]["UNLOCK"] = "N";
                         $res["SHOW"]["LOCK"] = "N";
                         $res["SHOW"]["BP_START"] = "N";
                         $res["SHOW"]["BP_VIEW"] = $bRightsEdit_gt_W ? "Y" : "N";
                         $res["SHOW"]["BP_VERSIONS"] = $bRightsEdit_gt_W ? "Y" : "N";
                         $res["SHOW"]["BP_CLONE"] = $bRightsEdit_gt_W ? "Y" : "N";
                         $res["SHOW"]["COPY"] = intVal($res["WF_PARENT_ELEMENT_ID"]) <= 0 ? "Y" : "N";
                     } elseif ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) {
                         $res["SHOW"]["UNLOCK"] = "N";
                         $res["SHOW"]["LOCK"] = "N";
                         $res["SHOW"]["DELETE"] = "N";
                         $res["SHOW"]["EDIT"] = "N";
                     } else {
                         $bElementEdit_gt_U = $this->CheckRight($res['PERMISSION'], 'element_rights_edit') > 'U';
                         $res["SHOW"]["HISTORY"] = $bElementEdit_gt_U ? "Y" : "N";
                         $res["SHOW"]["DELETE"] = $bElementEdit_gt_U ? "Y" : "N";
                         $res["SHOW"]["UNLOCK"] = $bElementEdit_gt_U && $res["LOCK_STATUS"] == "yellow" ? "Y" : "N";
                         $res["SHOW"]["LOCK"] = $bElementEdit_gt_U && $res["LOCK_STATUS"] == "green" ? "Y" : "N";
                     }
                     if ($arBPParamRequired[$this->IBLOCK_ID]) {
                         $res["SHOW"]["COPY"] = "N";
                     }
                 }
             } else {
                 $res["SHOW"]["UNLOCK"] = $res['LOCK_STATUS'] == "yellow" || $res['LOCK_STATUS'] == "red" && $res["PERMISSION"] > 'W' ? "Y" : "N";
                 $res["SHOW"]["LOCK"] = $res['LOCK_STATUS'] == "green" ? "Y" : "N";
                 $res["SHOW"]["COPY"] = "Y";
                 $res["SHOW"]["HISTORY"] = $res["SHOW"]["DELETE"] = $res["SHOW"]["EDIT"] = $this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId() ? "N" : "Y";
                 $res["SHOW"]["HISTORY"] = $res["SHOW"]["HISTORY"] == "Y" && $this->workflow == "bizproc_limited" ? "Y" : "N";
                 if ($this->check_creator && $res["CREATED_BY"] != $GLOBALS["USER"]->GetId()) {
                     $res["SHOW"]["UNLOCK"] = "N";
                     $res["SHOW"]["LOCK"] = "N";
                     $res["SHOW"]["DELETE"] = "N";
                     $res["SHOW"]["EDIT"] = "N";
                 } elseif ($res["LOCK_STATUS"] == "red" && $res["PERMISSION"] < 'X') {
                     $res["SHOW"]["DELETE"] = "N";
                     $res["SHOW"]["EDIT"] = "N";
                 }
                 if ($this->e_rights) {
                     $arShow = array("COPY" => "element_edit", "DELETE" => "element_delete", "UNDELETE" => "element_no_prems", "EDIT" => "element_edit", "HISTORY" => "element_edit", "LOCK" => "element_edit", "UNLOCK" => "element_edit", "RIGHTS" => "element_rights_edit");
                     $bInTrash = $this->InTrash($res);
                     foreach ($arShow as $action => $right) {
                         if ($res['LOCK_STATUS'] == 'red' || $bInTrash) {
                             $right = "element_rights_edit";
                         }
                         if (!isset($res['E_RIGHTS'][$right])) {
                             $res['SHOW'][$action] = 'N';
                         }
                     }
                 }
             }
         } else {
             $res["PERMISSION"] = $res["WF_NEW"] == "Y" || intVal($res["WF_PARENT_ELEMENT_ID"]) > 0 && $res["WF_PARENT_ELEMENT_ID"] != $res['ID'] ? "D" : $this->permission;
             if ($res["PERMISSION"] > "D" && $this->workflow == "bizproc") {
                 $res["PERMISSION"] = $res["BP_PUBLISHED"] == "Y" ? $this->permission : "D";
             }
         }
         $res["SHOW"]["UNDELETE"] = "N";
         $secPath = "/" . implode("/", $this->GetNavChain(array("section_id" => $res["IBLOCK_SECTION_ID"]), false));
         $res["SECTION_PATH"] = str_replace("//", "/", $secPath);
         $res["PATH"] = str_replace("//", "/", $secPath . "/" . $res["~NAME"]);
         $arFiles[$res["ID"]] = $res;
     } else {
         $res = array_merge($res, $arFiles[$res["ID"]]);
     }
     if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') {
         $info["path"] = $res['PATH'];
         $info["path"] = SITE_CHARSET != "UTF-8" ? $GLOBALS["APPLICATION"]->ConvertCharset($info["path"], SITE_CHARSET, "UTF-8") : $info["path"];
         $info["props"] = array();
         $info["props"][] = array('ns' => 'DAV:', 'name' => "creationdate", 'val' => isset($res["DATE_CREATE_UNIX"]) ? $res["DATE_CREATE_UNIX"] : MakeTimeStamp($res["DATE_CREATE"]));
         $info["props"][] = array('ns' => 'DAV:', 'name' => "getlastmodified", 'val' => isset($res["TIMESTAMP_X_UNIX"]) ? $res["TIMESTAMP_X_UNIX"] : MakeTimeStamp($res["TIMESTAMP_X"]));
         $info["props"][] = array('ns' => 'DAV:', 'name' => "creationdate", 'val' => MakeTimeStamp($res["DATE_CREATE"]));
         $info["props"][] = array('ns' => 'DAV:', 'name' => "getlastmodified", 'val' => MakeTimeStamp($res["TIMESTAMP_X"]));
         $info["props"][] = array('ns' => 'DAV:', 'name' => "getcontenttype", 'val' => $res["FILE"]["CONTENT_TYPE"]);
         $info["props"][] = array('ns' => 'DAV:', 'name' => "getcontentlength", 'val' => $res["FILE"]["FILE_SIZE"]);
         $info["props"][] = array('ns' => 'DAV:', 'name' => "isreadonly", 'val' => $res["PERMISSION"] >= "W" ? "false" : "true");
         $info["props"][] = array('ns' => 'DAV:', 'name' => "ishidden", 'val' => $res["ACTIVE"] == "Y" ? "false" : "true");
         $info["props"][] = array('ns' => 'DAV:', 'name' => "iscollection", 'val' => 0);
         $info["props"][] = array('ns' => 'DAV:', 'name' => "resourcetype", 'val' => '');
         // required by RFC && LibreOffice
         $info["props"][] = $this->_get_lock_prop();
     }
     if ($this->InTrash($res)) {
         if ($this->workflow != "bizproc") {
             $res["SHOW"]["EDIT"] = "N";
             $res["SHOW"]["LOCK"] = "N";
             $res["SHOW"]["UNLOCK"] = "N";
             $bAdmin = false;
             if ($GLOBALS['USER']->CanDoOperation('webdav_change_settings')) {
                 $bAdmin = true;
             } elseif ($this->e_rights && isset($res['E_RIGHTS']['element_rights_edit'])) {
                 $bAdmin = true;
             } elseif (!$this->e_rights && $this->permission > "W") {
                 $bAdmin = true;
             }
             $res["SHOW"]["DELETE"] = $bAdmin ? "Y" : "N";
             $res["SHOW"]["UNDELETE"] = $bAdmin ? "Y" : "N";
         }
     }
     if ($this->_parse_webdav_info($res)) {
         if (is_array($res["PROPS"])) {
             foreach ($res["PROPS"] as $ns_name => $ns_props) {
                 foreach ($ns_props as $prop_name => $prop_val) {
                     if (is_scalar($prop_val)) {
                         if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND') {
                             $info["props"][] = CWebDavBase::_mkprop($ns_name, $prop_name, $prop_val);
                         }
                     }
                 }
             }
         }
     }
     return $info;
 }
Exemple #9
0
	public static function GetList(&$by, &$order, $arFilter=Array(), &$is_filtered)
	{
		$err_mess = (CWorkflow::err_mess())."<br>Function: GetList<br>Line: ";
		global $DB, $USER, $APPLICATION;
		$arSqlSearch = Array();
		$strSqlSearch = "";
		$MAX_LOCK = intval(COption::GetOptionString("workflow","MAX_LOCK_TIME","60"));
		$arGroups = $USER->GetUserGroupArray();
		if (!is_array($arGroups)) $arGroups[] = 2;
		$groups = implode(",",$arGroups);
		$uid = intval($USER->GetID());
		if (is_array($arFilter))
		{
			$filter_keys = array_keys($arFilter);
			for ($i=0; $i<count($filter_keys); $i++)
			{
				$key = $filter_keys[$i];
				$val = $arFilter[$filter_keys[$i]];
				if (strlen($val)<=0 || "$val"=="NOT_REF") continue;
				if (is_array($val) && count($val)<=0) continue;
				$match_value_set = (in_array($key."_EXACT_MATCH", $filter_keys)) ? true : false;
				$key = strtoupper($key);
				switch($key)
				{
					case "ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("D.ID",$val,$match);
						break;
					case "DATE_MODIFY_1":
						if (CheckDateTime($val))
							$arSqlSearch[] = "D.DATE_MODIFY >= ".$DB->CharToDateFunction($val, "SHORT");
						break;
					case "DATE_MODIFY_2":
						if (CheckDateTime($val))
							$arSqlSearch[] = "D.DATE_MODIFY < ".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
						break;
					case "MODIFIED_BY":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("D.MODIFIED_BY, UM.LOGIN, UM.NAME, UM.LAST_NAME", $val, $match);
						break;
					case "MODIFIED_USER_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("D.MODIFIED_BY",$val,$match);
						break;
					case "LOCK_STATUS":
						$arSqlSearch[] = "
						if (D.DATE_LOCK is null, 'green',
							if(DATE_ADD(D.DATE_LOCK, interval $MAX_LOCK MINUTE)<now(), 'green',
								if(D.LOCKED_BY=$uid, 'yellow', 'red'))) = '".$DB->ForSql($val)."'";
						break;
					case "STATUS":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("D.STATUS_ID, S.TITLE",$val,$match);
						break;
					case "STATUS_ID":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
						$arSqlSearch[] = GetFilterQuery("D.STATUS_ID",$val,$match);
						break;
					case "SITE_ID":
					case "TITLE":
					case "BODY":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("D.".$key,$val,$match);
						break;
					case "FILENAME":
						$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
						$arSqlSearch[] = GetFilterQuery("D.FILENAME",$val,$match, array("/", "\\", ".", "_"));
						break;
				}
			}
		}

		if ($by == "s_id")					$strSqlOrder = "ORDER BY D.ID";
		elseif ($by == "s_lock_status")		$strSqlOrder = "ORDER BY LOCK_STATUS";
		elseif ($by == "s_date_modify")		$strSqlOrder = "ORDER BY D.DATE_MODIFY";
		elseif ($by == "s_modified_by")		$strSqlOrder = "ORDER BY D.MODIFIED_BY";
		elseif ($by == "s_filename")		$strSqlOrder = "ORDER BY D.FILENAME";
		elseif ($by == "s_title")			$strSqlOrder = "ORDER BY D.TITLE";
		elseif ($by == "s_site_id")			$strSqlOrder = "ORDER BY D.SITE_ID";
		elseif ($by == "s_status")			$strSqlOrder = "ORDER BY D.STATUS_ID";
		else
		{
			$by = "s_date_modify";
			$strSqlOrder = "ORDER BY D.DATE_MODIFY";
		}
		if ($order!="asc")
		{
			$strSqlOrder .= " desc ";
			$order="desc";
		}

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		if (CWorkflow::IsAdmin())
		{
			$strSql = "
				SELECT DISTINCT
					D.*,
					".$DB->DateToCharFunction("D.DATE_ENTER")."				DATE_ENTER,
					".$DB->DateToCharFunction("D.DATE_MODIFY")."			DATE_MODIFY,
					".$DB->DateToCharFunction("D.DATE_LOCK")."				DATE_LOCK,
					concat('(',UM.LOGIN,') ',ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,''))	MUSER_NAME,
					concat('(',UE.LOGIN,') ',ifnull(UE.NAME,''),' ',ifnull(UE.LAST_NAME,''))	EUSER_NAME,
					S.TITLE													STATUS_TITLE,
					if (D.DATE_LOCK is null, 'green',
						if(DATE_ADD(D.DATE_LOCK, interval $MAX_LOCK MINUTE)<now(), 'green',
							if(D.LOCKED_BY=$uid, 'yellow', 'red')))						LOCK_STATUS
				FROM
					b_workflow_document D
					LEFT JOIN b_workflow_status S ON (S.ID = D.STATUS_ID)
					LEFT JOIN b_user UM ON (UM.ID = D.MODIFIED_BY)
					LEFT JOIN b_user UE ON (UE.ID = D.ENTERED_BY)
				WHERE
				$strSqlSearch
				$strSqlOrder
				";
		}
		else
		{
			$strSql = "
				SELECT DISTINCT
					D.*,
					".$DB->DateToCharFunction("D.DATE_ENTER")."				DATE_ENTER,
					".$DB->DateToCharFunction("D.DATE_MODIFY")."			DATE_MODIFY,
					".$DB->DateToCharFunction("D.DATE_LOCK")."				DATE_LOCK,
					concat('(',UM.LOGIN,') ',ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,''))	MUSER_NAME,
					concat('(',UE.LOGIN,') ',ifnull(UE.NAME,''),' ',ifnull(UE.LAST_NAME,''))	EUSER_NAME,
					S.TITLE													STATUS_TITLE,
					if (D.DATE_LOCK is null, 'green',
						if(DATE_ADD(D.DATE_LOCK, interval $MAX_LOCK MINUTE)<now(), 'green',
							if(D.LOCKED_BY=$uid, 'yellow', 'red')))						LOCK_STATUS
				FROM
					b_workflow_document D
					INNER JOIN b_workflow_status2group G ON (G.STATUS_ID = D.STATUS_ID)
					LEFT JOIN b_workflow_status S ON (S.ID = D.STATUS_ID)
					LEFT JOIN b_user UM ON (UM.ID = D.MODIFIED_BY)
					LEFT JOIN b_user UE ON (UE.ID = D.ENTERED_BY)
				WHERE
				$strSqlSearch
				and G.GROUP_ID in ($groups)
				and G.PERMISSION_TYPE >= '2'
				$strSqlOrder
				";
		}
		//echo "<pre>".$strSql."</pre>";
		$rs = $DB->Query($strSql, false, $err_mess.__LINE__);
		$is_filtered = (IsFiltered($strSqlSearch));
		$arr = array();
		while($ar=$rs->Fetch())
		{
			if($USER->CanDoFileOperation('fm_edit_in_workflow', Array($ar["SITE_ID"], $ar["FILENAME"])))
				$arr[] = $ar;
		}
		$rs = new CDBResult;
		$rs->InitFromArray($arr);
		return $rs;
	}
Exemple #10
0
			<?php 
    }
    ?>
		</select>
	</li>
	<?php 
    if (!in_array(2, $arResult["WF_STATUSES_PERMISSION"])) {
        ?>
	<li class="wd-upload-form-propety">
		<span class="comments"><?php 
        echo GetMessage("WD_WF_ATTENTION1");
        ?>
</span> 
	</li>
	<?php 
    } elseif (!CWorkflow::IsAdmin()) {
        $arr = array();
        foreach ($arResult["WF_STATUSES_PERMISSION"] as $key => $val) {
            if ($val == 2) {
                $arr[] = htmlspecialcharsEx($arResult["WF_STATUSES"][$key]);
            }
        }
        ?>
	<li class="wd-upload-form-propety">
		<span class="comments"><?php 
        echo count($arr) == 1 ? str_replace("#STATUS#", $arr[0], GetMessage("WD_WF_ATTENTION2")) : str_replace("#STATUS#", $arr[0], GetMessage("WD_WF_ATTENTION3"));
        ?>
</span>
	</li><?php 
    }
} elseif ($arParams["USE_BIZPROC"] == "Y") {
Exemple #11
0
$res["FILE_EXTENTION"] = strtolower(strrchr($res['NAME'], '.'));
$res["~WF_STATUS_TITLE"] = CIBlockElement::WF_GetStatusTitle($res["WF_STATUS_ID"]);
$res["WF_STATUS_TITLE"] = htmlspecialcharsEx($res["~WF_STATUS_TITLE"]);
/************** Paths **********************************************/
$res["URL"] = array("DOWNLOAD" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_HISTORY_GET_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "~DOWNLOAD" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_HISTORY_GET_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "VIEW" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "~VIEW" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_URL"], array("ELEMENT_ID" => $res["ID"], "ELEMENT_NAME" => $res["ELEMENT_NAME"])), "EDIT" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "EDIT")), "~EDIT" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "EDIT")), "DELETE" => CComponentEngine::MakePathFromTemplate($arParams["ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "DELETE")), "~DELETE" => CComponentEngine::MakePathFromTemplate($arParams["~ELEMENT_EDIT_URL"], array("ELEMENT_ID" => $res["ID"], "ACTION" => "DELETE")));
$res["URL"]["DELETE"] = WDAddPageParams($res["URL"]["DELETE"], array("edit" => "y", "sessid" => bitrix_sessid(), 'back_url' => urlencode($APPLICATION->GetCurPageParam())));
$res["URL"]["~DELETE"] = WDAddPageParams($res["URL"]["~DELETE"], array("edit" => "y", "sessid" => bitrix_sessid(), 'back_url' => urlencode($APPLICATION->GetCurPageParam())));
/************** Permission *****************************************/
$arResult["ELEMENT"] = $res;
$arResult["ELEMENT"]["PERMISSION"] = CIBlockDocumentWebdav::GetIBRights('ELEMENT', $arParams["IBLOCK_ID"], $arParams["ELEMENT_ID"]);
if (CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_read") < "R") {
    ShowError(GetMessage("WD_ACCESS_DENIED"));
    return 0;
}
$res = array("UNLOCK" => "N", "EDIT" => CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_edit") >= "W" ? "Y" : "N", "DELETE" => CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_edit") >= "W" ? "Y" : "N", "HISTORY" => "Y");
if ($arResult["ELEMENT"]["LOCK_STATUS"] == "yellow" || $arResult["ELEMENT"]["LOCK_STATUS"] == "red" && (CWorkflow::IsAdmin() || $USER->CanDoOperation('webdav_change_settings'))) {
    $res["UNLOCK"] = "Y";
}
if ($arResult["ELEMENT"]["LOCK_STATUS"] == "red") {
    $res["EDIT"] = "N";
} elseif (CWebDavIblock::CheckRight($arResult["ELEMENT"]["PERMISSION"], "element_bizproc_start") == "U") {
    $res["EDIT"] = $arResult["ELEMENT"]["WF_STATUS_ID"] > 1 && $arResult["WF_STATUSES_PERMISSION"][$arResult["ELEMENT"]["WF_STATUS_ID"]] < 2 ? "N" : "Y";
}
$arResult["ELEMENT"]["SHOW"] = $res;
/************** Last element ***************************************/
$arResult["ELEMENT"]["LAST"] = $arResult["ELEMENT"];
$LAST_ID = CIBlockElement::WF_GetLast($arResult["ELEMENT"]["ID"]);
if ($LAST_ID != $arResult["ELEMENT"]["ID"]) {
    $db_res = CIBlockElement::GetByID($LAST_ID);
    if ($db_res && ($res = $db_res->Fetch())) {
        $arResult["ELEMENT"]["LAST"] = $res;
    $row =& $lAdmin->AddRow($f_ID, $arRes);
    if (CWorkflow::IsHaveEditRights($f_DOCUMENT_ID) && $f_DOCUMENT_ID > 0) {
        $row->AddViewField("DOCUMENT_ID", '<a href="workflow_edit.php?lang=' . LANG . '&ID=' . $f_DOCUMENT_ID . '">' . $f_DOCUMENT_ID . '</a>');
    }
    $row->AddViewField("MODIFIED_BY", '[<a title="' . GetMessage("FLOW_USER_ALT") . '" href="user_edit.php?ID=' . $f_MODIFIED_BY . '&lang=' . LANG . '">' . $f_MODIFIED_BY . '</a>]&nbsp;' . $f_USER_NAME);
    $row->AddViewField("FILENAME", '<a href="' . $f_FILENAME . '">' . TruncateText($f_FILENAME, 45) . '</a>');
    $row->AddViewField("STATUS_ID", '[<a title="' . GetMessage("FLOW_STATUS_ALT") . '" href="workflow_status_edit.php?ID=' . $f_STATUS_ID . '&lang=' . LANG . '">' . $f_STATUS_ID . '</a>]&nbsp;' . $f_STATUS_TITLE);
    $arActions = array(array("ICON" => "view", "DEFAULT" => "Y", "TEXT" => GetMessage("FLOW_VIEW"), "ACTION" => $lAdmin->ActionRedirect("workflow_history_view.php?lang=" . LANG . "&ID=" . $f_ID)));
    if ($WORKFLOW_RIGHT > "R" && CWorkflow::IsAdmin()) {
        $arActions[] = array("SEPARATOR" => true);
        $arActions[] = array("ICON" => "delete", "TEXT" => GetMessage("FLOW_DELETE"), "ACTION" => "if(confirm('" . GetMessage('FLOW_DELETE_CONFIRM') . "')) " . $lAdmin->ActionDoGroup($f_ID, "delete"));
    }
    $row->AddActions($arActions);
}
$lAdmin->AddFooter(array(array("title" => GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value" => $rsData->SelectedRowsCount()), array("counter" => true, "title" => GetMessage("MAIN_ADMIN_LIST_CHECKED"), "value" => "0")));
if ($WORKFLOW_RIGHT > "R" && CWorkflow::IsAdmin()) {
    $lAdmin->AddGroupActionTable(array("delete" => GetMessage("MAIN_ADMIN_LIST_DELETE"), array("action" => "Diff()", "value" => "compare", "type" => "button", "name" => GetMessage("FLOW_COMPARE"))));
}
$aMenu = array(array("ICON" => "btn_list", "TEXT" => GetMessage("FLOW_RECORDS_LIST"), "LINK" => "workflow_list.php?lang=" . LANGUAGE_ID, "TITLE" => GetMessage("FLOW_RECORDS_LIST")));
$lAdmin->AddAdminContextMenu($aMenu);
$lAdmin->CheckListMode();
$APPLICATION->SetTitle(GetMessage("FLOW_PAGE_TITLE"));
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
?>

<script>
function Diff()
{
	var selection = new Array();
	var j = 0;
Exemple #13
0
 public static function GetEditLink($FILENAME, &$status_id, &$status_title, $template = "", $lang = LANGUAGE_ID, $return_url = "")
 {
     $err_mess = CAllWorkflow::err_mess() . "<br>Function: GetEditLink<br>Line: ";
     global $DB, $APPLICATION, $USER;
     $link = '';
     CMain::InitPathVars($SITE_ID, $FILENAME);
     if ($USER->CanDoFileOperation('fm_edit_in_workflow', array($SITE_ID, $FILENAME))) {
         //Check if user have access at least to one status
         if (!CWorkflow::IsAdmin()) {
             $arGroups = $USER->GetUserGroupArray();
             if (!is_array($arGroups)) {
                 $arGroups = array(2);
             }
             $arFilter = array("GROUP_ID" => $arGroups, "PERMISSION_TYPE_1" => 1);
             $rsStatuses = CWorkflowStatus::GetList($by = "s_c_sort", $strOrder, $arFilter, $is_filtered, array("ID"));
             if (!$rsStatuses->Fetch()) {
                 return "";
             }
         }
         $link = "/bitrix/admin/workflow_edit.php?lang=" . $lang . "&site=" . $SITE_ID . "&fname=" . $FILENAME;
         if (strlen($template) > 0) {
             $link .= "&template=" . urlencode($template);
         }
         if (strlen($return_url) > 0) {
             $link .= "&return_url=" . urlencode($return_url);
         }
         $z = CWorkflow::GetByFilename($FILENAME, $SITE_ID);
         if ($zr = $z->Fetch()) {
             $status_id = $zr["STATUS_ID"];
             $status_title = $zr["STATUS_TITLE"];
             if ($status_id != 1) {
                 $DOCUMENT_ID = $zr["ID"];
                 if (CWorkflow::IsHaveEditRights($DOCUMENT_ID)) {
                     $link .= "&ID=" . $DOCUMENT_ID;
                 } else {
                     return "";
                 }
             }
         }
     }
     return $link;
 }
Exemple #14
0
 if ($f_LOCK_STATUS == "green") {
     $lamp_alt = GetMessage("FLOW_GREEN_ALT");
 } elseif ($f_LOCK_STATUS == "yellow") {
     $lamp_alt = GetMessage("FLOW_YELLOW_ALT");
 } else {
     $lamp_alt = GetMessage("FLOW_RED_ALT");
 }
 $str = '<div class="lamp-' . $f_LOCK_STATUS . '" title="' . $lamp_alt . '"></div>';
 $row->AddViewField("LOCK_STATUS", $str);
 $row->AddViewField("FILENAME", '<a href="' . $f_FILENAME . '">' . $f_FILENAME . '</a>');
 $row->AddSelectField("STATUS_ID", $arStatus);
 $str = '[<a href="user_edit.php?ID=' . $f_MODIFIED_BY . '&lang=' . LANG . '">' . $f_MODIFIED_BY . '</a>]&nbsp;' . $f_MUSER_NAME;
 $row->AddViewField("MODIFIED_BY", $str);
 $arActions = array();
 if ($f_LOCK_STATUS != "green") {
     if (CWorkflow::IsAdmin() || $f_LOCKED_BY == $USER->GetID()) {
         $arActions[] = array("ICON" => "unlock", "TEXT" => GetMessage("FLOW_UNLOCK"), "ACTION" => "if(confirm('" . GetMessage('FLOW_UNLOCK_CONFIRM') . "')) " . $lAdmin->ActionDoGroup($f_ID, "unlock"));
         $arActions[] = array("SEPARATOR" => true);
     }
 }
 if ($f_STATUS_ID != 1) {
     $arActions[] = array("DEFAULT" => "Y", "ICON" => "edit", "TEXT" => GetMessage("FLOW_EDIT"), "ACTION" => $lAdmin->ActionRedirect("workflow_edit.php?lang=" . LANG . "&ID=" . $f_ID));
 } else {
     $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_VIEW"), "ACTION" => $lAdmin->ActionRedirect("workflow_edit.php?lang=" . LANG . "&ID=" . $f_ID));
 }
 if ($f_STATUS_ID != 1) {
     $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_PREVIEW"), "ACTION" => $lAdmin->ActionRedirect("workflow_preview.php?lang=" . LANG . "&ID=" . $f_ID . "&" . bitrix_sessid_get()));
 }
 $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_HISTORY"), "ACTION" => $lAdmin->ActionRedirect("workflow_history_list.php?lang=" . LANG . "&find_document_id=" . $f_ID . "&find_document_id_exact_match=Y&set_filter=Y"));
 $arActions[] = array("ICON" => "view", "TEXT" => GetMessage("FLOW_HISTORY_FILE"), "ACTION" => $lAdmin->ActionRedirect("workflow_history_list.php?lang=" . LANG . "&find_filename=" . $f_FILENAME . "&find_filename_exact_match=Y&set_filter=Y"));
 if ($f_LOCK_STATUS != "red" && $WORKFLOW_RIGHT > "R") {