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));
 }