Ejemplo n.º 1
0
 public function __construct($cal, $siteId = null)
 {
     if (!isset($cal) || !is_array($cal) && !is_string($cal)) {
         return;
     }
     $this->component = new CDavICalendarComponent();
     if (is_string($cal)) {
         $this->component->InitializeFromString($cal);
     } else {
         $this->component->SetType('VCALENDAR');
         $this->component->SetProperties(array(new CDavICalendarProperty('VERSION:2.0'), new CDavICalendarProperty('PRODID:-//davical.org//NONSGML AWL Calendar//EN'), new CDavICalendarProperty('METHOD:PUBLISH')));
         $arComps = array();
         $tz = CDavICalendarTimeZone::GetTimezone(CDavICalendarTimeZone::getTimeZoneId());
         if (!empty($tz)) {
             $comptz = new CDavICalendarComponent();
             $comptz->InitializeFromString($tz);
             $arComps[] = $comptz;
         }
         $comp = new CDavICalendarComponent();
         $comp->InitializeFromArray($cal);
         $arComps[] = $comp;
         $this->component->SetComponents($arComps);
     }
 }
Ejemplo n.º 2
0
 private function GetVCardContent(array $contact)
 {
     $arVCardContact = array("TYPE" => "VCARD", "VERSION" => "3.0", "N" => $contact["LAST_NAME"] . ";" . $contact["NAME"] . ";" . $contact["SECOND_NAME"] . ";;", "FN" => $contact["NAME"] . ($contact["SECOND_NAME"] ? " " . $contact["SECOND_NAME"] : "") . " " . $contact["LAST_NAME"], "EMAIL" => array("VALUE" => $contact["EMAIL"], "PARAMETERS" => array("TYPE" => "INTERNET")), "REV" => date("Ymd\\THis\\Z", MakeTimeStamp($contact["TIMESTAMP_X"])), "UID" => $contact["ID"]);
     if (intval($contact["PERSONAL_BIRTHDAY"]) > 0) {
         $arVCardContact["BDAY"] = date("Y-m-d", MakeTimeStamp($contact["PERSONAL_BIRTHDAY"]));
     }
     if (strlen($contact["WORK_PHONE"]) > 0) {
         $arVCardContact["TEL"][] = array("VALUE" => $contact["WORK_PHONE"], "PARAMETERS" => array("TYPE" => "WORK"));
     }
     if (strlen($contact["PERSONAL_MOBILE"]) > 0) {
         $arVCardContact["TEL"][] = array("VALUE" => $contact["PERSONAL_MOBILE"], "PARAMETERS" => array("TYPE" => "CELL"));
     }
     if (strlen($contact["PERSONAL_PHONE"]) > 0) {
         $arVCardContact["TEL"][] = array("VALUE" => $contact["PERSONAL_PHONE"], "PARAMETERS" => array("TYPE" => "HOME"));
     }
     if (strlen($contact["WORK_COMPANY"]) > 0) {
         $arVCardContact["ORG"] = $contact["WORK_COMPANY"];
     }
     if (strlen($contact["WORK_POSITION"]) > 0) {
         $arVCardContact["TITLE"] = $contact["WORK_POSITION"];
     }
     if (strlen($contact["WORK_WWW"]) > 0) {
         $arVCardContact["URL"][] = array("VALUE" => $contact["WORK_WWW"], "PARAMETERS" => array("TYPE" => "WORK"));
     }
     if (strlen($contact["PERSONAL_WWW"]) > 0) {
         $arVCardContact["URL"][] = array("VALUE" => $contact["PERSONAL_WWW"], "PARAMETERS" => array("TYPE" => "HOME"));
     }
     if (strlen($contact["PERSONAL_STREET"]) > 0) {
         $arVCardContact["ADR"][] = array("VALUE" => ";;" . $contact["PERSONAL_STREET"] . ";" . $contact["PERSONAL_CITY"] . ";" . $contact["PERSONAL_STATE"] . ";" . $contact["PERSONAL_ZIP"] . ";" . GetCountryByID($contact["PERSONAL_COUNTRY"]) . "", "PARAMETERS" => array("TYPE" => "HOME"));
     }
     if (strlen($contact["WORK_STREET"]) > 0) {
         $arVCardContact["ADR"][] = array("VALUE" => ";;" . $contact["WORK_STREET"] . ";" . $contact["WORK_CITY"] . ";" . $contact["WORK_STATE"] . ";" . $contact["WORK_ZIP"] . ";" . GetCountryByID($contact["WORK_COUNTRY"]) . "", "PARAMETERS" => array("TYPE" => "WORK"));
     }
     if (intval($contact["PERSONAL_PHOTO"]) > 0) {
         $arTempFile = CFile::ResizeImageGet($contact["PERSONAL_PHOTO"], array("width" => \Bitrix\Main\Config\Option::get("dav", "vcard_image_width", 400), "height" => \Bitrix\Main\Config\Option::get("dav", "vcard_image_width", 400)), BX_RESIZE_IMAGE_PROPORTIONAL, false, false, false, \Bitrix\Main\Config\Option::get("dav", "vcard_image_quality", 60));
         if ($arTempFile) {
             $cnt = file_get_contents($_SERVER["DOCUMENT_ROOT"] . $arTempFile['src']);
             if (!empty($cnt)) {
                 $arImageTypes = array(IMAGETYPE_JPEG => 'JPEG', IMAGETYPE_GIF => 'GIF', IMAGETYPE_PNG => 'PNG');
                 $imageType = "JPEG";
                 if ($imageInfo = CFile::GetImageSize($_SERVER["DOCUMENT_ROOT"] . $arTempFile['src']) && isset($arImageTypes[$imageInfo[2]])) {
                     $imageType = $arImageTypes[$imageInfo[2]];
                 }
                 $arVCardContact["PHOTO"] = array("VALUE" => base64_encode($cnt), "PARAMETERS" => array("ENCODING" => "BASE64", "TYPE" => $imageType));
             }
         }
     }
     $cal = new CDavICalendarComponent($arVCardContact);
     return $cal->Render();
 }
Ejemplo n.º 3
0
 private static function ParseVTimezone(CDavICalendarComponent $vtimezone, $year)
 {
     $result['time'] = 0;
     $rruleInterval = 0;
     // 0 undefined, 1 yearly, 12 monthly
     $t = self::ParseUtcOffset($vtimezone->GetPropertyValue('TZOFFSETFROM'));
     if ($t == null) {
         return false;
     }
     $result['from'] = ($t["hours"] * 60 * 60 + $t["minutes"] * 60) * ($t["ahead"] ? 1 : -1);
     $t = self::ParseUtcOffset($vtimezone->GetPropertyValue('TZOFFSETTO'));
     if ($t == null) {
         return false;
     }
     $result['to'] = ($t["hours"] * 60 * 60 + $t["minutes"] * 60) * ($t["ahead"] ? 1 : -1);
     $t = $vtimezone->GetPropertyValue('DTSTART');
     if ($t == null) {
         return false;
     }
     $switchTime = self::ParseDateTime($t);
     if (!is_int($switchTime)) {
         return false;
     }
     $rrules = $vtimezone->GetPropertyValue('RRULE');
     if ($rrules == null) {
         $t = getdate($switchTime);
         $result['time'] = @gmmktime($t['hours'], $t['minutes'], $t['seconds'], $t['mon'], $t['mday'], $t['year']);
         return $result;
     }
     $switchYear = date("Y", $switchTime);
     if ($switchYear > $year) {
         return false;
     }
     $rrules = explode(';', $rrules);
     foreach ($rrules as $rrule) {
         $t = explode('=', $rrule);
         switch ($t[0]) {
             case 'FREQ':
                 switch ($t[1]) {
                     case 'YEARLY':
                         if ($rruleInterval == 12) {
                             return false;
                         }
                         $rruleInterval = 1;
                         break;
                     case 'MONTHLY':
                         if ($rruleInterval == 1) {
                             return false;
                         }
                         $rruleInterval = 12;
                         break;
                     default:
                         return false;
                 }
                 break;
             case 'INTERVAL':
                 if ($rruleInterval && $t[1] != $rruleInterval) {
                     return false;
                 }
                 $rruleInterval = intval($t[1]);
                 if ($rruleInterval != 1 && $rruleInterval != 12) {
                     return false;
                 }
                 break;
             case 'COUNT':
                 if ($switchYear + intval($t[1]) < intval($year)) {
                     return false;
                 }
                 break;
             case 'BYMONTH':
                 $month = intval($t[1]);
                 break;
             case 'BYDAY':
                 $len = strspn($t[1], '1234567890-+');
                 if ($len == 0) {
                     return false;
                 }
                 $weekday = substr($t[1], $len);
                 $weekdays = array('SU' => 0, 'MO' => 1, 'TU' => 2, 'WE' => 3, 'TH' => 4, 'FR' => 5, 'SA' => 6);
                 $weekday = $weekdays[$weekday];
                 $which = intval(substr($t[1], 0, $len));
                 break;
             case 'UNTIL':
                 if (intval($year) > intval(substr($t[1], 0, 4))) {
                     return false;
                 }
                 break;
         }
     }
     if ($rruleInterval == 12) {
         $month = date("n", $switchTime);
     }
     if (empty($month) || !isset($weekday)) {
         return false;
     }
     $switchTime = strftime('%H:%M:%S', $switchTime);
     $switchTime = explode(':', $switchTime);
     $when = gmmktime($switchTime[0], $switchTime[1], $switchTime[2], $month, 1, $year);
     $firstOfMonthWeekday = intval(gmstrftime('%w', $when));
     if ($weekday >= $firstOfMonthWeekday) {
         $weekday -= 7;
     }
     $when -= ($firstOfMonthWeekday - $weekday) * 60 * 60 * 24;
     if ($which < 0) {
         do {
             $when += 60 * 60 * 24 * 7;
         } while (intval(gmstrftime('%m', $when)) == $month);
     }
     $when += $which * 60 * 60 * 24 * 7;
     $result['time'] = $when;
     return $result;
 }