Overview

Namespaces

  • Apptus
    • ESales
      • Connector
        • Report
        • Time
    • Util
      • Cache
  • PHP
  • Overview
  • Namespace
  • Class
  • Tree
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 
<?php
namespace Apptus\ESales\Connector;

/**
 * The content of a panel as retrieved from an eSales servie.
 *
 * This object contains all panel attributes for the panel, as defined in eSales Manager.
 *
 * For zone panels, this object contains all subpanels returned by the eSales service.
 *
 * For function panels, this object contains the {@see Result} of evaluating the function in the eSales service.
 *
 * An object of this class will never make new requests to the eSales service; it just holds the result of a request.
 */
class PanelContent {
    private $path;
    private $ticket;
    private $attributes;
    private $result;
    private $error;
    private $names = array ();
    private $subpanels = array ();

    /**
     * @internal
     * @param $path
     * @param null $ticket
     * @param array $attributes
     * @param null $result
     * @param null $error
     */
    public function __construct($path, $ticket = null, $attributes = array (), $result = null, $error = null) {
        $this->path = (string) $path;
        $this->ticket = $ticket;
        $this->attributes = $attributes;
        $this->result = $result;
        $this->error = $error;
    }

    /**
     * @internal
     * @param PanelContent
     * @param string
     */
    function addSubpanel(PanelContent $content, $name) {
        $this->names[$name] = count($this->subpanels);
        $this->subpanels[] = $content;
    }

    /**
     * Returns an array with panel attributes and their values.
     *
     * @return array
     *            An associative array from attribute name to attribute value.
     */
    public function attributes() {
        return $this->attributes;
    }

    /**
     * Return the value of a single attribute.
     *
     * @param string
     *            Name of the attribute to return.
     * @param mixed
     *            What to return if the attribute does not exist. Defaults to null.
     * @return string|mixed
     *            The attribute named $name, or $default if it does not exist.
     */
    public function getAttribute($name, $default = null) {
        if (isset($this->attributes[$name])) {
            return $this->attributes[$name];
        }
        return $default;
    }

    /**
     * Returns true if this panel content contains a function result.
     *
     * @return boolean
     *            True if there is a result, false otherwise.
     */
    public function hasResult() {
        return $this->result !== null || $this->error !== null;
    }

    /**
     * Returns the result of this panel.
     *
     * If this panel is not a function panel it returns null.
     *
     * @return Result
     *            The result of a function panel.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function result() {
        if ($this->error !== null) {
            throw new PanelException($this->error);
        }
        return $this->result;
    }

    /**
     * Returns true if this panel is a container, that is, it contains subpanels.
     *
     * @return boolean
     *            True if the panel contains subpanels, false otherwise.
     */
    public function isZone() {
        return count($this->subpanels) > 0;
    }

    /**
     * Returns true if this zone contains a subpanel with the specified relative path.
     *
     * @param string
     *            The simple name of the subpanel
     * @return boolean
     *            True if this panel contains the subpanel, false otherwise.
     */
    public function hasSubpanel($relativePath) {
        $path = (string) $relativePath;
        if (Path::hasParent($path)) {
            $parentPath = $this->subpanel(Path::parentPath($path));
            return $parentPath === null ? false : $parentPath->hasSubpanel(Path::simpleName($path));
        } else {
            return isset($this->names[$path]);
        }
    }

    /**
     * Returns a subpanel given its relative path. If the panel is not contained by this zone, then null is returned.
     *
     * @param string
     *            The relative path of the subpanel.
     * @return PanelContent
     *            A PanelContent object.
     */
    public function subpanel($relativePath) {
        $path = (string) $relativePath;
        if (Path::hasParent($path)) {
            $parentPath = $this->subpanel(Path::parentPath($path));
            return $parentPath === null ? null : $parentPath->subpanel(Path::simpleName($path));
        } else {
            return isset($this->names[$path]) ? $this->subpanels[$this->names[$path]] : null;
        }
    }

    /**
     * Returns a list of all sub panels in this panel.
     *
     * @return array
     *            A list of all sub panels in this panel.
     */

    public function subpanels() {
        return $this->subpanels;
    }

    /**
     * Returns the complete path of this panel.
     *
     * @return string
     *            The complete path of this panel.
     */
    public function path() {
        return $this->path;
    }

    public function __toString() {
        if ($this->result === null) {
            if ($this->error === null) {
                asort($this->names);
                return 'Subpanels: ' . ((string) array_keys($this->names)) . ' = ' . ((string) $this->subpanels);
            }
            return 'Error: ' . $this->error;
        }
        return 'Result: ' . (string) $this->result;
    }

    /**
     * Returns the ticket of the panel.
     *
     * @return string
     *            The ticket of the panel.
     */
    public function ticket() {
        return $this->ticket;
    }

    /**
     * Fetches the result as a CategoryNode object, representing the root of a (possibly partial) category tree.
     * The tree can be traversed using for example {@see CategoryNode::getSubcategories()}, or utility methods such as
     * {@see CategoryNode::getSelectedSubcategory()} and {@see CategoryNode::findDescendant()}.
     *
     * @return CategoryNode
     *             The root node of a category tree as a CategoryNode object
     * @throws ResultTypeException
     *             If the result is not of category_tree format
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service
     */
    public function resultAsCategoryTree() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::CATEGORY_TREE) {
            return $result;
        } else {
            throw new ResultTypeException('category_tree');
        }
    }

    /**
     * Fetches the result as an array of CategoryData objects. These objects do not have links to any
     * subcategories or parent.
     *
     * @return array The result as an array of CategoryData objects
     * @throws ResultTypeException
     *             if the result is not of the category list type
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsCategoryList() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::CATEGORY_LIST) {
            /** @var CategoryList $result*/
            return $result->getCategories();
        } else {
            throw new ResultTypeException('category_list');
        }
    }

    /**
     * Fetches the result as Corrections.
     *
     * @return Corrections
     *             The result as Corrections.
     * @throws ResultTypeException
     *             If the result is not of type Corrections.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsCorrections() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::CORRECTIONS) {
            return $result;
        } else {
            throw new ResultTypeException('corrections');
        }
    }

    /**
     * Fetches the result as Completions
     *
     * @return Completions
     *            The result as Completions
     * @throws ResultTypeException
     *            If the result is not of type Completions.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsCompletions() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::COMPLETIONS) {
            return $result;
        } else {
            throw new ResultTypeException('completions');
        }
    }

    /**
     * Fetches the result as Count.
     *
     * @return Count
     *            The result as Count.
     * @throws ResultTypeException
     *            If the result is not of type Count.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsCount() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::COUNT) {
            return $result;
        } else {
            throw new ResultTypeException('count');
        }
    }

    /**
     * Fetches the result as Products.
     *
     * @return Products
     *            The result as Products.
     * @throws ResultTypeException
     *            If the result is not of type Products.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsProducts() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::PRODUCTS) {
            return $result;
        } else {
            throw new ResultTypeException('products');
        }
    }

    /**
     * Fetches the result as Values.
     *
     * @return Values
     *            The result as Values.
     * @throws ResultTypeException
     *            If the result is not of type Values.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsValues() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::VALUES) {
            return $result;
        } else {
            throw new ResultTypeException('values');
        }
    }

    /**
     * Fetches the result as Phrases.
     *
     * @return Phrases
     *            The result as Phrases.
     * @throws ResultTypeException
     *            If the result is not of type Phrases.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsPhrases() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::PHRASES) {
            return $result;
        } else {
            throw new ResultTypeException('phrases');
        }
    }

    /**
     * Fetches the result as Ads.
     *
     * @return Ads
     *            The result as Ads.
     * @throws ResultTypeException
     *            If the result is not of type Ads.
     * @throws PanelException
     *            If there was an error evaluating the function in the eSales service.
     */
    public function resultAsAds() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::ADS) {
            return $result;
        } else {
            throw new ResultTypeException('ads');
        }
    }

    /**
     * Fetches the result as FacetRange
     *
     * @return FacetRange result as FacetRange
     * @throws ResultTypeException
     *             if the result is not of type FacetRange
     * @throws PanelException
     *             if there was an error evaluating the function in the eSales service
     */
    public function resultAsFacetRange()
    {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::FACET_RANGE) {
            return $result;
        } else {
            throw new ResultTypeException('facet_range');
        }
    }

    /**
     * Fetches the result as FacetList
     *
     * @return FacetRange result as FacetList
     * @throws ResultTypeException
     *             if the result is not of type FacetList
     * @throws PanelException
     *             if there was an error evaluating the function in the eSales service
     */
    public function resultAsFacetList() {
        $result = $this->result();
        if ($result !== null && $result->getType() === ResultType::FACET_LIST) {
            return $result;
        }else {
            throw new ResultTypeException('facet_list');
        }
    }
}
Apptus ESales Connector PHP API documentation generated by ApiGen