Example #1
0
 /**
  * Indicates if an Outlook via ActiveSync is connected.
  *
  * @access public
  * @return boolean
  */
 public function IsKoe()
 {
     if (Request::IsOutlook() && ($this->device->GetKoeVersion() !== false || Request::HasKoeStats())) {
         return true;
     }
     return false;
 }
Example #2
0
 /**
  * Imports a single message
  *
  * @param string        $id
  * @param SyncObject    $message
  *
  * @access public
  * @return boolean
  */
 public function ImportMessageChange($id, $message)
 {
     // ignore other SyncObjects
     if (!$message instanceof $this->classAsString) {
         return false;
     }
     // KOE ZO-42: to sync Notes to Outlook we sync them as Appointments
     if ($this->classAsString == "SyncNote") {
         if (KOE_CAPABILITY_NOTES && ZPush::GetDeviceManager()->IsKoe()) {
             // update category from SyncNote->Color
             $message->SetCategoryFromColor();
             $appointment = new SyncAppointment();
             $appointment->busystatus = 0;
             $appointment->sensitivity = 0;
             $appointment->alldayevent = 0;
             $appointment->reminder = 0;
             $appointment->meetingstatus = 0;
             $appointment->responserequested = 0;
             $appointment->flags = $message->flags;
             if (isset($message->asbody)) {
                 $appointment->asbody = $message->asbody;
             }
             if (isset($message->categories)) {
                 $appointment->categories = $message->categories;
             }
             if (isset($message->subject)) {
                 $appointment->subject = $message->subject;
             }
             if (isset($message->lastmodified)) {
                 $appointment->dtstamp = $message->lastmodified;
             }
             $appointment->starttime = time();
             $appointment->endtime = $appointment->starttime + 1;
             $message = $appointment;
         } else {
             if (Request::IsOutlook()) {
                 ZLog::Write(LOGLEVEL_WARN, "MS Outlook is synchronizing Notes folder without active KOE settings or extension. Not streaming SyncNote change!");
                 return false;
             }
         }
     }
     // prevent sending the same object twice in one request
     if (in_array($id, $this->seenObjects)) {
         ZLog::Write(LOGLEVEL_DEBUG, sprintf("Object '%s' discarded! Object already sent in this request.", $id));
         return true;
     }
     $this->importedMsgs++;
     $this->seenObjects[] = $id;
     // checks if the next message may cause a loop or is broken
     if (ZPush::GetDeviceManager()->DoNotStreamMessage($id, $message)) {
         ZLog::Write(LOGLEVEL_DEBUG, sprintf("ImportChangesStream->ImportMessageChange('%s'): message ignored and requested to be removed from mobile", $id));
         // this is an internal operation & should not trigger an update in the device manager
         $this->checkForIgnoredMessages = false;
         $stat = $this->ImportMessageDeletion($id);
         $this->checkForIgnoredMessages = true;
         return $stat;
     }
     // KOE ZO-3: Stream reply/forward flag and time as additional category to KOE
     if (ZPush::GetDeviceManager()->IsKoe() && KOE_CAPABILITY_RECEIVEFLAGS && isset($message->lastverbexectime) && isset($message->lastverbexecuted) && $message->lastverbexecuted > 0) {
         ZLog::Write(LOGLEVEL_DEBUG, "ImportChangesStream->ImportMessageChange('%s'): KOE detected. Adding LastVerb information as category.");
         if (!isset($message->categories)) {
             $message->categories = array();
         }
         $s = "Push: Email ";
         if ($message->lastverbexecuted == 1) {
             $s .= "replied";
         } elseif ($message->lastverbexecuted == 2) {
             $s .= "replied-to-all";
         } elseif ($message->lastverbexecuted == 3) {
             $s .= "forwarded";
         }
         $s .= " on " . gmdate("d-m-Y H:i:s", $message->lastverbexectime) . " GMT";
         $message->categories[] = $s;
     }
     if ($message->flags === false || $message->flags === SYNC_NEWMESSAGE) {
         $this->encoder->startTag(SYNC_ADD);
     } else {
         // on update of an SyncEmail we only export the flags and categories
         if ($message instanceof SyncMail && (isset($message->flag) && $message->flag instanceof SyncMailFlags || isset($message->categories))) {
             $newmessage = new SyncMail();
             $newmessage->read = $message->read;
             if (isset($message->flag)) {
                 $newmessage->flag = $message->flag;
             }
             if (isset($message->lastverbexectime)) {
                 $newmessage->lastverbexectime = $message->lastverbexectime;
             }
             if (isset($message->lastverbexecuted)) {
                 $newmessage->lastverbexecuted = $message->lastverbexecuted;
             }
             if (isset($message->categories)) {
                 $newmessage->categories = $message->categories;
             }
             $message = $newmessage;
             unset($newmessage);
             ZLog::Write(LOGLEVEL_DEBUG, sprintf("ImportChangesStream->ImportMessageChange('%s'): SyncMail message updated. Message content is striped, only flags/categories are streamed.", $id));
         }
         $this->encoder->startTag(SYNC_MODIFY);
     }
     // TAG: SYNC_ADD / SYNC_MODIFY
     $this->encoder->startTag(SYNC_SERVERENTRYID);
     $this->encoder->content($id);
     $this->encoder->endTag();
     $this->encoder->startTag(SYNC_DATA);
     $message->Encode($this->encoder);
     $this->encoder->endTag();
     $this->encoder->endTag();
     return true;
 }
Example #3
0
 /**
  * Checks if the user is not disabled for Z-Push.
  *
  * @access private
  * @throws FatalException if user is disabled for Z-Push
  *
  * @return boolean
  */
 private function isZPushEnabled()
 {
     $addressbook = $this->getAddressbook();
     $userEntryid = mapi_getprops($this->store, array(PR_MAILBOX_OWNER_ENTRYID));
     $mailuser = mapi_ab_openentry($addressbook, $userEntryid[PR_MAILBOX_OWNER_ENTRYID]);
     $enabledFeatures = mapi_getprops($mailuser, array(PR_EC_DISABLED_FEATURES));
     if (isset($enabledFeatures[PR_EC_DISABLED_FEATURES]) && is_array($enabledFeatures[PR_EC_DISABLED_FEATURES])) {
         $mobileDisabled = in_array(self::MOBILE_ENABLED, $enabledFeatures[PR_EC_DISABLED_FEATURES]);
         $outlookDisabled = in_array(self::OUTLOOK_ENABLED, $enabledFeatures[PR_EC_DISABLED_FEATURES]);
         if ($mobileDisabled && $outlookDisabled) {
             throw new FatalException("User is disabled for Z-Push.");
         } elseif (Request::IsOutlook() && $outlookDisabled) {
             throw new FatalException("User is disabled for Outlook usage with Z-Push.");
         } elseif (!Request::IsOutlook() && $mobileDisabled) {
             throw new FatalException("User is disabled for mobile device usage with Z-Push.");
         }
     }
     return true;
 }