Location: PHPKode > scripts > XIRE > lib/plugins/If.class.php
<?php
/* --------------------------------------------------------------------------
 * XIRE - eXtendable Information Rendering Engine
 * --------------------------------------------------------------------------
 * LICENSE
 * Copyright (C) 2006  David Duong
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * -------------------------------------------------------------------------- */
/**
 * Provides branching functionality
 */
class XIRE_Plugin_If extends XIRE_Plugin {
    private $branched;
    // Only allow DOMElement
    // @todo support DOMAttr
    public function __construct (DOMElement $node, XIRE_Process $sender) {
        parent::__construct($node, $sender);
        $this->branched = false;
    }

    public function execute () {
        $current = $this->node;
        // Seek other else-if or else elements for a suitable branch
        do {
            $next = $current->nextSibling;
            if (!$this->branched) {
                if ($current->localName === 'else') {
                    $this->branch($current);
                } elseif ($current->childNodes->length > 0) {
                    // @TODO improve this
                    $this->getVariable_cascade($current->getAttribute('variable')) and $this->branch($current);
                }
            }
            $current->parentNode->removeChild($current);    // Remove the current node
            $current = $next;
        } while($current instanceof DOMNode
          && $current->namespaceURI === XIRL_NAMESPACE
          && ($current->localName === 'else-if'
          || $current->localName === 'else'));
    }

    public function branch (DOMNode $branch) {
        // Proccess the child nodes
        $process = $this->template->createProcess();
        foreach ($branch->childNodes as $node) {
            $process->enqueue($node);
        }
        // Process the nodes
        $process->process();
        while ($branch->hasChildNodes()) {
            $branch->parentNode->insertBefore($branch->firstChild, $branch);
        }
        $this->branched = true;
    }
}

?>
Return current item: XIRE