parent
							
								
									1d38f51a3a
								
							
						
					
					
						commit
						41d4eac09f
					
				| @ -0,0 +1,125 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace App\Http\Controllers; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | use App\Models\Table; | ||||||
|  | use App\Models\User; | ||||||
|  | use XMLWriter; | ||||||
|  | 
 | ||||||
|  | class SitemapController extends Controller | ||||||
|  | { | ||||||
|  |     public function sitemap() | ||||||
|  |     { | ||||||
|  |         ob_end_clean(); | ||||||
|  | 
 | ||||||
|  |         // Redirect output to a client’s web browser | ||||||
|  |         header("Content-Type: text/xml; charset=utf-8"); | ||||||
|  |         // Cache headers | ||||||
|  |         header('Cache-Control: max-age=0'); | ||||||
|  |         // IE9 | ||||||
|  |         header('Cache-Control: max-age=1'); | ||||||
|  |         // Other IE headers | ||||||
|  |         header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past | ||||||
|  |         header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified | ||||||
|  |         header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 | ||||||
|  |         header('Pragma: no-cache'); // HTTP/1.0 | ||||||
|  | 
 | ||||||
|  |         $xmlWriter = new XMLWriter(); | ||||||
|  |         $xmlWriter->openURI('php://output'); | ||||||
|  |         $xmlWriter->startDocument('1.0', 'UTF-8'); | ||||||
|  |         $xmlWriter->setIndent(true); | ||||||
|  |         { | ||||||
|  |             $xmlWriter->startElement('urlset'); | ||||||
|  |             { | ||||||
|  |                 $xmlWriter->writeAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9'); | ||||||
|  |                 foreach ($this->iterateTables() as $entry) { | ||||||
|  |                     $xmlWriter->startElement('url'); | ||||||
|  |                     $xmlWriter->writeElement('loc', $entry->url); | ||||||
|  | 
 | ||||||
|  |                     if (isset($entry->priority)) { | ||||||
|  |                         $xmlWriter->writeElement('priority', $entry->priority); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     if (isset($entry->changefreq)) { | ||||||
|  |                         $xmlWriter->writeElement('changefreq', $entry->changefreq); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     if (isset($entry->lastmodified)) { | ||||||
|  |                         $xmlWriter->writeElement('lastmod', $entry->lastmodified->format(\DateTime::W3C)); | ||||||
|  |                     } | ||||||
|  |                     $xmlWriter->endElement(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             $xmlWriter->endElement(); | ||||||
|  |         } | ||||||
|  |         $xmlWriter->endDocument(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private function iterateTables() | ||||||
|  |     { | ||||||
|  |         $prio_info = .9; | ||||||
|  |         $prio_user = .8; | ||||||
|  |         $prio_table = .6; | ||||||
|  |         $prio_table_rev = .5; | ||||||
|  |         $prio_misc = .5; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('dash'), | ||||||
|  |             'priority' => 1, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('terms'), | ||||||
|  |             'priority' => $prio_info, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('faq'), | ||||||
|  |             'priority' => $prio_info, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('donate'), | ||||||
|  |             'priority' => $prio_info, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('privacy'), | ||||||
|  |             'priority' => $prio_info, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('login'), | ||||||
|  |             'priority' => $prio_misc, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         yield (object)[ | ||||||
|  |             'url' => route('register'), | ||||||
|  |             'priority' => $prio_misc, | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         foreach (User::all() as $user) { | ||||||
|  |             yield (object)[ | ||||||
|  |                 'url' => route('profile.view', $user->name), | ||||||
|  |                 'lastmodified' => $user->updated_at, | ||||||
|  |                 'priority' => $prio_user, | ||||||
|  |             ]; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         foreach (Table::all() as $table) { | ||||||
|  |             yield (object)[ | ||||||
|  |                 'url' => $table->viewRoute, | ||||||
|  |                 'lastmodified' => $table->updated_at, | ||||||
|  |                 'priority' => $prio_table, | ||||||
|  |             ]; | ||||||
|  | 
 | ||||||
|  |             yield (object)[ | ||||||
|  |                 'url' => $table->revisionsRoute, | ||||||
|  |                 'lastmodified' => $table->updated_at, | ||||||
|  |                 'priority' => $prio_table_rev, | ||||||
|  |             ]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue