Example #1
0
 public function SetCurrentEncoding($siteId = null)
 {
     $this->encoding = CDav::GetCharset($siteId);
     if (is_null($this->encoding) || empty($this->encoding)) {
         $this->encoding = "utf-8";
     }
 }
Example #2
0
 public function GetPrincipalUrl(CDavRequest $request)
 {
     if (strlen($this->principalURL) > 0) {
         return $this->principalURL;
     }
     if (strpos($request->GetBaseUri(), 'http') === 0) {
         $this->principalURL = CDav::CheckIfRightSlashAdded($request->GetBaseUri());
     } else {
         $this->principalURL = ($request->GetParameter("HTTPS") === "on" ? "https" : "http") . '://' . $request->GetParameter('HTTP_HOST') . $request->GetParameter('SCRIPT_NAME') . '/';
     }
     $this->principalURL .= 'principals/user/' . $this->Login() . '/';
     if (!$request->IsUrlRequired()) {
         $this->principalURL = parse_url($this->principalURL, PHP_URL_PATH);
     }
     return $this->principalURL;
 }
Example #3
0
 /**
  * Process WebDAV HTTP request.
  *
  * @param void
  * @return void
  */
 public function ProcessRequest()
 {
     /** @var CDavRequest $request */
     $request = $this->request;
     $response = $this->response;
     if (strstr($request->GetParameter("REQUEST_URI"), '#')) {
         $response->SetHttpStatus("400 Bad Request");
         $response->Render();
         return;
     }
     $response->AddHeader("X-Dav-Powered-By: " . $this->davPoweredBy);
     // skip auth check for OPTIONS requests on "/" - http://pear.php.net/bugs/bug.php?id=5363
     if (($request->GetParameter('REQUEST_METHOD') != 'OPTIONS' || $request->GetPath() != "/") && !$this->CheckAuthWrapper()) {
         $response->SetHttpStatus('401 Unauthorized');
         $response->AddHeader('WWW-Authenticate: Basic realm="' . $this->davPoweredBy . '"');
         if ($this instanceof CDavWebDavServer && CDav::isDigestEnabled() && COption::GetOptionString("main", "use_digest_auth", "N") == "Y") {
             // On first try we found that we don't know user digest hash. Let ask only Basic auth first.
             if ($_SESSION["BX_HTTP_DIGEST_ABSENT"] !== true) {
                 $response->AddHeader('WWW-Authenticate: Digest realm="' . $this->davPoweredBy . '", nonce="' . uniqid() . '"');
             }
         }
         $response->Render();
         return;
     }
     if (!$this->CheckIfHeaderConditions()) {
         return;
     }
     $method = strtolower($request->GetParameter("REQUEST_METHOD"));
     $wrapper = $method . "Wrapper";
     if ($method == "head" && !method_exists($this, "head")) {
         $method = "get";
     }
     if (method_exists($this, $wrapper) && ($method == "options" || method_exists($this, $method))) {
         $this->{$wrapper}();
         $response->Render();
     } else {
         if ($request->GetParameter("REQUEST_METHOD") == "LOCK") {
             $error = '412 Precondition failed';
         } else {
             $error = '405 Method not allowed';
             $response->AddHeader("Allow: " . join(",", $this->GetAllowableMethods()));
         }
         $response->GenerateError($error);
         $response->Render();
     }
 }
Example #4
0
 public static function DataSync($paramUserId = 0)
 {
     $exchangeScheme = COption::GetOptionString("dav", "exchange_scheme", "http");
     $exchangeServer = COption::GetOptionString("dav", "exchange_server", "");
     $exchangePort = COption::GetOptionString("dav", "exchange_port", "80");
     $exchangeUsername = COption::GetOptionString("dav", "exchange_username", "");
     $exchangePassword = COption::GetOptionString("dav", "exchange_password", "");
     if (empty($exchangeServer)) {
         CAgent::RemoveAgent("CDavExchangeTasks::DataSync();", "dav");
         COption::SetOptionString("dav", "agent_tasks", "N");
         return "";
     }
     $exchange = new CDavExchangeTasks($exchangeScheme, $exchangeServer, $exchangePort, $exchangeUsername, $exchangePassword);
     $exchangeMailbox = COption::GetOptionString("dav", "exchange_mailbox", "");
     $exchangeUseLogin = COption::GetOptionString("dav", "exchange_use_login", "Y");
     self::InitUserEntity();
     $maxNumber = 5;
     $index = 0;
     $paramUserId = intval($paramUserId);
     $arUserFilter = array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false);
     if ($paramUserId > 0) {
         $arUserFilter["ID_EQUAL_EXACT"] = $paramUserId;
     }
     if ($exchangeUseLogin == "N") {
         $arUserFilter["!UF_BXDAVEX_MAILBOX"] = false;
     }
     $arAdditionalExtendedProperties = array(array('DistinguishedPropertySetId' => 'PublicStrings', 'PropertyName' => 'BX_TASKS_GUID', 'PropertyType' => 'String'), array('DistinguishedPropertySetId' => 'PublicStrings', 'PropertyName' => 'BX_TASKS_SERIALIZED_DATA', 'PropertyType' => 'String'));
     $dbUserList = CUser::GetList($by = "UF_BXDAVEX_TSKSYNC", $order = "asc", $arUserFilter, array("SELECT" => array("ID", "LOGIN", "UF_BXDAVEX_MAILBOX", "UF_BXDAVEX_TSKSYNC")));
     while ($arUser = $dbUserList->Fetch()) {
         $index++;
         if ($index > $maxNumber) {
             break;
         }
         $GLOBALS["USER_FIELD_MANAGER"]->Update("USER", $arUser["ID"], array("UF_BXDAVEX_TSKSYNC" => ConvertTimeStamp(time(), FULL)));
         $mailbox = $exchangeUseLogin == "Y" ? $arUser["LOGIN"] . $exchangeMailbox : $arUser["UF_BXDAVEX_MAILBOX"];
         if (empty($mailbox)) {
             continue;
         }
         $arFoldersList = $exchange->GetFoldersList(array("mailbox" => $mailbox));
         if (!is_array($arFoldersList)) {
             if (DAV_CALDAV_DEBUG) {
                 CDav::WriteToLog('Error during tasks exchange: $exchange->GetFoldersList() returns unexpected result', '');
             }
             return;
         }
         $arUserFolders = array("tasks" => GetMessage("DAV_EC_TASKS"));
         foreach ($arFoldersList as $value) {
             $arUserFolders[$value["XML_ID"]] = $value["NAME"];
         }
         $arUserTaskItems = array();
         $arUserTaskItemsFolder = array();
         foreach ($arUserFolders as $userFolderXmlId => $userFolder) {
             $arTaskItemsList = $exchange->GetList(array("mailbox" => $mailbox, "FolderId" => $userFolderXmlId), array("ItemShape" => "IdOnly"), $arAdditionalExtendedProperties);
             if (!is_array($arTaskItemsList)) {
                 if (DAV_CALDAV_DEBUG) {
                     CDav::WriteToLog('Error during tasks exchange: $exchange->GetList() returns unexpected result', '');
                 }
                 return;
             }
             foreach ($arTaskItemsList as $value) {
                 $arUserTaskItems[] = array("XML_ID" => $value["XML_ID"], "MODIFICATION_LABEL" => $value["MODIFICATION_LABEL"]);
                 $arUserTaskItemsFolder[$value["XML_ID"]] = $userFolderXmlId;
             }
         }
         $arModifiedUserTaskItems = CTaskSync::SyncTaskItems("exchange", $arUser["ID"], $arUserTaskItems);
         foreach ($arModifiedUserTaskItems as $value) {
             $arModifiedTaskItem = $exchange->GetById($value["XML_ID"], $arAdditionalExtendedProperties);
             if (is_array($arModifiedTaskItem) && count($arModifiedTaskItem) > 0) {
                 $arModifiedTaskItem = $arModifiedTaskItem[0];
                 $arModifyEventArray = array_merge($arModifiedTaskItem, array("ID" => $value["ID"], "USER_ID" => $arUser["ID"], "FOLDER_ID" => $arUserFolders[$arUserTaskItemsFolder[$arModifiedTaskItem["XML_ID"]]]));
                 //XML_ID, MODIFICATION_LABEL, SUBJECT, BODY, BODY_TYPE, DATE_CREATE, IMPORTANCE, REMINDER_MINUTES_BEFORE_START, ACTUAL_WORK, BILLING_INFORMATION, MILEAGE, START_DATE, DUE_DATE, IS_COMPLETE, IS_RECURRING, PERCENT_COMPLETE, STATUS, STATUS_DESCRIPTION, TOTAL_WORK, OWNER, RECURRING_TYPE, RECURRING_INTERVAL, RECURRING_DAYOFMONTH, RECURRING_DAYSOFWEEK, RECURRING_DAYOFWEEKINDEX, RECURRING_MONTH, RECURRING_STARTDATE, RECURRING_NUMBEROFOCCURRENCES, RECURRING_ENDDATE
                 CTaskSync::SyncModifyTaskItem($arModifyEventArray);
             }
         }
     }
     return "CDavExchangeTasks::DataSync();";
 }
Example #5
0
<?php

define("STOP_STATISTICS", true);
define("STOP_WEBDAV", true);
define("NOT_CHECK_PERMISSIONS", true);
define('NO_AGENT_CHECK', true);
define("DisableEventsCheck", true);
if (isset($_REQUEST["help"]) && ($_REQUEST["help"] === "Y" || $_REQUEST["help"] === "y")) {
    require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/dav/help.php";
    die;
}
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";
CModule::IncludeModule("dav");
CDav::Report("<<<<<<<<<<<<<< REQUEST >>>>>>>>>>>>>>>>", "\n" . print_r(array("REQUEST_METHOD" => $_SERVER["REQUEST_METHOD"], "REQUEST_URI" => $_SERVER["REQUEST_URI"], "PATH_INFO" => $_SERVER["PATH_INFO"], "HTTP_DEPTH" => $_SERVER["HTTP_DEPTH"], "AUTH_TYPE" => $_SERVER["AUTH_TYPE"], "PHP_AUTH_USER" => $_SERVER["PHP_AUTH_USER"]), true) . "\n", "UNDEFINED", true);
CDav::ProcessRequest();
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php";
Example #6
0
 public function Delete($id, $siteId, $account, $arPath)
 {
     $calendarId = $this->GetCalendarId($siteId, $account, $arPath);
     if ($calendarId == null) {
         return '404 Not Found';
     }
     $request = $this->groupdav->GetRequest();
     $oldEvent = $this->GetEntry('DELETE', $id, $calendarId);
     if (!is_array($oldEvent)) {
         return $oldEvent;
     }
     CDav::Report("CDavCalendarHandler::Delete", "id", $id);
     return CCalendar::DeleteCalendarEvent($calendarId, $oldEvent["ID"], $request->GetPrincipal()->Id());
 }
 public static function GetList($arOrder = array("ID" => "ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     global $DB;
     if (count($arSelectFields) <= 0) {
         $arSelectFields = array("ID", "PATH", "EXPIRES", "LOCK_OWNER", "LOCK_DEPTH", "LOCK_TYPE", "LOCK_SCOPE", "CREATED", "MODIFIED");
     }
     static $arFields = array("ID" => array("FIELD" => "L.ID", "TYPE" => "string"), "PATH" => array("FIELD" => "L.PATH", "TYPE" => "string"), "EXPIRES" => array("FIELD" => "L.EXPIRES", "TYPE" => "int"), "LOCK_OWNER" => array("FIELD" => "L.LOCK_OWNER", "TYPE" => "string"), "LOCK_DEPTH" => array("FIELD" => "L.LOCK_DEPTH", "TYPE" => "string"), "LOCK_TYPE" => array("FIELD" => "L.LOCK_TYPE", "TYPE" => "string"), "LOCK_SCOPE" => array("FIELD" => "L.LOCK_SCOPE", "TYPE" => "string"), "CREATED" => array("FIELD" => "L.CREATED", "TYPE" => "datetime"), "MODIFIED" => array("FIELD" => "L.MODIFIED", "TYPE" => "datetime"));
     $arSqls = CDav::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
     $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
     if (is_array($arGroupBy) && count($arGroupBy) == 0) {
         $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_dav_locks L " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             return $arRes["CNT"];
         } else {
             return False;
         }
     }
     $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_dav_locks L " . "\t" . $arSqls["FROM"] . " ";
     if (strlen($arSqls["WHERE"]) > 0) {
         $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
     }
     if (strlen($arSqls["GROUPBY"]) > 0) {
         $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
     }
     if (strlen($arSqls["ORDERBY"]) > 0) {
         $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " ";
     }
     if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) {
         $strSql_tmp = "SELECT COUNT('x') as CNT " . "FROM b_dav_locks L " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql_tmp .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
         $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $cnt = 0;
         if (strlen($arSqls["GROUPBY"]) <= 0) {
             if ($arRes = $dbRes->Fetch()) {
                 $cnt = $arRes["CNT"];
             }
         } else {
             // рнкэйн дкъ MYSQL!!! дкъ ORACLE дпсцни йнд
             $cnt = $dbRes->SelectedRowsCount();
         }
         $dbRes = new CDBResult();
         //echo "!2.3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
     } else {
         if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) {
             $strSql .= "LIMIT " . IntVal($arNavStartParams["nTopCount"]);
         }
         //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $dbRes = new CDavVirtualFileSystemResult($dbRes);
     return $dbRes;
 }
Example #8
0
        }
        if (!$_SERVER['PHP_AUTH_USER'] || !$_SERVER['PHP_AUTH_USER']) {
            $res = !empty($_SERVER['REDIRECT_REMOTE_USER']) ? $_SERVER['REDIRECT_REMOTE_USER'] : $_SERVER['REMOTE_USER'];
            if (!empty($res) && preg_match('/(?<=(basic\\s))(.*)$/is', $res, $matches)) {
                $res = trim($matches[0]);
                list($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]) = explode(':', base64_decode($res));
            }
        }
        if (!is_array($GLOBALS["APPLICATION"]->arComponentMatch)) {
            $GLOBALS["APPLICATION"]->arComponentMatch = array();
        }
        $GLOBALS["APPLICATION"]->arComponentMatch[] = 'dav';
        $GLOBALS["APPLICATION"]->arComponentMatch[] = 'disk';
        $GLOBALS["APPLICATION"]->arComponentMatch[] = 'socialnetwork';
        define("STOP_STATISTICS", true);
        define("NO_AGENT_STATISTIC", "Y");
        define("NO_AGENT_CHECK", true);
        $GLOBALS["APPLICATION"]->ShowPanel = false;
        if (CModule::IncludeModule("dav") && CModule::IncludeModule("disk")) {
            //CDav::OnBeforePrologWebDav();
            CDav::Report("<<<<<<<<<<<<<< REQUEST >>>>>>>>>>>>>>>>", "\n" . print_r(array("REQUEST_METHOD" => $_SERVER["REQUEST_METHOD"], "REQUEST_URI" => $_SERVER["REQUEST_URI"], "PATH_INFO" => $_SERVER["PATH_INFO"], "HTTP_DEPTH" => $_SERVER["HTTP_DEPTH"], "AUTH_TYPE" => $_SERVER["AUTH_TYPE"], "PHP_AUTH_USER" => $_SERVER["PHP_AUTH_USER"]), true) . "\n", "UNDEFINED", true);
            CDav::ProcessWebDavRequest();
            //OnBeforePrologWebDav();
            die;
        }
    }
}
$app = $GLOBALS["USER"]->GetParam("APPLICATION_ID");
if ($app == "caldav" || $app == "carddav" || $app == "webdav") {
    die;
}
 public function Put($id, $siteId, $account, $arPath)
 {
     $collectionId = $this->GetCollectionId($siteId, $account, $arPath);
     if ($collectionId == null) {
         return '404 Not Found';
     }
     $request = $this->groupdav->GetRequest();
     $oldCard = $this->GetEntry('PUT', $id, $collectionId);
     if (!is_null($oldCard) && !is_array($oldCard)) {
         return $oldCard;
     }
     $charset = "utf-8";
     $arContentParameters = $request->GetContentParameters();
     if (!empty($arContentParameters['CONTENT_TYPE'])) {
         $arContentType = explode(';', $arContentParameters['CONTENT_TYPE']);
         if (count($arContentType) > 1) {
             array_shift($arContentType);
             foreach ($arContentType as $attribute) {
                 $attribute = trim($attribute);
                 list($key, $value) = explode('=', $attribute);
                 if (strtolower($key) == 'charset') {
                     $charset = strtolower($value);
                 }
             }
         }
     }
     $content = $request->GetRequestBody();
     $content = htmlspecialcharsback($content);
     if (is_array($oldCard)) {
         $contactId = $oldCard['ID'];
     } else {
         $contactId = 0;
     }
     $cs = CDav::GetCharset($siteId);
     if (is_null($cs) || empty($cs)) {
         $cs = "utf-8";
     }
     $content = $GLOBALS["APPLICATION"]->ConvertCharset($content, $charset, $cs);
     // Create record
     return "201 Created";
 }
Example #10
0
 public function GetRequestBody()
 {
     if ($this->rawRequestBody == null) {
         $this->rawRequestBody = file_get_contents('php://input');
         CDav::Report("<<<<<<<<<<<<<< REQUEST BODY >>>>>>>>>>>>>>>>", "\n" . $this->rawRequestBody . "\n", "UNDEFINED", true);
     }
     return $this->rawRequestBody;
 }
 public static function DoCheckCalDAVServer($scheme, $host = null, $port = null, $username = null, $password = null, $path = null)
 {
     if ($scheme . "!" == intval($scheme) . "!") {
         $scheme = intval($scheme);
         if ($scheme <= 0) {
             return false;
         }
         $arConnection = CDavConnection::GetById($scheme);
         if (!is_array($arConnection)) {
             return false;
         }
         $scheme = $arConnection["SERVER_SCHEME"];
         $host = $arConnection["SERVER_HOST"];
         $port = $arConnection["SERVER_PORT"];
         $username = $arConnection["SERVER_USERNAME"];
         $password = $arConnection["SERVER_PASSWORD"];
         $path = $arConnection["SERVER_PATH"];
     }
     $client = new CDavGroupdavClientCalendar($scheme, $host, $port, $username, $password);
     if (CDav::UseProxy()) {
         $arProxy = CDav::GetProxySettings();
         $client->SetProxy($arProxy["PROXY_SCHEME"], $arProxy["PROXY_HOST"], $arProxy["PROXY_PORT"], $arProxy["PROXY_USERNAME"], $arProxy["PROXY_PASSWORD"]);
     }
     return $client->CheckWebdavServer($path);
 }
Example #12
0
 public static function GetList($arOrder = array("ID" => "ASC"), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     global $DB;
     if (count($arSelectFields) <= 0) {
         $arSelectFields = array("ID", "ENTITY_TYPE", "ENTITY_ID", "ACCOUNT_TYPE", "NAME", "SERVER_SCHEME", "SERVER_HOST", "SERVER_PORT", "SERVER_USERNAME", "SERVER_PASSWORD", "SERVER_PATH", "CREATED", "MODIFIED", "SYNCHRONIZED", "LAST_RESULT");
     }
     static $arFields = array("ID" => array("FIELD" => "N.ID", "TYPE" => "int"), "ENTITY_TYPE" => array("FIELD" => "N.ENTITY_TYPE", "TYPE" => "string"), "ENTITY_ID" => array("FIELD" => "N.ENTITY_ID", "TYPE" => "int"), "ACCOUNT_TYPE" => array("FIELD" => "N.ACCOUNT_TYPE", "TYPE" => "string"), "NAME" => array("FIELD" => "N.NAME", "TYPE" => "string"), "SERVER_SCHEME" => array("FIELD" => "N.SERVER_SCHEME", "TYPE" => "string"), "SERVER_HOST" => array("FIELD" => "N.SERVER_HOST", "TYPE" => "string"), "SERVER_PORT" => array("FIELD" => "N.SERVER_PORT", "TYPE" => "int"), "SERVER_USERNAME" => array("FIELD" => "N.SERVER_USERNAME", "TYPE" => "string"), "SERVER_PASSWORD" => array("FIELD" => "N.SERVER_PASSWORD", "TYPE" => "string"), "SERVER_PATH" => array("FIELD" => "N.SERVER_PATH", "TYPE" => "string"), "CREATED" => array("FIELD" => "N.CREATED", "TYPE" => "datetime"), "MODIFIED" => array("FIELD" => "N.MODIFIED", "TYPE" => "datetime"), "SYNCHRONIZED" => array("FIELD" => "N.SYNCHRONIZED", "TYPE" => "datetime"), "LAST_RESULT" => array("FIELD" => "N.LAST_RESULT", "TYPE" => "string"));
     $arSqls = CDav::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
     $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
     if (is_array($arGroupBy) && count($arGroupBy) == 0) {
         $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_dav_connections N " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             return $arRes["CNT"];
         } else {
             return False;
         }
     }
     $strSql = "SELECT " . $arSqls["SELECT"] . " " . "FROM b_dav_connections N " . "\t" . $arSqls["FROM"] . " ";
     if (strlen($arSqls["WHERE"]) > 0) {
         $strSql .= "WHERE " . $arSqls["WHERE"] . " ";
     }
     if (strlen($arSqls["GROUPBY"]) > 0) {
         $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
     }
     if (strlen($arSqls["ORDERBY"]) > 0) {
         $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " ";
     }
     if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) {
         $strSql_tmp = "SELECT COUNT('x') as CNT " . "FROM b_dav_connections N " . "\t" . $arSqls["FROM"] . " ";
         if (strlen($arSqls["WHERE"]) > 0) {
             $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " ";
         }
         if (strlen($arSqls["GROUPBY"]) > 0) {
             $strSql_tmp .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
         }
         //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
         $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $cnt = 0;
         if (strlen($arSqls["GROUPBY"]) <= 0) {
             if ($arRes = $dbRes->Fetch()) {
                 $cnt = $arRes["CNT"];
             }
         } else {
             // рнкэйн дкъ MYSQL!!! дкъ ORACLE дпсцни йнд
             $cnt = $dbRes->SelectedRowsCount();
         }
         $dbRes = new CDBResult();
         //echo "!2.3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
     } else {
         if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) {
             $strSql .= "LIMIT " . IntVal($arNavStartParams["nTopCount"]);
         }
         //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     }
     $dbRes = new CDavConnectionResult($dbRes);
     return $dbRes;
 }
Example #13
0
 public static function PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
 {
     global $DB;
     $strSqlSelect = "";
     $strSqlFrom = "";
     $strSqlWhere = "";
     $strSqlGroupBy = "";
     $strSqlOrderBy = "";
     $arGroupByFunct = array("COUNT", "AVG", "MIN", "MAX", "SUM");
     $arAlreadyJoined = array();
     // GROUP BY -->
     if (is_array($arGroupBy) && count($arGroupBy) > 0) {
         $arSelectFields = $arGroupBy;
         foreach ($arGroupBy as $key => $val) {
             $val = strtoupper($val);
             $key = strtoupper($key);
             if (array_key_exists($val, $arFields) && !in_array($key, $arGroupByFunct)) {
                 if (strlen($strSqlGroupBy) > 0) {
                     $strSqlGroupBy .= ", ";
                 }
                 $strSqlGroupBy .= $arFields[$val]["FIELD"];
                 if (isset($arFields[$val]["FROM"]) && strlen($arFields[$val]["FROM"]) > 0 && !in_array($arFields[$val]["FROM"], $arAlreadyJoined)) {
                     if (strlen($strSqlFrom) > 0) {
                         $strSqlFrom .= " ";
                     }
                     $strSqlFrom .= $arFields[$val]["FROM"];
                     $arAlreadyJoined[] = $arFields[$val]["FROM"];
                 }
             }
         }
     }
     // <-- GROUP BY
     // SELECT -->
     $arFieldsKeys = array_keys($arFields);
     if (is_array($arGroupBy) && count($arGroupBy) == 0) {
         $strSqlSelect = "COUNT(%%_DISTINCT_%% " . $arFields[$arFieldsKeys[0]]["FIELD"] . ") as CNT ";
     } else {
         if (isset($arSelectFields) && !is_array($arSelectFields) && is_string($arSelectFields) && strlen($arSelectFields) > 0 && array_key_exists($arSelectFields, $arFields)) {
             $arSelectFields = array($arSelectFields);
         }
         if (!isset($arSelectFields) || !is_array($arSelectFields) || count($arSelectFields) <= 0 || in_array("*", $arSelectFields)) {
             for ($i = 0, $n = count($arFieldsKeys); $i < $n; $i++) {
                 if (isset($arFields[$arFieldsKeys[$i]]["WHERE_ONLY"]) && $arFields[$arFieldsKeys[$i]]["WHERE_ONLY"] == "Y") {
                     continue;
                 }
                 if (strlen($strSqlSelect) > 0) {
                     $strSqlSelect .= ", ";
                 }
                 if ($arFields[$arFieldsKeys[$i]]["TYPE"] == "datetime") {
                     if (array_key_exists($arFieldsKeys[$i], $arOrder)) {
                         $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"] . " as " . $arFieldsKeys[$i] . "_X1, ";
                     }
                     $strSqlSelect .= $DB->DateToCharFunction($arFields[$arFieldsKeys[$i]]["FIELD"], "FULL") . " as " . $arFieldsKeys[$i];
                 } elseif ($arFields[$arFieldsKeys[$i]]["TYPE"] == "date") {
                     if (array_key_exists($arFieldsKeys[$i], $arOrder)) {
                         $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"] . " as " . $arFieldsKeys[$i] . "_X1, ";
                     }
                     $strSqlSelect .= $DB->DateToCharFunction($arFields[$arFieldsKeys[$i]]["FIELD"], "SHORT") . " as " . $arFieldsKeys[$i];
                 } else {
                     $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"] . " as " . $arFieldsKeys[$i];
                 }
                 if (isset($arFields[$arFieldsKeys[$i]]["FROM"]) && strlen($arFields[$arFieldsKeys[$i]]["FROM"]) > 0 && !in_array($arFields[$arFieldsKeys[$i]]["FROM"], $arAlreadyJoined)) {
                     if (strlen($strSqlFrom) > 0) {
                         $strSqlFrom .= " ";
                     }
                     $strSqlFrom .= $arFields[$arFieldsKeys[$i]]["FROM"];
                     $arAlreadyJoined[] = $arFields[$arFieldsKeys[$i]]["FROM"];
                 }
             }
         } else {
             foreach ($arSelectFields as $key => $val) {
                 $val = strtoupper($val);
                 $key = strtoupper($key);
                 if (array_key_exists($val, $arFields)) {
                     if (strlen($strSqlSelect) > 0) {
                         $strSqlSelect .= ", ";
                     }
                     if (in_array($key, $arGroupByFunct)) {
                         $strSqlSelect .= $key . "(" . $arFields[$val]["FIELD"] . ") as " . $val;
                     } else {
                         if ($arFields[$val]["TYPE"] == "datetime") {
                             if (array_key_exists($val, $arOrder)) {
                                 $strSqlSelect .= $arFields[$val]["FIELD"] . " as " . $val . "_X1, ";
                             }
                             $strSqlSelect .= $DB->DateToCharFunction($arFields[$val]["FIELD"], "FULL") . " as " . $val;
                         } elseif ($arFields[$val]["TYPE"] == "date") {
                             if (array_key_exists($val, $arOrder)) {
                                 $strSqlSelect .= $arFields[$val]["FIELD"] . " as " . $val . "_X1, ";
                             }
                             $strSqlSelect .= $DB->DateToCharFunction($arFields[$val]["FIELD"], "SHORT") . " as " . $val;
                         } else {
                             $strSqlSelect .= $arFields[$val]["FIELD"] . " as " . $val;
                         }
                     }
                     if (isset($arFields[$val]["FROM"]) && strlen($arFields[$val]["FROM"]) > 0 && !in_array($arFields[$val]["FROM"], $arAlreadyJoined)) {
                         if (strlen($strSqlFrom) > 0) {
                             $strSqlFrom .= " ";
                         }
                         $strSqlFrom .= $arFields[$val]["FROM"];
                         $arAlreadyJoined[] = $arFields[$val]["FROM"];
                     }
                 }
             }
         }
         if (strlen($strSqlGroupBy) > 0) {
             if (strlen($strSqlSelect) > 0) {
                 $strSqlSelect .= ", ";
             }
             $strSqlSelect .= "COUNT(%%_DISTINCT_%% " . $arFields[$arFieldsKeys[0]]["FIELD"] . ") as CNT";
         } else {
             $strSqlSelect = "%%_DISTINCT_%% " . $strSqlSelect;
         }
     }
     // <-- SELECT
     // WHERE -->
     $arSqlSearch = array();
     if (!is_array($arFilter)) {
         $filter_keys = array();
     } else {
         $filter_keys = array_keys($arFilter);
     }
     for ($i = 0, $n = count($filter_keys); $i < $n; $i++) {
         $vals = $arFilter[$filter_keys[$i]];
         if (!is_array($vals)) {
             $vals = array($vals);
         }
         $key = $filter_keys[$i];
         $key_res = CDav::GetFilterOperation($key);
         $key = $key_res["FIELD"];
         $strNegative = $key_res["NEGATIVE"];
         $strOperation = $key_res["OPERATION"];
         $strOrNull = $key_res["OR_NULL"];
         if (array_key_exists($key, $arFields)) {
             $arSqlSearch_tmp = array();
             for ($j = 0, $n1 = count($vals); $j < $n1; $j++) {
                 $val = $vals[$j];
                 if (isset($arFields[$key]["WHERE"])) {
                     $arSqlSearch_tmp1 = call_user_func_array($arFields[$key]["WHERE"], array($val, $key, $strOperation, $strNegative, $arFields[$key]["FIELD"], $arFields, $arFilter));
                     if ($arSqlSearch_tmp1 !== false) {
                         $arSqlSearch_tmp[] = $arSqlSearch_tmp1;
                     }
                 } else {
                     if ($arFields[$key]["TYPE"] == "int") {
                         if (IntVal($val) == 0 && strpos($strOperation, "=") !== False) {
                             $arSqlSearch_tmp[] = "(" . $arFields[$key]["FIELD"] . " IS " . ($strNegative == "Y" ? "NOT " : "") . "NULL) " . ($strNegative == "Y" ? "AND" : "OR") . " " . ($strNegative == "Y" ? "NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " 0)";
                         } else {
                             $arSqlSearch_tmp[] = ($strNegative == "Y" ? " " . $arFields[$key]["FIELD"] . " IS NULL OR NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " " . IntVal($val) . " )";
                         }
                     } elseif ($arFields[$key]["TYPE"] == "double") {
                         $val = str_replace(",", ".", $val);
                         if (DoubleVal($val) == 0 && strpos($strOperation, "=") !== False) {
                             $arSqlSearch_tmp[] = "(" . $arFields[$key]["FIELD"] . " IS " . ($strNegative == "Y" ? "NOT " : "") . "NULL) " . ($strNegative == "Y" ? "AND" : "OR") . " " . ($strNegative == "Y" ? "NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " 0)";
                         } else {
                             $arSqlSearch_tmp[] = ($strNegative == "Y" ? " " . $arFields[$key]["FIELD"] . " IS NULL OR NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " " . DoubleVal($val) . " )";
                         }
                     } elseif ($arFields[$key]["TYPE"] == "string" || $arFields[$key]["TYPE"] == "char") {
                         if ($strOperation == "QUERY") {
                             $arSqlSearch_tmp[] = GetFilterQuery($arFields[$key]["FIELD"], $val, "Y");
                         } else {
                             if (strlen($val) == 0 && strpos($strOperation, "=") !== False) {
                                 $arSqlSearch_tmp[] = "(" . $arFields[$key]["FIELD"] . " IS " . ($strNegative == "Y" ? "NOT " : "") . "NULL) " . ($strNegative == "Y" ? "AND NOT" : "OR") . " (" . $DB->Length($arFields[$key]["FIELD"]) . " <= 0) " . ($strNegative == "Y" ? "AND NOT" : "OR") . " (" . $arFields[$key]["FIELD"] . " " . $strOperation . " '" . $DB->ForSql($val) . "' )";
                             } else {
                                 $arSqlSearch_tmp[] = ($strNegative == "Y" ? " " . $arFields[$key]["FIELD"] . " IS NULL OR NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " '" . $DB->ForSql($val) . "' )";
                             }
                         }
                     } elseif ($arFields[$key]["TYPE"] == "datetime") {
                         if (strlen($val) <= 0) {
                             $arSqlSearch_tmp[] = ($strNegative == "Y" ? "NOT" : "") . "(" . $arFields[$key]["FIELD"] . " IS NULL)";
                         } else {
                             $arSqlSearch_tmp[] = ($strNegative == "Y" ? " " . $arFields[$key]["FIELD"] . " IS NULL OR NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " " . $DB->CharToDateFunction($DB->ForSql($val), "FULL") . ")";
                         }
                     } elseif ($arFields[$key]["TYPE"] == "date") {
                         if (strlen($val) <= 0) {
                             $arSqlSearch_tmp[] = ($strNegative == "Y" ? "NOT" : "") . "(" . $arFields[$key]["FIELD"] . " IS NULL)";
                         } else {
                             $arSqlSearch_tmp[] = ($strNegative == "Y" ? " " . $arFields[$key]["FIELD"] . " IS NULL OR NOT " : "") . "(" . $arFields[$key]["FIELD"] . " " . $strOperation . " " . $DB->CharToDateFunction($DB->ForSql($val), "SHORT") . ")";
                         }
                     }
                 }
             }
             if (isset($arFields[$key]["FROM"]) && strlen($arFields[$key]["FROM"]) > 0 && !in_array($arFields[$key]["FROM"], $arAlreadyJoined)) {
                 if (strlen($strSqlFrom) > 0) {
                     $strSqlFrom .= " ";
                 }
                 $strSqlFrom .= $arFields[$key]["FROM"];
                 $arAlreadyJoined[] = $arFields[$key]["FROM"];
             }
             $strSqlSearch_tmp = "";
             for ($j = 0, $n2 = count($arSqlSearch_tmp); $j < $n2; $j++) {
                 if ($j > 0) {
                     $strSqlSearch_tmp .= $strNegative == "Y" ? " AND " : " OR ";
                 }
                 $strSqlSearch_tmp .= "(" . $arSqlSearch_tmp[$j] . ")";
             }
             if ($strOrNull == "Y") {
                 if (strlen($strSqlSearch_tmp) > 0) {
                     $strSqlSearch_tmp .= $strNegative == "Y" ? " AND " : " OR ";
                 }
                 $strSqlSearch_tmp .= "(" . $arFields[$key]["FIELD"] . " IS " . ($strNegative == "Y" ? "NOT " : "") . "NULL)";
                 if (strlen($strSqlSearch_tmp) > 0) {
                     $strSqlSearch_tmp .= $strNegative == "Y" ? " AND " : " OR ";
                 }
                 if ($arFields[$key]["TYPE"] == "int" || $arFields[$key]["TYPE"] == "double") {
                     $strSqlSearch_tmp .= "(" . $arFields[$key]["FIELD"] . " " . ($strNegative == "Y" ? "<>" : "=") . " 0)";
                 } elseif ($arFields[$key]["TYPE"] == "string" || $arFields[$key]["TYPE"] == "char") {
                     $strSqlSearch_tmp .= "(" . $arFields[$key]["FIELD"] . " " . ($strNegative == "Y" ? "<>" : "=") . " '')";
                 }
             }
             if ($strSqlSearch_tmp != "") {
                 $arSqlSearch[] = "(" . $strSqlSearch_tmp . ")";
             }
         }
     }
     for ($i = 0, $n = count($arSqlSearch); $i < $n; $i++) {
         if (strlen($strSqlWhere) > 0) {
             $strSqlWhere .= " AND ";
         }
         $strSqlWhere .= "(" . $arSqlSearch[$i] . ")";
     }
     // <-- WHERE
     // ORDER BY -->
     $arSqlOrder = array();
     foreach ($arOrder as $by => $order) {
         $by = strtoupper($by);
         $order = strtoupper($order);
         if ($order != "ASC") {
             $order = "DESC";
         } else {
             $order = "ASC";
         }
         if (array_key_exists($by, $arFields)) {
             if ($arFields[$by]["TYPE"] == "datetime" || $arFields[$by]["TYPE"] == "date") {
                 $arSqlOrder[] = " " . $by . "_X1 " . $order . " ";
             } else {
                 $arSqlOrder[] = " " . $arFields[$by]["FIELD"] . " " . $order . " ";
             }
             if (isset($arFields[$by]["FROM"]) && strlen($arFields[$by]["FROM"]) > 0 && !in_array($arFields[$by]["FROM"], $arAlreadyJoined)) {
                 if (strlen($strSqlFrom) > 0) {
                     $strSqlFrom .= " ";
                 }
                 $strSqlFrom .= $arFields[$by]["FROM"];
                 $arAlreadyJoined[] = $arFields[$by]["FROM"];
             }
         }
     }
     $strSqlOrderBy = "";
     DelDuplicateSort($arSqlOrder);
     for ($i = 0, $n = count($arSqlOrder); $i < $n; $i++) {
         if (strlen($strSqlOrderBy) > 0) {
             $strSqlOrderBy .= ", ";
         }
         if (strtoupper($DB->type) == "ORACLE") {
             if (substr($arSqlOrder[$i], -3) == "ASC") {
                 $strSqlOrderBy .= $arSqlOrder[$i] . " NULLS FIRST";
             } else {
                 $strSqlOrderBy .= $arSqlOrder[$i] . " NULLS LAST";
             }
         } else {
             $strSqlOrderBy .= $arSqlOrder[$i];
         }
     }
     // <-- ORDER BY
     return array("SELECT" => $strSqlSelect, "FROM" => $strSqlFrom, "WHERE" => $strSqlWhere, "GROUPBY" => $strSqlGroupBy, "ORDERBY" => $strSqlOrderBy);
 }
Example #14
0
 public function Render()
 {
     $status = $this->httpStatus;
     if (strlen($status) <= 0) {
         $status = "200 OK";
     }
     static::sendStatus($status);
     foreach ($this->arHeaders as $header) {
         static::sendHeader($header);
     }
     static::sendStatus($status);
     if ($this->outputType == DAV_XML_OUTPUT && !empty($this->body)) {
         echo "<" . "?xml version=\"1.0\" encoding=\"utf-8\"?" . ">\n";
     }
     echo $this->body;
     CDav::Report("<<<<<<<<<<<<<< RESPONSE >>>>>>>>>>>>>>>>", "\nheaders:\n" . print_r(headers_list(), true) . "\noutput:\n" . $this->body . "\n", "UNDEFINED", true);
 }
Example #15
0
 public static function DataSync($paramUserId = 0)
 {
     if (DAV_EXCH_DEBUG) {
         CDav::WriteToLog("Starting EXCHANGE contacts sync...", "SC");
     }
     $exchangeScheme = COption::GetOptionString("dav", "exchange_scheme", "http");
     $exchangeServer = COption::GetOptionString("dav", "exchange_server", "");
     $exchangePort = COption::GetOptionString("dav", "exchange_port", "80");
     $exchangeUsername = COption::GetOptionString("dav", "exchange_username", "");
     $exchangePassword = COption::GetOptionString("dav", "exchange_password", "");
     if (empty($exchangeServer)) {
         CAgent::RemoveAgent("CDavExchangeContacts::DataSync();", "dav");
         COption::SetOptionString("dav", "agent_contacts", "N");
         return "";
     }
     $exchange = new CDavExchangeContacts($exchangeScheme, $exchangeServer, $exchangePort, $exchangeUsername, $exchangePassword);
     if (GW_DEBUG) {
         $exchange->Debug();
     }
     $exchangeMailbox = COption::GetOptionString("dav", "exchange_mailbox", "");
     $exchangeUseLogin = COption::GetOptionString("dav", "exchange_use_login", "Y");
     self::InitUserEntity();
     $maxNumber = 5;
     $index = 0;
     $rootStructureName = null;
     $paramUserId = intval($paramUserId);
     $arUserFilter = array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false);
     if ($paramUserId > 0) {
         $arUserFilter["ID_EQUAL_EXACT"] = $paramUserId;
     }
     if ($exchangeUseLogin == "N") {
         $arUserFilter["!UF_BXDAVEX_MAILBOX"] = false;
     }
     $dbUserList = CUser::GetList($by = "UF_BXDAVEX_CNTSYNC", $order = "asc", $arUserFilter, array("SELECT" => array("ID", "LOGIN", "UF_BXDAVEX_MAILBOX", "UF_BXDAVEX_CNTSYNC")));
     while ($arUser = $dbUserList->Fetch()) {
         $index++;
         if ($index > $maxNumber) {
             break;
         }
         if (DAV_EXCH_DEBUG) {
             CDav::WriteToLog("Processing user [" . $arUser["ID"] . "] " . $arUser["LOGIN"], "SC");
         }
         $lastSyncDate = $arUser["UF_BXDAVEX_CNTSYNC"];
         if (empty($lastSyncDate)) {
             $lastSyncDate = ConvertTimeStamp(mktime(0, 0, 0, 1, 1, 2000), FULL);
         }
         $GLOBALS["USER_FIELD_MANAGER"]->Update("USER", $arUser["ID"], array("UF_BXDAVEX_CNTSYNC" => ConvertTimeStamp(time(), FULL)));
         $mailbox = $exchangeUseLogin == "Y" ? $arUser["LOGIN"] . $exchangeMailbox : $arUser["UF_BXDAVEX_MAILBOX"];
         if (empty($mailbox)) {
             continue;
         }
         $tmpNumItems = 0;
         $arAddressbookCache = null;
         $dbUserListTmp = CUser::GetList($by = "ID", $order = "asc", array("TIMESTAMP_X_1" => $lastSyncDate, "ACTIVE" => "Y", "!UF_DEPARTMENT" => false));
         if ($arUserTmp = $dbUserListTmp->Fetch()) {
             if (is_null($rootStructureName)) {
                 $iblockStructure = COption::GetOptionInt("intranet", 'iblock_structure', 0);
                 $db = CIBlockSection::GetList(array("LEFT_MARGIN" => "ASC"), array("IBLOCK_ID" => $iblockStructure));
                 if ($ar = $db->Fetch()) {
                     $rootStructureName = $ar["NAME"];
                 }
             }
             if (is_null($rootStructureName)) {
                 if (DAV_EXCH_DEBUG) {
                     CDav::WriteToLog("ERROR: Root structure is not found", "SC");
                 }
                 break;
             }
             $arAddressbooksList = $exchange->GetAddressbooksList(array("mailbox" => $mailbox));
             $arErrorsTmp = $exchange->GetErrors();
             if (count($arErrorsTmp) > 0) {
                 $txt = '';
                 foreach ($arErrorsTmp as $v) {
                     if (!empty($txt)) {
                         $txt .= ", ";
                     }
                     $txt .= "[" . $v[0] . "] " . $v[1];
                 }
                 if (DAV_EXCH_DEBUG) {
                     CDav::WriteToLog("ERROR: " . $txt, "SC");
                 }
                 continue;
             }
             $arAddressbook = null;
             foreach ($arAddressbooksList as $value) {
                 if ($value["NAME"] == $rootStructureName) {
                     $arAddressbook = $value;
                     break;
                 }
             }
             if (is_null($arAddressbook)) {
                 $arAddressbook = $exchange->AddAddressbook(array("mailbox" => $mailbox, "NAME" => $rootStructureName));
             }
             if (!is_array($arAddressbook) || !isset($arAddressbook["XML_ID"])) {
                 if (DAV_EXCH_DEBUG) {
                     CDav::WriteToLog("ERROR: Addressbook '" . $rootStructureName . "' for mailbox '" . $mailbox . "' is not found", "SC");
                 }
                 continue;
             }
             if (is_null($arAddressbookCache)) {
                 $arAddressbookCache = array();
                 $arPrs = $exchange->GetList(array("Mailbox" => $mailbox, "AddressbookId" => $arAddressbook["XML_ID"]), array("ItemShape" => "IdOnly", "AdditionalProperties" => array("contacts:GivenName", "contacts:MiddleName", "contacts:Surname")));
                 foreach ($arPrs as $prs) {
                     $s = $prs["NAME"] . "/" . $prs["SECOND_NAME"] . "/" . $prs["LAST_NAME"];
                     $arAddressbookCache[$s] = array("XML_ID" => $prs["XML_ID"], "MODIFICATION_LABEL" => $prs["MODIFICATION_LABEL"]);
                 }
             }
             do {
                 $s = $arUserTmp["NAME"] . "/" . $arUserTmp["SECOND_NAME"] . "/" . $arUserTmp["LAST_NAME"];
                 if (array_key_exists($s, $arAddressbookCache)) {
                     $exchange->Update($arAddressbookCache[$s], array_merge($arUserTmp, array("Mailbox" => $mailbox, "AddressbookId" => $arAddressbook["XML_ID"])));
                 } else {
                     $exchange->Add(array_merge($arUserTmp, array("Mailbox" => $mailbox, "AddressbookId" => $arAddressbook["XML_ID"])));
                 }
                 $arErrorsTmp = $exchange->GetErrors();
                 if (count($arErrorsTmp) > 0) {
                     $txt = '';
                     foreach ($arErrorsTmp as $v) {
                         if (!empty($txt)) {
                             $txt .= ", ";
                         }
                         $txt .= "[" . $v[0] . "] " . $v[1];
                     }
                     if (DAV_EXCH_DEBUG) {
                         CDav::WriteToLog("ERROR: " . $txt, "SC");
                     }
                 }
                 $tmpNumItems++;
             } while ($arUserTmp = $dbUserListTmp->Fetch());
         }
         if (DAV_EXCH_DEBUG) {
             CDav::WriteToLog("Sync " . intval($tmpNumItems) . " items", "SC");
         }
     }
     if (DAV_EXCH_DEBUG) {
         CDav::WriteToLog("EXCHANGE contacts sync finished", "SC");
     }
     return "CDavExchangeContacts::DataSync();";
 }
Example #16
0
 public static function DoDeleteCalendar($userId, $itemXmlId)
 {
     if (DAV_EXCH_DEBUG) {
         CDav::WriteToLog("EXCHANGE DoDeleteCalendar called for user " . $userId, "MDFE");
     }
     $exchangeScheme = COption::GetOptionString("dav", "exchange_scheme", "http");
     $exchangeServer = COption::GetOptionString("dav", "exchange_server", "");
     $exchangePort = COption::GetOptionString("dav", "exchange_port", "80");
     $exchangeUsername = COption::GetOptionString("dav", "exchange_username", "");
     $exchangePassword = COption::GetOptionString("dav", "exchange_password", "");
     if (empty($exchangeServer)) {
         return "";
     }
     $exchange = new CDavExchangeCalendar($exchangeScheme, $exchangeServer, $exchangePort, $exchangeUsername, $exchangePassword);
     if (GW_DEBUG) {
         $exchange->Debug();
     }
     $exchangeMailbox = COption::GetOptionString("dav", "exchange_mailbox", "");
     $exchangeUseLogin = COption::GetOptionString("dav", "exchange_use_login", "Y");
     self::InitUserEntity();
     if ($itemXmlId == "calendar_" . $userId) {
         return '';
     }
     $userId = intval($userId);
     $dbUserList = CUser::GetList($by = "", $order = "", array("ACTIVE" => "Y", "!UF_DEPARTMENT" => false, "ID_EQUAL_EXACT" => $userId), array("SELECT" => array("ID", "LOGIN", "UF_BXDAVEX_MAILBOX", "UF_BXDAVEX_CALSYNC")));
     if ($arUser = $dbUserList->Fetch()) {
         $mailbox = $exchangeUseLogin == "Y" ? $arUser["LOGIN"] . $exchangeMailbox : $arUser["UF_BXDAVEX_MAILBOX"];
         if (!empty($mailbox)) {
             $arResult = $exchange->DeleteCalendar($itemXmlId);
             if ($arResult) {
                 return $arResult;
             }
         }
     }
     return $exchange->GetErrors();
 }
Example #17
0
 private function RenderPropertyValue($value)
 {
     if (is_array($value)) {
         $request = $this->request;
         $response = $this->response;
         if (isset($value[0]['ns'])) {
             $value = CDavResource::EncodeHierarchicalProp($value, null, $xmlnsDefs = null, $xmlnsHash = null, $response, $request);
         }
         $value = htmlspecialcharsbx(CDav::ToString($value));
     } elseif (preg_match('/\\<(D:)?href\\>[^<]+\\<\\/(D:)?href\\>/i', $value)) {
         $value = preg_replace('/\\<(D:)?href\\>([^<]+)\\<\\/(D:)?href\\>/i', '&lt;\\1href&gt;<a href="\\2">\\2</a>&lt;/\\3href&gt;<br />', $value);
     } else {
         $value = htmlspecialcharsbx($value);
     }
     return $value;
 }
Example #18
0
 public function ExtractFromLock($path, $arLock)
 {
     $this->path = CDav::CheckIfRightSlashAdded($path);
     $this->arProperties = array(self::MakeProp("displayname", $path), self::MakeProp("creationdate", $arLock['CREATED']), self::MakeProp("getlastmodified", $arLock['MODIFIED']), self::MakeProp("resourcetype", ""), self::MakeProp("getcontenttype", ""), self::MakeProp("getcontentlength", 0));
 }