1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/z-push_ynh.git synced 2024-09-03 18:05:58 +02:00
z-push_ynh/sources/lib/request/settings.php
2014-12-17 15:40:48 +00:00

232 lines
No EOL
9.9 KiB
PHP

<?php
/***********************************************
* File : settings.php
* Project : Z-Push
* Descr : Provides the SETTINGS command
*
* Created : 16.02.2012
*
* Copyright 2007 - 2013 Zarafa Deutschland GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation with the following additional
* term according to sec. 7:
*
* According to sec. 7 of the GNU Affero General Public License, version 3,
* the terms of the AGPL are supplemented with the following terms:
*
* "Zarafa" is a registered trademark of Zarafa B.V.
* "Z-Push" is a registered trademark of Zarafa Deutschland GmbH
* The licensing of the Program under the AGPL does not imply a trademark license.
* Therefore any rights, title and interest in our trademarks remain entirely with us.
*
* However, if you propagate an unmodified version of the Program you are
* allowed to use the term "Z-Push" to indicate that you distribute the Program.
* Furthermore you may use our trademarks where it is necessary to indicate
* the intended purpose of a product or service provided you use it in accordance
* with honest practices in industrial or commercial matters.
* If you want to propagate modified versions of the Program under the name "Z-Push",
* you may only do so if you have a written permission by Zarafa Deutschland GmbH
* (to acquire a permission please contact Zarafa at trademark@zarafa.com).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Consult LICENSE file for details
************************************************/
class Settings extends RequestProcessor {
/**
* Handles the Settings command
*
* @param int $commandCode
*
* @access public
* @return boolean
*/
public function Handle($commandCode) {
if (!self::$decoder->getElementStartTag(SYNC_SETTINGS_SETTINGS))
return false;
//save the request parameters
$request = array();
// Loop through properties. Possible are:
// - Out of office
// - DevicePassword
// - DeviceInformation
// - UserInformation
// Each of them should only be once per request. Each property must be processed in order.
while (1) {
$propertyName = "";
if (self::$decoder->getElementStartTag(SYNC_SETTINGS_OOF)) {
$propertyName = SYNC_SETTINGS_OOF;
}
if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEPW)) {
$propertyName = SYNC_SETTINGS_DEVICEPW;
}
if (self::$decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) {
$propertyName = SYNC_SETTINGS_DEVICEINFORMATION;
}
if (self::$decoder->getElementStartTag(SYNC_SETTINGS_USERINFORMATION)) {
$propertyName = SYNC_SETTINGS_USERINFORMATION;
}
//TODO - check if it is necessary
//no property name available - break
if (!$propertyName)
break;
//the property name is followed by either get or set
if (self::$decoder->getElementStartTag(SYNC_SETTINGS_GET)) {
//get is only available for OOF and user information
switch ($propertyName) {
case SYNC_SETTINGS_OOF:
$oofGet = new SyncOOF();
$oofGet->Decode(self::$decoder);
if(!self::$decoder->getElementEndTag())
return false; // SYNC_SETTINGS_GET
break;
case SYNC_SETTINGS_USERINFORMATION:
$userInformation = new SyncUserInformation();
break;
default:
//TODO: a special status code needed?
ZLog::Write(LOGLEVEL_WARN, sprintf ("This property ('%s') is not allowed to use get in request", $propertyName));
}
}
elseif (self::$decoder->getElementStartTag(SYNC_SETTINGS_SET)) {
//set is available for OOF, device password and device information
switch ($propertyName) {
case SYNC_SETTINGS_OOF:
$oofSet = new SyncOOF();
$oofSet->Decode(self::$decoder);
//TODO check - do it after while(1) finished?
break;
case SYNC_SETTINGS_DEVICEPW:
//TODO device password
$devicepassword = new SyncDevicePassword();
$devicepassword->Decode(self::$decoder);
break;
case SYNC_SETTINGS_DEVICEINFORMATION:
$deviceinformation = new SyncDeviceInformation();
$deviceinformation->Decode(self::$decoder);
$deviceinformation->Status = SYNC_SETTINGSSTATUS_SUCCESS;
self::$deviceManager->SaveDeviceInformation($deviceinformation);
break;
default:
//TODO: a special status code needed?
ZLog::Write(LOGLEVEL_WARN, sprintf ("This property ('%s') is not allowed to use set in request", $propertyName));
}
if(!self::$decoder->getElementEndTag())
return false; // SYNC_SETTINGS_SET
}
else {
ZLog::Write(LOGLEVEL_WARN, sprintf("Neither get nor set found for property '%s'", $propertyName));
return false;
}
if(!self::$decoder->getElementEndTag())
return false; // SYNC_SETTINGS_OOF or SYNC_SETTINGS_DEVICEPW or SYNC_SETTINGS_DEVICEINFORMATION or SYNC_SETTINGS_USERINFORMATION
//break if it reached the endtag
$e = self::$decoder->peek();
if($e[EN_TYPE] == EN_TYPE_ENDTAG) {
self::$decoder->getElementEndTag(); //SYNC_SETTINGS_SETTINGS
break;
}
}
$status = SYNC_SETTINGSSTATUS_SUCCESS;
//TODO put it in try catch block
//TODO implement Settings in the backend
//TODO save device information in device manager
//TODO status handling
// $data = self::$backend->Settings($request);
self::$encoder->startWBXML();
self::$encoder->startTag(SYNC_SETTINGS_SETTINGS);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
//get oof settings
if (isset($oofGet)) {
$oofGet = self::$backend->Settings($oofGet);
self::$encoder->startTag(SYNC_SETTINGS_OOF);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($oofGet->Status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
self::$encoder->startTag(SYNC_SETTINGS_GET);
$oofGet->Encode(self::$encoder);
self::$encoder->endTag(); //SYNC_SETTINGS_GET
self::$encoder->endTag(); //SYNC_SETTINGS_OOF
}
//get user information
//TODO none email address found
if (isset($userInformation)) {
self::$backend->Settings($userInformation);
self::$encoder->startTag(SYNC_SETTINGS_USERINFORMATION);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($userInformation->Status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
self::$encoder->startTag(SYNC_SETTINGS_GET);
$userInformation->Encode(self::$encoder);
self::$encoder->endTag(); //SYNC_SETTINGS_GET
self::$encoder->endTag(); //SYNC_SETTINGS_USERINFORMATION
}
//set out of office
if (isset($oofSet)) {
$oofSet = self::$backend->Settings($oofSet);
self::$encoder->startTag(SYNC_SETTINGS_OOF);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($oofSet->Status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
self::$encoder->endTag(); //SYNC_SETTINGS_OOF
}
//set device passwort
if (isset($devicepassword)) {
self::$encoder->startTag(SYNC_SETTINGS_DEVICEPW);
self::$encoder->startTag(SYNC_SETTINGS_SET);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($devicepassword->Status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
self::$encoder->endTag(); //SYNC_SETTINGS_SET
self::$encoder->endTag(); //SYNC_SETTINGS_DEVICEPW
}
//set device information
if (isset($deviceinformation)) {
self::$encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION);
self::$encoder->startTag(SYNC_SETTINGS_STATUS);
self::$encoder->content($deviceinformation->Status);
self::$encoder->endTag(); //SYNC_SETTINGS_STATUS
self::$encoder->endTag(); //SYNC_SETTINGS_DEVICEINFORMATION
}
self::$encoder->endTag(); //SYNC_SETTINGS_SETTINGS
return true;
}
}
?>