/** * Parse the template * * @param string $template * @param mixed $id * @param mixed $pid * @return boolean */ public static function parse($template, $id = null, $pid = null) { // Parse any date placeholders $dates = []; preg_match_all('/\\[\\{date.*\\}\\]/', $template, $dates); if (isset($dates[0]) && isset($dates[0][0])) { foreach ($dates[0] as $date) { $pattern = str_replace('}]', '', substr($date, strpos($date, '_') + 1)); $template = str_replace($date, date($pattern), $template); } } // Parse any template placeholders $templates = []; preg_match_all('/\\[\\{template_.*\\}\\]/', $template, $templates); if (isset($templates[0]) && isset($templates[0][0])) { foreach ($templates[0] as $tmpl) { $t = str_replace('}]', '', substr($tmpl, strpos($tmpl, '_') + 1)); if ($t != $id && $t != $pid) { $newTemplate = is_numeric($t) ? Table\Templates::findById($t) : Table\Templates::findBy(['name' => $t]); if (isset($newTemplate->id)) { $t = self::parse($newTemplate->template, $newTemplate->id, $id); $template = str_replace($tmpl, $t, $template); } else { $template = str_replace($tmpl, '', $template); } } else { $template = str_replace($tmpl, '', $template); } } } // Parse any session placeholders $open = []; $close = []; $merge = []; $sess = []; preg_match_all('/\\[\\{sess\\}\\]/msi', $template, $open, PREG_OFFSET_CAPTURE); preg_match_all('/\\[\\{\\/sess\\}\\]/msi', $template, $close, PREG_OFFSET_CAPTURE); // If matches are found, format and merge the results. if (isset($open[0][0]) && isset($close[0][0])) { foreach ($open[0] as $key => $value) { $merge[] = [$open[0][$key][0] => $open[0][$key][1], $close[0][$key][0] => $close[0][$key][1]]; } } foreach ($merge as $match) { $sess[] = substr($template, $match['[{sess}]'], $match['[{/sess}]'] - $match['[{sess}]'] + 9); } if (count($sess) > 0) { $session = Session::getInstance(); foreach ($sess as $s) { $sessString = str_replace(['[{sess}]', '[{/sess}]'], ['', ''], $s); $isSess = null; $noSess = null; if (strpos($sessString, '[{or}]') !== false) { $sessValues = explode('[{or}]', $sessString); if (isset($sessValues[0])) { $isSess = $sessValues[0]; } if (isset($sessValues[1])) { $noSess = $sessValues[1]; } } else { $isSess = $sessString; } if (null !== $isSess) { if (!isset($session->user)) { $template = str_replace($s, $noSess, $template); } else { $newSess = $isSess; foreach ($_SESSION as $sessKey => $sessValue) { if ((is_array($sessValue) || $sessValue instanceof \ArrayObject) && strpos($template, '[{' . $sessKey . '->') !== false) { foreach ($sessValue as $sessK => $sessV) { if (!is_array($sessV)) { $newSess = str_replace('[{' . $sessKey . '->' . $sessK . '}]', $sessV, $newSess); } } } else { if (!is_array($sessValue) && !$sessValue instanceof \ArrayObject && strpos($template, '[{' . $sessKey) !== false) { $newSess = str_replace('[{' . $sessKey . '}]', $sessValue, $newSess); } } } if ($newSess != $isSess) { $template = str_replace('[{sess}]' . $sessString . '[{/sess}]', $newSess, $template); } else { $template = str_replace($s, $noSess, $template); } } } else { $template = str_replace($s, '', $template); } } } return $template; }
/** * Remove a template * * @param array $fields * @return void */ public function remove(array $fields) { if (isset($fields['rm_templates'])) { foreach ($fields['rm_templates'] as $id) { $template = Table\Templates::findById((int) $id); if (isset($template->id)) { $template->delete(); } } } }
/** * Json action method * * @param int $id * @param int $marked * @return void */ public function json($id, $marked) { $json = []; $template = Table\Templates::findById($id); if (isset($template->id) && null !== $template->history) { $history = json_decode($template->history, true); if (isset($history[$marked])) { $json['value'] = $history[$marked]; } } $this->response->setBody(json_encode($json, JSON_PRETTY_PRINT)); $this->send(200, ['Content-Type' => 'application/json']); }