public function dispatchLoopShutdown() { if (!Pimcore_Tool::isHtmlResponse($this->getResponse())) { return; } $cacheKey = "outputfilter_tagmngt"; $tags = Pimcore_Model_Cache::load($cacheKey); if (!is_array($tags)) { $dir = Tool_Tag_Config::getWorkingDir(); $tags = array(); $files = scandir($dir); foreach ($files as $file) { if (strpos($file, ".xml")) { $name = str_replace(".xml", "", $file); $tags[] = Tool_Tag_Config::getByName($name); } } Pimcore_Model_Cache::save($tags, $cacheKey, array("tagmanagement"), null, 100); } if (empty($tags)) { return; } include_once "simple_html_dom.php"; $body = $this->getResponse()->getBody(); $html = str_get_html($body); $requestParams = array_merge($_GET, $_POST); if ($html) { foreach ($tags as $tag) { $method = strtolower($tag->getHttpMethod()); $pattern = $tag->getUrlPattern(); $textPattern = $tag->getTextPattern(); if (($method == strtolower($this->getRequest()->getMethod()) || empty($method)) && (empty($pattern) || @preg_match($pattern, $this->getRequest()->getRequestUri())) && (empty($textPattern) || strpos($body, $textPattern) !== false)) { $paramsValid = true; foreach ($tag->getParams() as $param) { if (!empty($param["name"])) { if (!empty($param["value"])) { if (!array_key_exists($param["name"], $requestParams) || $requestParams[$param["name"]] != $param["value"]) { $paramsValid = false; } } else { if (!array_key_exists($param["name"], $requestParams)) { $paramsValid = false; } } } } if (is_array($tag->getItems()) && $paramsValid) { foreach ($tag->getItems() as $item) { if (!empty($item["element"]) && !empty($item["code"]) && !empty($item["position"])) { $element = $html->find($item["element"], 0); if ($element) { if ($item["position"] == "end") { $element->innertext = $element->innertext . "\n\n" . $item["code"] . "\n\n"; } else { // beginning $element->innertext = "\n\n" . $item["code"] . "\n\n" . $element->innertext; } // we havve to reinitialize the html object, otherwise it causes problems with nested child selectors $body = $html->save(); $html = str_get_html($body); } } } } } } $this->getResponse()->setBody($body); } }
public function tagManagementUpdateAction() { $tag = Tool_Tag_Config::getByName($this->_getParam("name")); $data = Zend_Json::decode($this->_getParam("configuration")); $data = array_htmlspecialchars($data); $items = array(); foreach ($data as $key => $value) { $setter = "set" . ucfirst($key); if (method_exists($tag, $setter)) { $tag->{$setter}($value); } if (strpos($key, "item.") === 0) { $cleanKeyParts = explode(".", $key); $items[$cleanKeyParts[1]][$cleanKeyParts[2]] = $value; } } $tag->resetItems(); foreach ($items as $item) { $tag->addItem($item); } // parameters get/post $params = array(); for ($i = 0; $i < 5; $i++) { $params[] = array("name" => $data["params.name" . $i], "value" => $data["params.value" . $i]); } $tag->setParams($params); $tag->save(); // clear cache tag Pimcore_Model_Cache::clearTag("tagmanagement"); $this->_helper->json(array("success" => true)); }