Spread ParseLinkTemplate work across relevant extensions
This commit is contained in:
		
							parent
							
								
									41a205d24a
								
							
						
					
					
						commit
						3a57817fc2
					
				
							
								
								
									
										1
									
								
								SPEED.md
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								SPEED.md
									
									
									
									
									
								
							| @ -34,7 +34,6 @@ Notable behaviour changes: | |||||||
| - We only show the first 500 pages of results for any query, except for | - We only show the first 500 pages of results for any query, except for | ||||||
|   the most simple (no tags, or one positive tag) |   the most simple (no tags, or one positive tag) | ||||||
| - We only ever show the first 5,000 results for complex queries | - We only ever show the first 5,000 results for complex queries | ||||||
| - `ParseLinkTemplateEvent` is disabled |  | ||||||
| - Only comments from the past 24 hours show up in /comment/list | - Only comments from the past 24 hours show up in /comment/list | ||||||
| - Web crawlers are blocked from creating too many nonsense searches | - Web crawlers are blocked from creating too many nonsense searches | ||||||
| - The first 10 pages in the index get extra caching | - The first 10 pages in the index get extra caching | ||||||
|  | |||||||
| @ -135,8 +135,10 @@ class ParseLinkTemplateEvent extends Event | |||||||
|         $this->image = $image; |         $this->image = $image; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public function replace(string $needle, string $replace): void |     public function replace(string $needle, ?string $replace): void | ||||||
|     { |     { | ||||||
|  |         if(!is_null($replace)) { | ||||||
|             $this->link = str_replace($needle, $replace, $this->link); |             $this->link = str_replace($needle, $replace, $this->link); | ||||||
|         } |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -763,47 +763,8 @@ class Image | |||||||
| 
 | 
 | ||||||
|     public function parse_link_template(string $tmpl, int $n=0): string |     public function parse_link_template(string $tmpl, int $n=0): string | ||||||
|     { |     { | ||||||
|         global $config; |  | ||||||
| 
 |  | ||||||
|         // don't bother hitting the database if it won't be used...
 |  | ||||||
|         $tags = ""; |  | ||||||
|         if (strpos($tmpl, '$tags') !== false) { // * stabs dynamically typed languages with a rusty spoon *
 |  | ||||||
|             $tags = $this->get_tag_list(); |  | ||||||
|             $tags = str_replace("/", "", $tags); |  | ||||||
|             $tags = preg_replace("/^\.+/", "", $tags); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         $base_href = $config->get_string('base_href'); |  | ||||||
|         $fname = $this->get_filename(); |  | ||||||
|         $base_fname = strpos($fname, '.') ? substr($fname, 0, strrpos($fname, '.')) : $fname; |  | ||||||
| 
 |  | ||||||
|         $tmpl = str_replace('$id', $this->id, $tmpl); |  | ||||||
|         $tmpl = str_replace('$hash_ab', substr($this->hash, 0, 2), $tmpl); |  | ||||||
|         $tmpl = str_replace('$hash_cd', substr($this->hash, 2, 2), $tmpl); |  | ||||||
|         $tmpl = str_replace('$hash', $this->hash, $tmpl); |  | ||||||
|         $tmpl = str_replace('$tags', $tags, $tmpl); |  | ||||||
|         $tmpl = str_replace('$base', $base_href, $tmpl); |  | ||||||
|         $tmpl = str_replace('$ext', $this->ext, $tmpl); |  | ||||||
|         if ($this->width && $this->height && $this->length) { |  | ||||||
|             $s = ((int)($this->length / 100))/10; |  | ||||||
|             $tmpl = str_replace('$size', "{$this->width}x{$this->height}, ${s}s", $tmpl); |  | ||||||
|         } elseif ($this->width && $this->height) { |  | ||||||
|             $tmpl = str_replace('$size', "{$this->width}x{$this->height}", $tmpl); |  | ||||||
|         } elseif ($this->length) { |  | ||||||
|             $s = ((int)($this->length / 100))/10; |  | ||||||
|             $tmpl = str_replace('$size', "${s}s", $tmpl); |  | ||||||
|         } |  | ||||||
|         $tmpl = str_replace('$filesize', to_shorthand_int($this->filesize), $tmpl); |  | ||||||
|         $tmpl = str_replace('$filename', $base_fname, $tmpl); |  | ||||||
|         $tmpl = str_replace('$title', $config->get_string(SetupConfig::TITLE), $tmpl); |  | ||||||
|         $tmpl = str_replace('$date', autodate($this->posted, false), $tmpl); |  | ||||||
| 
 |  | ||||||
|         // nothing seems to use this, sending the event out to 50 exts is a lot of overhead
 |  | ||||||
|         if (!SPEED_HAX) { |  | ||||||
|         $plte = send_event(new ParseLinkTemplateEvent($tmpl, $this)); |         $plte = send_event(new ParseLinkTemplateEvent($tmpl, $this)); | ||||||
|         $tmpl = $plte->link; |         $tmpl = $plte->link; | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         return load_balance_url($tmpl, $this->hash, $n); |         return load_balance_url($tmpl, $this->hash, $n); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -79,6 +79,5 @@ class UtilTest extends \PHPUnit\Framework\TestCase | |||||||
|             load_balance_url("https://{foo=10,bar=5,baz=5}.mycdn.com/$hash.$ext", $hash, 0), |             load_balance_url("https://{foo=10,bar=5,baz=5}.mycdn.com/$hash.$ext", $hash, 0), | ||||||
|             load_balance_url("https://{foo=10,bar=5,baz=5}.mycdn.com/$hash.$ext", $hash, 1) |             load_balance_url("https://{foo=10,bar=5,baz=5}.mycdn.com/$hash.$ext", $hash, 1) | ||||||
|         ); |         ); | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -250,6 +250,20 @@ class ImageIO extends Extension | |||||||
|         $event->panel->add_block($sb); |         $event->panel->add_block($sb); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function onParseLinkTemplate(ParseLinkTemplateEvent $event) | ||||||
|  |     { | ||||||
|  |         $fname = $event->image->get_filename(); | ||||||
|  |         $base_fname = strpos($fname, '.') ? substr($fname, 0, strrpos($fname, '.')) : $fname; | ||||||
|  | 
 | ||||||
|  |         $event->replace('$id', (string)$event->image->id); | ||||||
|  |         $event->replace('$hash_ab', substr($event->image->hash, 0, 2)); | ||||||
|  |         $event->replace('$hash_cd', substr($event->image->hash, 2, 2)); | ||||||
|  |         $event->replace('$hash', $event->image->hash); | ||||||
|  |         $event->replace('$filesize', to_shorthand_int($event->image->filesize)); | ||||||
|  |         $event->replace('$filename', $base_fname); | ||||||
|  |         $event->replace('$date', autodate($event->image->posted, false)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private function send_file(int $image_id, string $type) |     private function send_file(int $image_id, string $type) | ||||||
|     { |     { | ||||||
|         global $config; |         global $config; | ||||||
|  | |||||||
| @ -296,6 +296,21 @@ class Media extends Extension | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function onParseLinkTemplate(ParseLinkTemplateEvent $event) | ||||||
|  |     { | ||||||
|  |         if ($event->image->width && $event->image->height && $event->image->length) { | ||||||
|  |             $s = ((int)($event->image->length / 100))/10; | ||||||
|  |             $event->replace('$size', "{$event->image->width}x{$event->image->height}, ${s}s"); | ||||||
|  |         } elseif ($event->image->width && $event->image->height) { | ||||||
|  |             $event->replace('$size', "{$event->image->width}x{$event->image->height}"); | ||||||
|  |         } elseif ($event->image->length) { | ||||||
|  |             $s = ((int)($event->image->length / 100))/10; | ||||||
|  |             $event->replace('$size', "${s}s"); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         $event->replace('$ext', $event->image->ext); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Check Memory usage limits |      * Check Memory usage limits | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -1,6 +1,9 @@ | |||||||
| <?php declare(strict_types=1); | <?php declare(strict_types=1); | ||||||
| 
 | 
 | ||||||
| use function MicroHTML\{TR,TH,TD,A}; | use function MicroHTML\TR; | ||||||
|  | use function MicroHTML\TH; | ||||||
|  | use function MicroHTML\TD; | ||||||
|  | use function MicroHTML\A; | ||||||
| 
 | 
 | ||||||
| if ( // kill these glitched requests immediately
 | if ( // kill these glitched requests immediately
 | ||||||
|     !empty($_SERVER["REQUEST_URI"]) |     !empty($_SERVER["REQUEST_URI"]) | ||||||
|  | |||||||
| @ -446,4 +446,11 @@ class Setup extends Extension | |||||||
|             $event->add_link("Board Config", make_link("setup")); |             $event->add_link("Board Config", make_link("setup")); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public function onParseLinkTemplate(ParseLinkTemplateEvent $event) | ||||||
|  |     { | ||||||
|  |         global $config; | ||||||
|  |         $event->replace('$base', $config->get_string('base_href')); | ||||||
|  |         $event->replace('$title', $config->get_string(SetupConfig::TITLE)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -230,7 +230,6 @@ class TagEdit extends Extension | |||||||
|         $this->theme->display_mass_editor(); |         $this->theme->display_mass_editor(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     public function onPageSubNavBuilding(PageSubNavBuildingEvent $event) |     public function onPageSubNavBuilding(PageSubNavBuildingEvent $event) | ||||||
|     { |     { | ||||||
|         if ($event->parent=="tags") { |         if ($event->parent=="tags") { | ||||||
| @ -238,7 +237,6 @@ class TagEdit extends Extension | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     /** |     /** | ||||||
|      * When an alias is added, oldtag becomes inaccessible. |      * When an alias is added, oldtag becomes inaccessible. | ||||||
|      */ |      */ | ||||||
| @ -270,6 +268,14 @@ class TagEdit extends Extension | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public function onParseLinkTemplate(ParseLinkTemplateEvent $event) | ||||||
|  |     { | ||||||
|  |         $tags = $event->image->get_tag_list(); | ||||||
|  |         $tags = str_replace("/", "", $tags); | ||||||
|  |         $tags = preg_replace("/^\.+/", "", $tags); | ||||||
|  |         $event->replace('$tags', $tags); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private function mass_tag_edit(string $search, string $replace) |     private function mass_tag_edit(string $search, string $replace) | ||||||
|     { |     { | ||||||
|         global $database; |         global $database; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user