Overview

Packages

  • None
  • SyncMl

Classes

  • Horde_SyncMl
  • Horde_SyncMl_Backend
  • Horde_SyncMl_Backend_Horde
  • Horde_SyncMl_Command
  • Horde_SyncMl_Command_Alert
  • Horde_SyncMl_Command_Final
  • Horde_SyncMl_Command_Get
  • Horde_SyncMl_Command_Map
  • Horde_SyncMl_Command_Put
  • Horde_SyncMl_Command_Replace
  • Horde_SyncMl_Command_Results
  • Horde_SyncMl_Command_Status
  • Horde_SyncMl_Command_Sync
  • Horde_SyncMl_Command_SyncHdr
  • Horde_SyncMl_ContentHandler
  • Horde_SyncMl_DataStore
  • Horde_SyncMl_Device
  • Horde_SyncMl_Device_Nokia
  • Horde_SyncMl_Device_P800
  • Horde_SyncMl_Device_sync4j
  • Horde_SyncMl_Device_Sync4JMozilla
  • Horde_SyncMl_Device_Synthesis
  • Horde_SyncMl_DeviceInfo
  • Horde_SyncMl_Property
  • Horde_SyncMl_PropertyParameter
  • Horde_SyncMl_State
  • Horde_SyncMl_Sync
  • Horde_SyncMl_SyncElement
  • Horde_SyncMl_Translation
  • Horde_SyncMl_XmlOutput
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * The Horde_SyncMl_Command class provides a base class for handling all
  4:  * <SyncBody> commands.
  5:  *
  6:  * A SyncML command is a protocol primitive. Each SyncML command specifies to a
  7:  * recipient an individual operation that is to be performed.
  8:  *
  9:  * The Horde_SyncMl_Command objects are hooked into the XML parser of the
 10:  * Horde_SyncMl_ContentHandler class and are reponsible for parsing a single
 11:  * command inside the SyncBody section of a SyncML message. All actions that
 12:  * must be executed for a single SyncML command are handled by these objects,
 13:  * by means of the handleCommand() method.
 14:  *
 15:  * Copyright 2003-2012 Horde LLC (http://www.horde.org/)
 16:  *
 17:  * See the enclosed file COPYING for license information (LGPL). If you
 18:  * did not receive this file, see http://www.horde.org/licenses/lgpl21.
 19:  *
 20:  * @author  Anthony Mills <amills@pyramid6.com>
 21:  * @author  Jan Schneider <jan@horde.org>
 22:  * @package SyncMl
 23:  */
 24: class Horde_SyncMl_Command
 25: {
 26:     /**
 27:      * Name of the command, like 'Put'.
 28:      *
 29:      * Must be overwritten by a sub class.
 30:      *
 31:      * @var string
 32:      */
 33:     protected $_cmdName;
 34: 
 35:     /**
 36:      * The command ID (<CmdID>).
 37:      *
 38:      * @var integer
 39:      */
 40:     protected $_cmdID;
 41: 
 42:     /**
 43:      * Stack for holding the XML elements during creation of the object from
 44:      * the XML event flow.
 45:      *
 46:      * @var array
 47:      */
 48:     protected $_stack = array();
 49: 
 50:     /**
 51:      * Buffer for the parsed character data.
 52:      *
 53:      * @var string
 54:      */
 55:     protected $_chars = '';
 56: 
 57:     /**
 58:      * A Horde_SyncMl_XmlOutput instance responsible for generating the output.
 59:      *
 60:      * @var Horde_SyncMl_XmlOutput
 61:      */
 62:     protected $_outputHandler;
 63: 
 64:     /**
 65:      * Constructor.
 66:      *
 67:      * @param Horde_SyncMl_XmlOutput $outputHandler  A Horde_SyncMl_XmlOutput object.
 68:      */
 69:     public function __construct(&$outputHandler)
 70:     {
 71:         $this->_outputHandler = &$outputHandler;
 72:     }
 73: 
 74:     /**
 75:      * Start element handler for the XML parser, delegated from
 76:      * Horde_SyncMl_ContentHandler::startElement().
 77:      *
 78:      * @param string $uri      The namespace URI of the element.
 79:      * @param string $element  The element tag name.
 80:      * @param array $attrs     A hash with the element's attributes.
 81:      */
 82:     public function startElement($uri, $element, $attrs)
 83:     {
 84:         $this->_stack[] = $element;
 85:     }
 86: 
 87:     /**
 88:      * End element handler for the XML parser, delegated from
 89:      * Horde_SyncMl_ContentHandler::endElement().
 90:      *
 91:      * @param string $uri      The namespace URI of the element.
 92:      * @param string $element  The element tag name.
 93:      */
 94:     public function endElement($uri, $element)
 95:     {
 96:         if (count($this->_stack) == 2 &&
 97:             $element == 'CmdID') {
 98:             $this->_cmdID = intval(trim($this->_chars));
 99:         }
100: 
101:         if (strlen($this->_chars)) {
102:             $this->_chars = '';
103:         }
104: 
105:         array_pop($this->_stack);
106:     }
107: 
108:     /**
109:      * Character data handler for the XML parser, delegated from
110:      * Horde_SyncMl_ContentHandler::characters().
111:      *
112:      * @param string $str  The data string.
113:      */
114:     public function characters($str)
115:     {
116:         $this->_chars .= $str;
117:     }
118: 
119:     /**
120:      * Returns the command name this instance is reponsible for.
121:      *
122:      * @return string  The command name this object is handling.
123:      */
124:     public function getCommandName()
125:     {
126:         return $this->_cmdName;
127:     }
128: 
129:     /**
130:      * This method is supposed to implement the actual business logic of the
131:      * command once the XML parsing is complete.
132:      *
133:      * @abstract
134:      */
135:     public function handleCommand($debug = false)
136:     {
137:     }
138: 
139:     /**
140:      * Attempts to return a concrete Horde_SyncMl_Command instance based on
141:      * $command.
142:      *
143:      * @param string $command                  The type of the concrete
144:      *                                         Horde_SyncMl_Comment subclass to
145:      *                                         return.
146:      * @param Horde_SyncMl_XmlOutput $outputHandler  A Horde_SyncMl_XmlOutput object.
147:      *
148:      * @return Horde_SyncMl_Command  The newly created concrete Horde_SyncMl_Command
149:      *                         instance, or false on error.
150:      */
151:     public function &factory($command, &$outputHandler)
152:     {
153:         $command = basename($command);
154:         $class = 'Horde_SyncMl_Command_' . $command;
155:         if (class_exists($class)) {
156:             $cmd = new $class($outputHandler);
157:         } else {
158:             $msg = 'Class definition of ' . $class . ' not found.';
159:             $GLOBALS['backend']->logMessage($msg, __FILE__, __LINE__, 'ERR');
160:             $cmd = PEAR::raiseError($msg);
161:         }
162: 
163:         return $cmd;
164:     }
165: }
166: 
API documentation generated by ApiGen