OSDN Git Service

削除されたページを完全に削除できるようにした。
authortakezoe <takezoe@users.osdn.me>
Tue, 4 Oct 2011 17:21:14 +0000 (17:21 +0000)
committertakezoe <takezoe@users.osdn.me>
Tue, 4 Oct 2011 17:21:14 +0000 (17:21 +0000)
plugin/admin/AdminDeletedPageHandler.pm

index a2db221..a74d8da 100644 (file)
@@ -19,12 +19,21 @@ sub new {
 }
 
 #==============================================================================
+# ºï½ü¤µ¤ì¤¿¥Ú¡¼¥¸¤òµ­Ï¿¤¹¤ë¥Õ¥¡¥¤¥ë¤Î¥Ñ¥¹¤òÊÖ¤¹´Ø¿ô
+#==============================================================================
+sub _get_deleted_file {
+       my $wiki = shift;
+       return $wiki->config('log_dir')."/".$DELETED_FILE
+}
+
+#==============================================================================
 # ¥Ú¡¼¥¸¤Îºï½ü»þ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë
 #==============================================================================
 sub hook {
        my $self = shift;
        my $wiki = shift;
-       open(FILE, ">>".$wiki->config('log_dir')."/".$DELETED_FILE);
+       open(FILE, ">>".&_get_deleted_file($wiki));
+       binmode(FILE);
        print FILE $wiki->get_CGI()->param("page")."\t".time()."\n";
        close(FILE);
 }
@@ -38,6 +47,11 @@ sub do_action {
        my $cgi   = $wiki->get_CGI;
        if($cgi->param('revert')){
                $self->revert($wiki);
+               $wiki->redirectURL($wiki->create_url({ action=>"ADMINDELETED"}));
+       }
+       if($cgi->param('forget')){
+               $self->forget($wiki);
+               $wiki->redirectURL($wiki->create_url({ action=>"ADMINDELETED"}));
        }
        return $self->deleted_page_list($wiki);
 }
@@ -55,6 +69,52 @@ sub revert {
 }
 
 #==============================================================================
+# ¥Ú¡¼¥¸¤ò´°Á´¤Ëºï½ü
+#==============================================================================
+sub forget {
+       my $self  = shift;
+       my $wiki  = shift;
+       my @selected_pages = $wiki->get_CGI()->param('pages');
+       my $deleted_file = &_get_deleted_file($wiki);
+       
+       # ºï½ü¥Ú¡¼¥¸¤òµ­Ï¿¤¹¤ë¥Õ¥¡¥¤¥ë¤«¤éÁªÂò¤µ¤ì¤¿¥Ú¡¼¥¸¤òºï½ü
+       Util::file_lock($deleted_file);
+       open(FILE, $deleted_file);
+       my $pages = {};
+       my $buf = "";
+       while(my $LINE = <FILE>){
+               my ($page, $mod) = split(/\t/, Util::trim($LINE));
+               unless($wiki->page_exists($page)){
+                       my $selected = 0;
+                       foreach my $selected_page (@selected_pages){
+                               if($page eq $selected_page){
+                                       $selected = 1;
+                                       last;
+                               }
+                       }
+                       if($selected == 0){
+                               $buf .= $page."\t".$mod."\n";
+                       }
+               }
+       }
+       close(FILE);
+       
+       open(FILE, ">".$deleted_file);
+       binmode(FILE);
+       print FILE $buf;
+       close(FILE);
+       Util::file_unlock($deleted_file);
+
+       # ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤âºï½ü
+       foreach my $selected_page (@selected_pages){
+               my @backup_files = glob(&Util::make_filename($wiki->config('backup_dir'), &Util::url_encode($selected_page), "*"));
+               foreach my $backup_file (@backup_files){
+                       unlink($backup_file);
+               }
+       }
+}
+
+#==============================================================================
 # ºï½ü¤µ¤ì¤¿¥Ú¡¼¥¸¤Î°ìÍ÷
 #==============================================================================
 sub deleted_page_list {
@@ -73,10 +133,10 @@ sub deleted_page_list {
                </tr>
        |;
        
-       open(FILE, $wiki->config('log_dir')."/".$DELETED_FILE);
+       open(FILE, &_get_deleted_file($wiki));
        my $pages = {};
        while(my $LINE = <FILE>){
-               my ($page, $mod) = split(/\t/, $LINE);
+               my ($page, $mod) = split(/\t/, Util::trim($LINE));
                unless($wiki->page_exists($page)){
                        $pages->{$page} = $mod;
                }
@@ -95,7 +155,8 @@ sub deleted_page_list {
        
        $buf .= qq|</table>
                <input type="hidden" name="action" value="ADMINDELETED">
-               <input type="submit" name="revert" value="¥Á¥§¥Ã¥¯¤·¤¿¥Ú¡¼¥¸¤òÉü¸µ¤¹¤ë">
+               <input type="submit" name="revert" value="Éü¸µ">
+               <input type="submit" name="forget" value="´°Á´¤Ëºï½ü">
        </form>|;
        
        $wiki->set_title("ºï½ü¤µ¤ì¤¿¥Ú¡¼¥¸");