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