image locking
This commit is contained in:
		
							parent
							
								
									9d88f44d07
								
							
						
					
					
						commit
						37619e9776
					
				@ -36,6 +36,7 @@ class Image {
 | 
				
			|||||||
	var $owner_ip;
 | 
						var $owner_ip;
 | 
				
			||||||
	var $posted;
 | 
						var $posted;
 | 
				
			||||||
	var $source;
 | 
						var $source;
 | 
				
			||||||
 | 
						var $locked;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * One will very rarely construct an image directly, more common
 | 
						 * One will very rarely construct an image directly, more common
 | 
				
			||||||
@ -371,6 +372,19 @@ class Image {
 | 
				
			|||||||
		$database->execute("UPDATE images SET source=? WHERE id=?", array($source, $this->id));
 | 
							$database->execute("UPDATE images SET source=? WHERE id=?", array($source, $this->id));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function is_locked() {
 | 
				
			||||||
 | 
							return ($this->locked === true || $this->locked == "Y");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						public function set_locked($tf) {
 | 
				
			||||||
 | 
							global $database;
 | 
				
			||||||
 | 
							$ln = $tf ? "Y" : "N";
 | 
				
			||||||
 | 
							$sln = $database->engine->scoreql_to_sql("SCORE_BOOL_$ln");
 | 
				
			||||||
 | 
							$sln = str_replace("'", "", $sln);
 | 
				
			||||||
 | 
							$sln = str_replace('"', "", $sln);
 | 
				
			||||||
 | 
							$database->execute("UPDATE images SET locked=? WHERE id=?", array($sln, $this->id));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Delete all tags from this image.
 | 
						 * Delete all tags from this image.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
 | 
				
			|||||||
@ -38,6 +38,23 @@ class TagSetEvent extends Event {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * LockSetEvent:
 | 
				
			||||||
 | 
					 *   $image_id
 | 
				
			||||||
 | 
					 *   $locked
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class LockSetEvent extends Event {
 | 
				
			||||||
 | 
						var $image;
 | 
				
			||||||
 | 
						var $locked;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function LockSetEvent(Image $image, $locked) {
 | 
				
			||||||
 | 
							assert(is_bool($locked));
 | 
				
			||||||
 | 
							$this->image = $image;
 | 
				
			||||||
 | 
							$this->locked = $locked;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TagEdit implements Extension {
 | 
					class TagEdit implements Extension {
 | 
				
			||||||
	var $theme;
 | 
						var $theme;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -58,24 +75,38 @@ class TagEdit implements Extension {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($event instanceof ImageInfoSetEvent) {
 | 
							if($event instanceof ImageInfoSetEvent) {
 | 
				
			||||||
			if($this->can_tag()) {
 | 
								if($this->can_tag($event->image)) {
 | 
				
			||||||
				send_event(new TagSetEvent($event->image, $_POST['tag_edit__tags']));
 | 
									send_event(new TagSetEvent($event->image, $_POST['tag_edit__tags']));
 | 
				
			||||||
				if($this->can_source()) {
 | 
									if($this->can_source($event->image)) {
 | 
				
			||||||
					send_event(new SourceSetEvent($event->image, $_POST['tag_edit__source']));
 | 
										send_event(new SourceSetEvent($event->image, $_POST['tag_edit__source']));
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else {
 | 
				
			||||||
				$this->theme->display_error($page, "Error", "Anonymous tag editing is disabled");
 | 
									$this->theme->display_error($page, "Error", "Anonymous tag editing is disabled");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if($user->is_admin()) {
 | 
				
			||||||
 | 
									send_event(new LockSetEvent($event->image, $_POST['tag_edit__locked']=="on"));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($event instanceof TagSetEvent) {
 | 
							if($event instanceof TagSetEvent) {
 | 
				
			||||||
 | 
								if($user->is_admin() || !$event->image->is_locked()) {
 | 
				
			||||||
				$event->image->set_tags($event->tags);
 | 
									$event->image->set_tags($event->tags);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($event instanceof SourceSetEvent) {
 | 
							if($event instanceof SourceSetEvent) {
 | 
				
			||||||
 | 
								if($user->is_admin() || !$event->image->is_locked()) {
 | 
				
			||||||
				$event->image->set_source($event->source);
 | 
									$event->image->set_source($event->source);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if($event instanceof LockSetEvent) {
 | 
				
			||||||
 | 
								if($user->is_admin()) {
 | 
				
			||||||
 | 
									log_debug("tag_edit", "Setting Image #{$event->image->id} lock to: {$event->locked}");
 | 
				
			||||||
 | 
									$event->image->set_locked($event->locked);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($event instanceof ImageDeletionEvent) {
 | 
							if($event instanceof ImageDeletionEvent) {
 | 
				
			||||||
			$event->image->delete_tags_from_image();
 | 
								$event->image->delete_tags_from_image();
 | 
				
			||||||
@ -91,12 +122,15 @@ class TagEdit implements Extension {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($event instanceof ImageInfoBoxBuildingEvent) {
 | 
							if($event instanceof ImageInfoBoxBuildingEvent) {
 | 
				
			||||||
			if($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) {
 | 
								if($this->can_tag($event->image)) {
 | 
				
			||||||
				$event->add_part($this->theme->get_tag_editor_html($event->image), 40);
 | 
									$event->add_part($this->theme->get_tag_editor_html($event->image), 40);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if($config->get_bool("source_edit_anon") || !$user->is_anonymous()) {
 | 
								if($this->can_source($event->image)) {
 | 
				
			||||||
				$event->add_part($this->theme->get_source_editor_html($event->image), 41);
 | 
									$event->add_part($this->theme->get_source_editor_html($event->image), 41);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if($user->is_admin()) {
 | 
				
			||||||
 | 
									$event->add_part($this->theme->get_lock_editor_html($event->image), 42);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($event instanceof SetupBuildingEvent) {
 | 
							if($event instanceof SetupBuildingEvent) {
 | 
				
			||||||
@ -108,14 +142,20 @@ class TagEdit implements Extension {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private function can_tag() {
 | 
						private function can_tag($image) {
 | 
				
			||||||
		global $config, $user;
 | 
							global $config, $user;
 | 
				
			||||||
		return $config->get_bool("tag_edit_anon") || !$user->is_anonymous();
 | 
							return (
 | 
				
			||||||
 | 
								($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) &&
 | 
				
			||||||
 | 
								($user->is_admin() || !$image->is_locked())
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private function can_source() {
 | 
						private function can_source($image) {
 | 
				
			||||||
		global $config, $user;
 | 
							global $config, $user;
 | 
				
			||||||
		return $config->get_bool("source_edit_anon") || !$user->is_anonymous();
 | 
							return (
 | 
				
			||||||
 | 
								($config->get_bool("source_edit_anon") || !$user->is_anonymous()) &&
 | 
				
			||||||
 | 
								($user->is_admin() || !$image->is_locked())
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private function mass_tag_edit($search, $replace) {
 | 
						private function mass_tag_edit($search, $replace) {
 | 
				
			||||||
 | 
				
			|||||||
@ -27,5 +27,10 @@ class TagEditTheme extends Themelet {
 | 
				
			|||||||
		$h_source = html_escape($image->get_source());
 | 
							$h_source = html_escape($image->get_source());
 | 
				
			||||||
		return "<tr><td>Source</td><td><input type='text' name='tag_edit__source' value='$h_source'></td></tr>";
 | 
							return "<tr><td>Source</td><td><input type='text' name='tag_edit__source' value='$h_source'></td></tr>";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function get_lock_editor_html(Image $image) {
 | 
				
			||||||
 | 
							$h_locked = $image->is_locked() ? " checked" : "";
 | 
				
			||||||
 | 
							return "<tr><td>Locked</td><td><input type='checkbox' name='tag_edit__locked'$h_locked></td></tr>";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 | 
				
			|||||||
@ -101,7 +101,7 @@ class ViewImageTheme extends Themelet {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected function build_image_editor(Image $image, $editor_parts) {
 | 
						protected function build_image_editor(Image $image, $editor_parts) {
 | 
				
			||||||
		if(count($editor_parts) == 0) return "";
 | 
							if(count($editor_parts) == 0) return ($image->is_locked() ? "<br>[Image Locked]" : "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(isset($_GET['search'])) {$h_query = "search=".url_escape($_GET['search']);}
 | 
							if(isset($_GET['search'])) {$h_query = "search=".url_escape($_GET['search']);}
 | 
				
			||||||
		else {$h_query = "";}
 | 
							else {$h_query = "";}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user