Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 13
CRAP
0.00% covered (danger)
0.00%
0 / 70
PPTemplateFrame_Hash
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 13
812
0.00% covered (danger)
0.00%
0 / 70
 __construct
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 14
 __toString
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 11
 cachedExpand
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 6
 isEmpty
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 1
 getArguments
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 6
 getNumberedArguments
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 getNamedArguments
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 getNumberedArgument
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 7
 getNamedArgument
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 6
 getArgument
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
 isTemplate
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 setVolatile
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 setTTL
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
<?php
/**
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 * http://www.gnu.org/copyleft/gpl.html
 *
 * @file
 * @ingroup Parser
 */
/**
 * Expansion frame with template arguments
 * @ingroup Parser
 */
// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPTemplateFrame_Hash extends PPFrame_Hash {
    public $numberedArgs, $namedArgs, $parent;
    public $numberedExpansionCache, $namedExpansionCache;
    /**
     * @param Preprocessor $preprocessor
     * @param bool|PPFrame $parent
     * @param array $numberedArgs
     * @param array $namedArgs
     * @param bool|Title $title
     */
    public function __construct( $preprocessor, $parent = false, $numberedArgs = [],
        $namedArgs = [], $title = false
    ) {
        parent::__construct( $preprocessor );
        /** @var PPFrame_Hash parent */
        '@phan-var PPFrame_Hash $parent';
        $this->parent = $parent;
        $this->numberedArgs = $numberedArgs;
        $this->namedArgs = $namedArgs;
        $this->title = $title;
        $pdbk = $title ? $title->getPrefixedDBkey() : false;
        $this->titleCache = $parent->titleCache;
        $this->titleCache[] = $pdbk;
        $this->loopCheckHash = /*clone*/ $parent->loopCheckHash;
        if ( $pdbk !== false ) {
            $this->loopCheckHash[$pdbk] = true;
        }
        $this->depth = $parent->depth + 1;
        $this->numberedExpansionCache = $this->namedExpansionCache = [];
    }
    public function __toString() {
        $s = 'tplframe{';
        $first = true;
        $args = $this->numberedArgs + $this->namedArgs;
        foreach ( $args as $name => $value ) {
            if ( $first ) {
                $first = false;
            } else {
                $s .= ', ';
            }
            $s .= "\"$name\":\"" .
                str_replace( '"', '\\"', $value->__toString() ) . '"';
        }
        $s .= '}';
        return $s;
    }
    /**
     * @throws MWException
     * @param string|int $key
     * @param string|PPNode $root
     * @param int $flags
     * @return string
     */
    public function cachedExpand( $key, $root, $flags = 0 ) {
        if ( isset( $this->parent->childExpansionCache[$key] ) ) {
            return $this->parent->childExpansionCache[$key];
        }
        $retval = $this->expand( $root, $flags );
        if ( !$this->isVolatile() ) {
            $this->parent->childExpansionCache[$key] = $retval;
        }
        return $retval;
    }
    /**
     * Returns true if there are no arguments in this frame
     *
     * @return bool
     */
    public function isEmpty() {
        return !count( $this->numberedArgs ) && !count( $this->namedArgs );
    }
    /**
     * @return array
     */
    public function getArguments() {
        $arguments = [];
        foreach ( array_merge(
                array_keys( $this->numberedArgs ),
                array_keys( $this->namedArgs ) ) as $key ) {
            $arguments[$key] = $this->getArgument( $key );
        }
        return $arguments;
    }
    /**
     * @return array
     */
    public function getNumberedArguments() {
        $arguments = [];
        foreach ( array_keys( $this->numberedArgs ) as $key ) {
            $arguments[$key] = $this->getArgument( $key );
        }
        return $arguments;
    }
    /**
     * @return array
     */
    public function getNamedArguments() {
        $arguments = [];
        foreach ( array_keys( $this->namedArgs ) as $key ) {
            $arguments[$key] = $this->getArgument( $key );
        }
        return $arguments;
    }
    /**
     * @param int $index
     * @return string|bool
     */
    public function getNumberedArgument( $index ) {
        if ( !isset( $this->numberedArgs[$index] ) ) {
            return false;
        }
        if ( !isset( $this->numberedExpansionCache[$index] ) ) {
            # No trimming for unnamed arguments
            $this->numberedExpansionCache[$index] = $this->parent->expand(
                $this->numberedArgs[$index],
                PPFrame::STRIP_COMMENTS
            );
        }
        return $this->numberedExpansionCache[$index];
    }
    /**
     * @param string $name
     * @return string|bool
     */
    public function getNamedArgument( $name ) {
        if ( !isset( $this->namedArgs[$name] ) ) {
            return false;
        }
        if ( !isset( $this->namedExpansionCache[$name] ) ) {
            # Trim named arguments post-expand, for backwards compatibility
            $this->namedExpansionCache[$name] = trim(
                $this->parent->expand( $this->namedArgs[$name], PPFrame::STRIP_COMMENTS ) );
        }
        return $this->namedExpansionCache[$name];
    }
    /**
     * @param int|string $name
     * @return string|bool
     */
    public function getArgument( $name ) {
        $text = $this->getNumberedArgument( $name );
        if ( $text === false ) {
            $text = $this->getNamedArgument( $name );
        }
        return $text;
    }
    /**
     * Return true if the frame is a template frame
     *
     * @return bool
     */
    public function isTemplate() {
        return true;
    }
    public function setVolatile( $flag = true ) {
        parent::setVolatile( $flag );
        $this->parent->setVolatile( $flag );
    }
    public function setTTL( $ttl ) {
        parent::setTTL( $ttl );
        $this->parent->setTTL( $ttl );
    }
}