/**
  * Creates CFPropertyList object, filled with provided array
  * @param array $array
  * @return static
  */
 public function createPlistFromArray(array $array)
 {
     $typeDetector = new CFTypeDetector();
     $guessedStructure = $typeDetector->toCFType($array);
     $this->plist->add($guessedStructure);
     return $this;
 }
Example #2
0
 /**
  * Encode the given data in plist format
  *
  * @param array   $data
  *            resulting data that needs to
  *            be encoded in plist format
  * @param boolean $humanReadable
  *            set to true when restler
  *            is not running in production mode. Formatter has to
  *            make the encoded output more human readable
  *
  * @return string encoded string
  */
 public function encode($data, $humanReadable = false)
 {
     //require_once 'CFPropertyList.php';
     if (!isset(self::$compact)) {
         self::$compact = !$humanReadable;
     }
     /**
      *
      * @var CFPropertyList
      */
     $plist = new CFPropertyList();
     $td = new CFTypeDetector();
     $guessedStructure = $td->toCFType(Object::toArray($data));
     $plist->add($guessedStructure);
     return self::$compact ? $plist->toBinary() : $plist->toXML(true);
 }
 /**
  * Convert a DOMNode into a CFType.
  * @param DOMNode $node Node to import children of
  * @param CFDictionary|CFArray|CFPropertyList $parent
  * @return void
  */
 protected function import(DOMNode $node, $parent)
 {
     // abort if there are no children
     if (!$node->childNodes->length) {
         return;
     }
     foreach ($node->childNodes as $n) {
         // skip if we can't handle the element
         if (!isset(self::$types[$n->nodeName])) {
             continue;
         }
         $class = 'CFPropertyList\\' . self::$types[$n->nodeName];
         $key = null;
         // find previous <key> if possible
         $ps = $n->previousSibling;
         while ($ps && $ps->nodeName == '#text' && $ps->previousSibling) {
             $ps = $ps->previousSibling;
         }
         // read <key> if possible
         if ($ps && $ps->nodeName == 'key') {
             $key = $ps->firstChild->nodeValue;
         }
         switch ($n->nodeName) {
             case 'date':
                 $value = new $class(CFDate::dateValue($n->nodeValue));
                 break;
             case 'data':
                 $value = new $class($n->nodeValue, true);
                 break;
             case 'string':
                 $value = new $class($n->nodeValue);
                 break;
             case 'real':
             case 'integer':
                 $value = new $class($n->nodeName == 'real' ? floatval($n->nodeValue) : intval($n->nodeValue));
                 break;
             case 'true':
             case 'false':
                 $value = new $class($n->nodeName == 'true');
                 break;
             case 'array':
             case 'dict':
                 $value = new $class();
                 $this->import($n, $value);
                 if ($value instanceof CFDictionary) {
                     $hsh = $value->getValue();
                     if (isset($hsh['CF$UID']) && count($hsh) == 1) {
                         $value = new CFUid($hsh['CF$UID']->getValue());
                     }
                 }
                 break;
         }
         // Dictionaries need a key
         if ($parent instanceof CFDictionary) {
             $parent->add($key, $value);
         } else {
             $parent->add($value);
         }
     }
 }
 */
namespace CFPropertyList;

use DateTime, DateTimeZone;
// just in case...
error_reporting(E_ALL);
ini_set('display_errors', 'on');
/**
 * Require CFPropertyList
 */
require_once __DIR__ . '/../classes/CFPropertyList/CFPropertyList.php';
/*
 * create a new CFPropertyList instance without loading any content
 */
$plist = new CFPropertyList();
/*
 * import the array structure to create the sample.xml.plist
 * We make use of CFTypeDetector, which truly is not almighty!
 */
$structure = array('Year Of Birth' => 1965, 'Date Of Graduation' => gmmktime(19, 23, 43, 06, 22, 2004), 'Date Of Birth' => new DateTime('1984-09-07 08:15:23', new DateTimeZone('Europe/Berlin')), 'Pets Names' => array(), 'Picture' => 'PEKBpYGlmYFCPA==', 'City Of Birth' => 'Springfield', 'Name' => 'John Doe', 'Kids Names' => array('John', 'Kyra'));
$td = new CFTypeDetector();
$guessedStructure = $td->toCFType($structure);
$plist->add($guessedStructure);
/*
 * Save PList as XML
 */
$plist->saveXML(__DIR__ . '/example-create-02.xml.plist');
/*
 * Save PList as Binary
 */
$plist->saveBinary(__DIR__ . '/example-create-02.binary.plist');