Beispiel #1
0
 /**
  * Tests invalid locations
  *
  */
 public function testInvalidLocs()
 {
     $values = array('www.example.com', '/news/', '#', new stdClass(), 42, 'http:/example.com/', null, 'https://www.exmaple.com/?foo="bar\'&bar=<bat>');
     foreach ($values as $value) {
         $this->assertSame(false, $this->_validator->isValid($value));
     }
 }
Beispiel #2
0
 /**
  * Returns a DOMDocument containing the Sitemap XML for the given container
  *
  * @param  Zym_Navigation_Container $container  [optional] container to get
  *                                              breadcrumbs from, defaults
  *                                              to what is registered in the
  *                                              helper
  * @return DOMDocument
  * @throws DomainException  if schema validation is on and the sitemap
  *                          is invalid according to the sitemap schema, or
  *                          of sitemap validators are used and the loc
  *                          element fails validation
  */
 public function getDomSitemap(Zym_Navigation_Container $container = null)
 {
     if (null === $container) {
         $container = $this->getNavigation();
     }
     // create iterator
     $iterator = new RecursiveIteratorIterator($container, RecursiveIteratorIterator::SELF_FIRST);
     if (is_int($this->_maxDepth)) {
         $iterator->setMaxDepth($this->_maxDepth);
     }
     // check if we should validate using our own validators
     if ($this->getUseSitemapValidators()) {
         require_once 'Zym/Validate/Sitemap/Changefreq.php';
         require_once 'Zym/Validate/Sitemap/Lastmod.php';
         require_once 'Zym/Validate/Sitemap/Loc.php';
         require_once 'Zym/Validate/Sitemap/Priority.php';
         // create validators
         $locValidator = new Zym_Validate_Sitemap_Loc();
         $lastmodValidator = new Zym_Validate_Sitemap_Lastmod();
         $changefreqValidator = new Zym_Validate_Sitemap_Changefreq();
         $priorityValidator = new Zym_Validate_Sitemap_Priority();
     }
     // create document
     $dom = new DOMDocument('1.0', 'UTF-8');
     $dom->formatOutput = $this->_formatOutput;
     // ...and urlset (root) element
     $urlSet = $dom->createElementNS(self::SITEMAP_NS, 'urlset');
     $dom->appendChild($urlSet);
     // iterate navigation
     foreach ($iterator as $page) {
         if (!$this->_accept($page)) {
             // page is not accepted
             continue;
         }
         // create url node for this page
         $urlNode = $dom->createElementNS(self::SITEMAP_NS, 'url');
         // get absolute url from page
         $url = $this->_getUrl($page);
         $urlSet->appendChild($urlNode);
         if ($this->getUseSitemapValidators() && !$locValidator->isValid($url)) {
             $msg = "Invalid sitemap URL: '{$url}'";
             throw new DomainException($msg);
         }
         // put url in 'loc' element
         $urlNode->appendChild($dom->createElementNS(self::SITEMAP_NS, 'loc', $url));
         // add 'lastmod' element if a valid lastmod is set in page
         if (isset($page->lastmod)) {
             $lastmod = strtotime((string) $page->lastmod);
             // prevent 1970-01-01...
             if ($lastmod !== false) {
                 $lastmod = date('c', $lastmod);
             }
             if (!$this->getUseSitemapValidators() || $lastmodValidator->isValid($lastmod)) {
                 $urlNode->appendChild($dom->createElementNS(self::SITEMAP_NS, 'lastmod', $lastmod));
             }
         }
         // add 'changefreq' element if a valid changefreq is set in page
         if (isset($page->changefreq)) {
             $changefreq = $page->changefreq;
             if (!$this->getUseSitemapValidators() || $changefreqValidator->isValid($changefreq)) {
                 $urlNode->appendChild($dom->createElementNS(self::SITEMAP_NS, 'changefreq', $changefreq));
             }
         }
         // add 'priority' element if a valid priority is set in page
         if (isset($page->priority)) {
             $priority = $page->priority;
             if (!$this->getUseSitemapValidators() || $priorityValidator->isValid($priority)) {
                 $urlNode->appendChild($dom->createElementNS(self::SITEMAP_NS, 'priority', $priority));
             }
         }
     }
     // validate using schema if specified
     if ($this->getUseSchemaValidation()) {
         if (!@$dom->schemaValidate(self::SITEMAP_XSD)) {
             $msg = 'Sitemap is invalid according to ' . self::SITEMAP_XSD;
             throw new DomainException($msg);
         }
     }
     return $dom;
 }