diff --git a/core/imageboard.pack.php b/core/imageboard.pack.php index e96941e5..8b4e347a 100644 --- a/core/imageboard.pack.php +++ b/core/imageboard.pack.php @@ -36,6 +36,7 @@ class Image { var $owner_ip; var $posted; var $source; + var $locked; /** * 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)); } + + 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. * diff --git a/ext/tag_edit/main.php b/ext/tag_edit/main.php index f0f86811..9cea8ced 100644 --- a/ext/tag_edit/main.php +++ b/ext/tag_edit/main.php @@ -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 { var $theme; @@ -58,23 +75,37 @@ class TagEdit implements Extension { } if($event instanceof ImageInfoSetEvent) { - if($this->can_tag()) { + if($this->can_tag($event->image)) { 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'])); } } else { $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) { - $event->image->set_tags($event->tags); + if($user->is_admin() || !$event->image->is_locked()) { + $event->image->set_tags($event->tags); + } } if($event instanceof SourceSetEvent) { - $event->image->set_source($event->source); + if($user->is_admin() || !$event->image->is_locked()) { + $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) { @@ -91,12 +122,15 @@ class TagEdit implements Extension { } 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); } - 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); } + if($user->is_admin()) { + $event->add_part($this->theme->get_lock_editor_html($event->image), 42); + } } if($event instanceof SetupBuildingEvent) { @@ -108,14 +142,20 @@ class TagEdit implements Extension { } - private function can_tag() { + private function can_tag($image) { 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; - 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) { diff --git a/ext/tag_edit/theme.php b/ext/tag_edit/theme.php index 4441f908..3023d388 100644 --- a/ext/tag_edit/theme.php +++ b/ext/tag_edit/theme.php @@ -27,5 +27,10 @@ class TagEditTheme extends Themelet { $h_source = html_escape($image->get_source()); return "