Esempio n. 1
0
 public function generateObject($current)
 {
     // Is there some error?
     if ($this->_error) {
         $nodeWorking = XmlUtil::CreateChild($current, "poll");
         XmlUtil::CreateChild($nodeWorking, "error", $this->_myWords->Value("ERROR_POLLNOTSETUP"));
     } else {
         // Get Data to SHOW the answers OR chart.
         $itf = new IteratorFilter();
         $itf->addRelation("name", Relation::EQUAL, $this->_poll);
         $itf->addRelation("lang", Relation::EQUAL, $this->_lang);
         if ($this->_isdb) {
             $dbdata = new DBDataset($this->_connection);
             $param = array();
             $sql = $itf->getSql($this->_tblpoll, $param);
             $itPoll = $dbdata->getIterator($sql, $param);
             $param = array();
             $sql = $itf->getSql($this->_tblanswer, $param);
             $itAnswer = $dbdata->getIterator($sql, $param);
         } else {
             $this->getAnyData();
             $itPoll = $this->_anyPoll->getIterator($itf);
             $itAnswer = $this->_anyAnswer->getIterator($itf);
         }
         // Show the answers if not was called the method processVote()
         if (!$this->_processed) {
             $nodeWorking = XmlUtil::CreateChild($current, "poll");
             XmlUtil::AddAttribute($nodeWorking, "url", $this->_url);
             XmlUtil::AddAttribute($nodeWorking, "name", $this->_poll);
             XmlUtil::AddAttribute($nodeWorking, "lang", $this->_lang);
             // Show Data Only if Poll is active
             if ($itPoll->hasNext()) {
                 $sr = $itPoll->moveNext();
                 XmlUtil::AddAttribute($nodeWorking, "multiple", $sr->getField("multiple") == "Y" ? "true" : "false");
                 if ($sr->getField("active") == "Y") {
                     XmlUtil::AddAttribute($nodeWorking, "active", "true");
                     XmlUtil::AddAttribute($nodeWorking, "sendbtn", $this->_myWords->Value("SENDBTN"));
                     XmlUtil::CreateChild($nodeWorking, "question", $sr->getField("question"));
                     while ($itAnswer->hasNext()) {
                         $sr = $itAnswer->moveNext();
                         $nodeanswer = XmlUtil::CreateChild($nodeWorking, "answer", $sr->getField("answer"));
                         XmlUtil::AddAttribute($nodeanswer, "code", $sr->getField("code"));
                     }
                 } else {
                     XmlUtil::AddAttribute($nodeWorking, "sendbtn", $this->_myWords->Value("VIEWRESULTSBTN"));
                     XmlUtil::CreateChild($nodeWorking, "question", $sr->getField("question") . " - " . $this->_myWords->Value("POLLENDED"));
                 }
             } else {
                 XmlUtil::CreateChild($nodeWorking, "error", $this->_myWords->Value("ERROR_POLLEMPTY"));
             }
         } else {
             $srPoll = $itPoll->moveNext();
             if ($srPoll->getField("showresults") == "Y") {
                 $colors = array('#FFF8A3', '#A9CC8F', '#B2C8D9', '#BEA37A', '#F3AA79', '#B5B5A9', '#E6A5A4', '#F8D753', '#5C9746', '#3E75A7', '#7A653E', '#E1662A', '#74796F', '#C4384F', '#F0B400', '#1E6C0B', '#00488C', '#332600', '#D84000', '#434C43', '#B30023', '#FAE16B', '#82B16A', '#779DBF', '#907A52', '#EB8953', '#8A8D82', '#D6707B', '#F3C01C', '#3D8128', '#205F9A', '#63522B', '#DC5313', '#5D645A', '#BC1C39');
                 //\Xmlnuke\Util\Debug::PrintValue($itAnswer);
                 $info = array();
                 $info[] = array("column" => "answer", "type" => ChartColumnType::String, "name" => "Legend");
                 $info[] = array("column" => "votes", "type" => ChartColumnType::Number, "name" => "Value");
                 $chart = new ChartObject("");
                 $chart->setChartType(ChartType::Pie);
                 $chart->setIs3d(true);
                 $chart->setWidth($this->_width);
                 $chart->setHeight($this->_height);
                 $chart->addSeriesIterator($itAnswer, $info);
                 $object = new ObjectHandler($current, $chart, "xmlnuke");
                 $object->CreateObjectFromModel();
             } else {
                 if ($srPoll->getField("active") == "Y") {
                     $txt = new XmlnukeText($this->_myWords->Value("VOTECOMPUTED"), true);
                 } else {
                     $txt = new XmlnukeText($this->_myWords->Value("CANNOTSHOWRESULTS"), true);
                 }
                 $txt->generateObject($current);
             }
         }
     }
 }
Esempio n. 2
0
 /**
  *@desc Transform an XMLDocument object with an XSLFile
  *@param DOMDocument $xml
  *@param XSLFilenameProcessor $xslFile XSL File
  *@return string - The transformation string
  */
 public function TransformDocument($xml, $xslFile)
 {
     // Add a custom XML based on attribute xmlobjet inside root
     // Example:
     // <page xmlobject="plugin.name(param1, param2)">
     $pattern = "/(?P<plugin>.*?)\\s*\\((?P<param>([#']?.*?[#']?\\s*,?\\s*)+)?\\)/";
     $xmlRoot = $xml->documentElement;
     $xmlRootAttributes = $xmlRoot->attributes;
     if ($xmlRootAttributes != null) {
         foreach ($xmlRootAttributes as $attr) {
             if ($attr->nodeName == "xmlobject") {
                 $match = preg_match_all($pattern, $attr->value, $matches);
                 for ($iCount = 0; $iCount < $match; $iCount++) {
                     $param = explode(",", $matches["param"][$iCount]);
                     for ($i = 0; $i <= 4; $i++) {
                         if (count($param) < $i + 1) {
                             $param[] = null;
                         } elseif ($param[$i] == "#CONTEXT#") {
                             $param[$i] = $this->_context;
                         } else {
                             $param[$i] = trim($param[$i]);
                         }
                     }
                     $className = str_replace('.', '\\', $matches["plugin"][$iCount]);
                     if ($className[0] != '\\') {
                         $className = "\\{$className}";
                     }
                     $plugin = new $className($param[0], $param[1], $param[2], $param[3], $param[4]);
                     if ($plugin instanceof IXmlnukeDocumentObject) {
                         $plugin->generateObject($xmlRoot);
                     } else {
                         $handler = new ObjectHandler($xmlRoot, $plugin);
                         $handler->CreateObjectFromModel();
                     }
                 }
             } else {
                 if ($attr->nodeName == 'xsl') {
                     $xslFile = new XSLFilenameProcessor($attr->value);
                 }
             }
         }
     }
     // Check if there is no XSL template
     if ($this->_outputResult != OutputData::Xslt) {
         if ($this->_extractNodes == "") {
             $outDocument = $xml;
         } else {
             $nodes = XmlUtil::selectNodes($xml->documentElement, "/" . $this->_extractNodes);
             $retDocument = XmlUtil::CreateXmlDocumentFromStr("<" . $this->_extractNodesRoot . "/>", false);
             $nodeRoot = $retDocument->documentElement;
             XmlUtil::AddAttribute($nodeRoot, "xpath", $this->_extractNodes);
             foreach ($nodes as $node) {
                 $nodeToAdd = XmlUtil::CreateChild($nodeRoot, $node->nodeName, "");
                 $attributes = $node->attributes;
                 foreach ($attributes as $value) {
                     XmlUtil::AddAttribute($nodeToAdd, $value->nodeName, $value->nodeValue);
                 }
                 XmlUtil::AddNodeFromNode($nodeToAdd, $node);
             }
             $outDocument = $retDocument;
         }
         if ($this->_outputResult == OutputData::Json) {
             return ObjectHandler::xml2json($outDocument, $this->_extraParams["json_function"]);
         } else {
             return $outDocument->saveXML();
         }
     }
     $this->_context->setXsl($xslFile->ToString());
     // Set up a transform object with the XSLT file
     //XslTransform xslTran = new XslTransform();
     $xslTran = new XSLTProcessor();
     $snippetProcessor = new SnippetProcessor($xslFile);
     //Uri
     try {
         $uri = $snippetProcessor->getUriFromXsl($xslFile, $this->_context);
     } catch (XMLNukeException $ex) {
         throw new EngineException("Cannot load XSL file. The following error occured: " . $ex->getMessage(), 751);
     }
     //Process smipets and put teh xsl StyleShet
     try {
         $xsl = $snippetProcessor->IncludeSnippet($uri);
     } catch (XMLNukeException $ex) {
         throw new EngineException("Cannot load XSL cache file. The following error occured: " . $ex->getMessage(), 752);
     }
     $xsl = FileUtil::fixUTF8($xsl);
     $xslDom = new DOMDocument();
     $xslDom->loadXML($xsl);
     $xslTran->importStyleSheet($xslDom);
     // Create Argument List
     $xslTran->setParameter("", "xml", $this->_context->getXml());
     $xslTran->setParameter("", "xsl", $this->_context->getXsl());
     $xslTran->setParameter("", "site", '_all');
     $xslTran->setParameter("", "lang", $this->_context->Language()->getName());
     $xslTran->setParameter("", "module", $this->_context->getModule());
     $xslTran->setParameter("", "transformdate", date("Y-m-d H:i:s"));
     $xslTran->setParameter("", "urlbase", $this->_context->get("xmlnuke.URLBASE"));
     $xslTran->setParameter("", "engine", "PHP");
     $xslTran->setParameter("", "url", $this->_context->getServerName(false, true) . $this->_context->get('REQUEST_URI'));
     //Transform and output
     $xtw = $xslTran->transformToXML($xml);
     $xhtml = new DOMDocument();
     $xhtml->loadXML($xtw);
     // Reload XHTML result to process PARAM and HREFs
     $paramProcessor = new ParamProcessor();
     $paramProcessor->AdjustToFullLink($xhtml, "A", "HREF");
     $paramProcessor->AdjustToFullLink($xhtml, "FORM", "ACTION");
     $paramProcessor->AdjustToFullLink($xhtml, "AREA", "HREF");
     $paramProcessor->AdjustToFullLink($xhtml, "LINK", "HREF");
     if ($this->_context->get("xmlnuke.ENABLEPARAMPROCESSOR")) {
         $paramProcessor->ProcessParameters($xhtml);
     }
     // ATENCAO: O codigo gerado pelo saveXML faz com que elementos vazios sejam
     //      comprimidos. Exemplo: <table />
     //      para o HTML isso eh ruim. Logo o metodo deve ser saveHTML que deixa o tag
     //      assim: <table></table>
     $arrCt = $this->_context->getSuggestedContentType();
     if ($arrCt["content-type"] == "text/html") {
         return FileUtil::fixUTF8(strtr($xhtml->saveHTML(), array("></br>" => "/>")));
     } else {
         return FileUtil::fixUTF8($xhtml->saveXML());
     }
 }