summaryrefslogtreecommitdiff
blob: 43df8803f5edabf6b2b052a055f9d3cb14a734ca (plain)
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
<?php

/**
 * Smarty Method Append
 *
 * Smarty::append() method
 *
 * @package    Smarty
 * @subpackage PluginsInternal
 * @author     Uwe Tews
 */
class Smarty_Internal_Method_Append
{
    /**
     * Valid for all objects
     *
     * @var int
     */
    public $objMap = 7;

    /**
     * appends values to template variables
     *
     * @api  Smarty::append()
     * @link http://www.smarty.net/docs/en/api.append.tpl
     *
     * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
     * @param  array|string                                           $tpl_var the template variable name(s)
     * @param  mixed                                                  $value   the value to append
     * @param  bool                                                   $merge   flag if array elements shall be merged
     * @param  bool                                                   $nocache if true any output of this variable will
     *                                                                         be not cached
     *
     * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty
     */
    public function append(Smarty_Internal_Data $data, $tpl_var, $value = null, $merge = false, $nocache = false)
    {
        if (is_array($tpl_var)) {
            // $tpl_var is an array, ignore $value
            foreach ($tpl_var as $_key => $_val) {
                if ($_key != '') {
                    $this->append($data, $_key, $_val, $merge, $nocache);
                }
            }
        } else {
            if ($tpl_var != '' && isset($value)) {
                if (!isset($data->tpl_vars[$tpl_var])) {
                    $tpl_var_inst = $data->ext->getTemplateVars->_getVariable($data, $tpl_var, null, true, false);
                    if ($tpl_var_inst instanceof Smarty_Undefined_Variable) {
                        $data->tpl_vars[$tpl_var] = new Smarty_Variable(null, $nocache);
                    } else {
                        $data->tpl_vars[$tpl_var] = clone $tpl_var_inst;
                    }
                }
                if (!(is_array($data->tpl_vars[$tpl_var]->value) ||
                    $data->tpl_vars[$tpl_var]->value instanceof ArrayAccess)
                ) {
                    settype($data->tpl_vars[$tpl_var]->value, 'array');
                }
                if ($merge && is_array($value)) {
                    foreach ($value as $_mkey => $_mval) {
                        $data->tpl_vars[$tpl_var]->value[$_mkey] = $_mval;
                    }
                } else {
                    $data->tpl_vars[$tpl_var]->value[] = $value;
                }
            }
            if ($data->_objType == 2 && $data->scope) {
                $data->ext->_updateScope->updateScope($data, $tpl_var);
            }
        }
        return $data;
    }
}