allow add.pl to run as fcgi
authorTony Cook <tony@develop-help.com>
Sat, 27 Jul 2013 03:33:44 +0000 (13:33 +1000)
committerTony Cook <tony@develop-help.com>
Fri, 14 Mar 2014 07:45:45 +0000 (18:45 +1100)
MANIFEST
site/cgi-bin/admin/add.fcgi [new file with mode: 0755]
site/cgi-bin/admin/add.pl
site/cgi-bin/modules/BSE/UI/AdminEdit.pm [new file with mode: 0644]

index 82ae79e..660d40c 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -18,6 +18,7 @@ schema/bse_sp.sql
 schema/mssql.sql
 schema/mysql_build.pl          # builds site/util/mysql.str
 schema/site_users_to_members.sql
+site/cgi-bin/admin/add.fcgi
 site/cgi-bin/admin/add.pl
 site/cgi-bin/admin/admin.pl
 site/cgi-bin/admin/admin_seminar.pl
@@ -250,6 +251,7 @@ site/cgi-bin/modules/BSE/ThumbLow.pm
 site/cgi-bin/modules/BSE/UI.pm
 site/cgi-bin/modules/BSE/UI/AdminAudit.pm
 site/cgi-bin/modules/BSE/UI/AdminDispatch.pm
+site/cgi-bin/modules/BSE/UI/AdminEdit.pm
 site/cgi-bin/modules/BSE/UI/AdminImageClean.pm
 site/cgi-bin/modules/BSE/UI/AdminImporter.pm
 site/cgi-bin/modules/BSE/UI/AdminIPAddress.pm
diff --git a/site/cgi-bin/admin/add.fcgi b/site/cgi-bin/admin/add.fcgi
new file mode 100755 (executable)
index 0000000..a42a754
--- /dev/null
@@ -0,0 +1,9 @@
+#!/usr/bin/perl -w
+# -d:ptkdb
+BEGIN { $ENV{DISPLAY} = '192.168.32.54:0.0' }
+use strict;
+use FindBin;
+use lib "$FindBin::Bin/../modules";
+use BSE::UI;
+
+BSE::UI->run_fcgi("BSE::UI::AdminEdit");
index 2f540e1..a4d7147 100755 (executable)
@@ -4,87 +4,6 @@ BEGIN { $ENV{DISPLAY} = '192.168.32.54:0.0' }
 use strict;
 use FindBin;
 use lib "$FindBin::Bin/../modules";
-use Articles;
-use Article;
-use BSE::DB;
-use BSE::Request;
-use BSE::Edit::Base;
-use Carp qw'verbose';
-use Carp 'confess';
-
-#  $SIG{__DIE__} = 
-#    sub { 
-#      if ($@ =~ /^ENOIMPL\b/) {
-#        die $@;
-#      }
-#      else {
-#        confess $@;
-#      }
-#    };
-
-my $req = BSE::Request->new;
-my $cgi = $req->cgi;
-my $cfg = $req->cfg;
-my $id = $cgi->param('id');
-my $articles = 'Articles'; # for a later switch to proper objects, I hope
-my $result;
-if (defined $id && $id =~ /\d/ && $id == -1) {
-  my $obj = get_class('BSE::Edit::Site', $cfg)
-    or die "Cannot get sections class";
-  $result = $obj->edit_sections($req, $articles);
-}
-elsif (my ($obj, $article) = BSE::Edit::Base->article_class_id($id, $articles, $cfg)) {
-  $result = $obj->article_dispatch($req, $article, $articles);
-}
-elsif ($id && $req->is_ajax) {
-  $result = $req->json_content
-    (
-     success => 0,
-     error_code => "UNKNOWN",
-     message => "Unknown article id $id"
-    );
-}
-else {
-  # look for a type
-  my $obj;
-  my $type = $cgi->param('type');
-  if ($type && $type !~ /\W/) {
-    my $class = "BSE::Edit::$type";
-    $obj = get_class($class, $cfg);
-  }
-  unless ($obj) {
-    my $parentid = $cgi->param('parentid');
-    my $parent;
-    if (($obj, $parent) = BSE::Edit::Base->article_class_id($parentid, $articles, $cfg)) {
-      if (my ($class) = $obj->child_types($parent)) {
-       $obj = get_class($class, $cfg);
-      }
-      else {
-       undef $obj;
-      }
-    }
-  }
-  unless ($obj) {
-    # last try
-    $obj = get_class("BSE::Edit::Article", $cfg)
-      or die "Cannot get article class!!";
-  }
-  $result = $obj->noarticle_dispatch($req, $articles);
-}
-
-$req->output_result($result);
-
-sub get_class {
-  my ($class, $cfg) = @_;
-
-  (my $file = $class . ".pm") =~ s!::!/!g;
-  eval {
-    require $file;
-  };
-  if ($@) {
-    print STDERR "Loading $class: $@\n";
-    return;
-  }
-  return $class->new(cfg=>$cfg, db=>BSE::DB->single);
-}
+use BSE::UI;
 
+BSE::UI->run("BSE::UI::AdminEdit");
diff --git a/site/cgi-bin/modules/BSE/UI/AdminEdit.pm b/site/cgi-bin/modules/BSE/UI/AdminEdit.pm
new file mode 100644 (file)
index 0000000..0c5008a
--- /dev/null
@@ -0,0 +1,78 @@
+package BSE::UI::AdminEdit;
+use strict;
+use base 'BSE::UI::AdminDispatch';
+use BSE::Edit::Base;
+use Articles;
+
+our $VERSION = "1.000";
+
+sub dispatch {
+  my ($self, $req) = @_;
+
+  my $cgi = $req->cgi;
+  my $cfg = $req->cfg;
+  my $id = $cgi->param('id');
+  my $articles = 'Articles'; # for a later switch to proper objects, I hope
+  my $result;
+  if (defined $id && $id =~ /\d/ && $id == -1) {
+    my $obj = get_class('BSE::Edit::Site', $cfg)
+      or die "Cannot get sections class";
+    $result = $obj->edit_sections($req, $articles);
+  }
+  elsif (my ($obj, $article) = BSE::Edit::Base->article_class_id($id, $articles, $cfg)) {
+    $result = $obj->article_dispatch($req, $article, $articles);
+  }
+  elsif ($id && $req->is_ajax) {
+    $result = $req->json_content
+      (
+       success => 0,
+       error_code => "UNKNOWN",
+       message => "Unknown article id $id"
+      );
+  }
+  else {
+    # look for a type
+    my $obj;
+    my $type = $cgi->param('type');
+    if ($type && $type !~ /\W/) {
+      my $class = "BSE::Edit::$type";
+      $obj = get_class($class, $cfg);
+    }
+    unless ($obj) {
+      my $parentid = $cgi->param('parentid');
+      my $parent;
+      if (($obj, $parent) = BSE::Edit::Base->article_class_id($parentid, $articles, $cfg)) {
+       if (my ($class) = $obj->child_types($parent)) {
+         $obj = get_class($class, $cfg);
+       }
+       else {
+         undef $obj;
+       }
+      }
+    }
+    unless ($obj) {
+      # last try
+      $obj = get_class("BSE::Edit::Article", $cfg)
+       or die "Cannot get article class!!";
+    }
+    $result = $obj->noarticle_dispatch($req, $articles);
+  }
+
+  return $result;
+}
+
+sub get_class {
+  my ($class, $cfg) = @_;
+
+  (my $file = $class . ".pm") =~ s!::!/!g;
+  eval {
+    require $file;
+  };
+  if ($@) {
+    print STDERR "Loading $class: $@\n";
+    return;
+  }
+  return $class->new(cfg=>$cfg, db=>BSE::DB->single);
+}
+
+1;