]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/hxsp/splitted/6.commands.p.pl
First version of hxsp (new version of UWOBO implemented in Perl by
[helm.git] / helm / hxsp / splitted / 6.commands.p.pl
diff --git a/helm/hxsp/splitted/6.commands.p.pl b/helm/hxsp/splitted/6.commands.p.pl
new file mode 100644 (file)
index 0000000..142acc5
--- /dev/null
@@ -0,0 +1,215 @@
+#################################################################################################
+#################################################################################################
+#################################################################################################
+# Commands subrutines
+#################################################################################################
+#################################################################################################
+#################################################################################################
+
+#################################################################################################
+# sub add
+# Usage: add($http_query);
+# Returns: values for HTTP::Response
+# Do: add stylesheet(s) to hash
+# Used by: daemon
+# Uses : addparsequery, addvalues, ok_replace,
+#        ok_print, synerror_print, operror_print
+#################################################################################################
+sub add
+{
+   my $http_query = shift(@_); # querystring
+   my $cont =""; # return value
+   my @binds; #values of binds passed via querystring
+   my $err; # error string
+   if ($err = addparsequery($http_query,\@binds)) { return synerror_print($err,$add_usage); }
+   else
+   {
+      foreach my $bind (@binds)
+      {
+         my ($a_key , $e_uri) = split(/,/,$bind,2);
+         my $une_uri = uri_unescape($e_uri);
+         if ($err = addvalues($a_key,$une_uri)) { $cont .= "$err\n"; }
+         else { $cont .= ok_replace("$s_add\n",$a_key,$une_uri); }
+      }#foreach
+      return ok_print($cont);
+   }
+}
+#################################################################################################
+
+#################################################################################################
+# sub remove
+# Usage: remove($http_query);
+# Returns: values for HTTP::Response
+# Do: remove stylesheet(s) from hash
+# Used by: daemon
+# Uses : reparsequery, getkeys, recheckvalues, removevalues,
+#        ok_print, synerror_print, operror_print
+#################################################################################################
+sub remove
+{
+   my $http_query = shift(@_); # querystring
+   my $rem_keys;
+   my $cont="";
+   my $err;
+   if ($http_query eq "")
+   {
+      my $i=0;
+      foreach my $rem_key (keys %stylesheet_hash)
+      {
+         $cont .= removevalues($rem_key);
+         $i++;
+      }
+      if ($i==0) { return operror_print($error{"re_no_sl"}); }
+   }
+   elsif ($err = reparsequery($http_query,$rem_keys)){return synerror_print($err,$remove_usage);}
+   else
+   {
+      foreach my $rem_key (split (/,/,$rem_keys))
+      {
+         if (my $err = recheckvalues($rem_key)) { $cont .= "$err\n"; }
+         else { $cont .= removevalues($rem_key); }
+      }
+   }
+   return ok_print($cont);
+}
+#################################################################################################
+
+#################################################################################################
+# sub reload
+# Usage: remove($http_query);
+# Returns: values for HTTP::Response
+# Do: remove stylesheet(s) from hash
+# Used by: daemon
+# Uses : reparsequery, getkeys, recheckvalues, removevalues,
+#        ok_print, synerror_print, operror_print
+#################################################################################################
+sub reload #reload stylesheet(s) from hash
+{
+   my $http_query = shift(@_);
+   my $rel_keys;
+   my @rel_k;
+   my $dr_cont = "";
+   if ($http_query eq "")
+   {
+      my $i=0;
+      foreach my $key (keys %stylesheet_hash)
+      {
+         if (my $err = reloadvalues($key))  {  return $dr_cont .= $err; }
+         else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);}
+         $i++;
+      }
+      if ($i==0) { return operror_print($error{"re_no_sl"}); }
+   }
+   elsif ($err = reparsequery($http_query,$rel_keys)){return synerror_print($err,$reload_usage);}
+   else
+   {
+      foreach my $key (split (/,/,$rel_keys))
+      {
+         if (my $err = reloadvalues($key))  {  return $dr_cont .= $err; }
+         else {$dr_cont .= ok_replace("$s_reload\n",$key,$stylesheet_hash{$key}[0]);}
+      }
+   }
+   return ok_print($dr_cont);
+}
+#################################################################################################
+
+sub apply #apply stylesheets
+{
+   my $http_query = shift(@_);
+   my $headers_ptr = shift(@_);
+   my $xmluri;
+   my @applykeys;
+   my %app_param;
+   my %app_prop;
+   my $results;
+   my $lastkey;
+   my $enc;
+
+   if (my $err=applyparsequery($http_query,\@applykeys,\%app_param,\%app_prop,$xmluri))
+   {
+      return synerror_print($err,$apply_usage);
+   }
+   elsif (my $err=applycheckvalues(\@applykeys)) { return operror_print($err); }
+   elsif (my $err=load_xml_doc($xmluri,$results)) { return operror_print($err); }
+   #apply
+   foreach my $applykey (@applykeys)
+   {
+      $lastkey=$applykey;
+      if (my $err=apply_style($applykey,\%{$app_param{$applykey}},$results))
+      {
+         return operror_print($err);
+      }
+   }#foreach
+   my $i=0;
+   while (my ($n, $v) = each %app_prop)
+   {
+      if (($n eq "method") or ($n eq "METHOD"))
+      {
+        if ($v eq 'html') { $headers_ptr->{'Content-Type'}='text/html'; }
+        elsif ($v eq 'text') { $headers_ptr->{'Content-Type'}='text/plain'; }
+        else { $headers_ptr->{'Content-Type'}='text/xml'; }
+      }
+      if (($n eq "encoding") or ($n eq "ENCODING"))
+      {
+        $headers_ptr->{'Content-Encoding'}=$v;
+        if ($v ne "UTF-8") { $enc = $v; }
+      }
+      if (($n eq "media-type") or ($n eq "MEDIA_TYPE") or ($n eq "MEDIA-TYPE"))
+      {
+        $headers_ptr->{'Content-Type'}=$v;
+      }
+      $i++;
+   }
+   if ($i == 0)
+   {
+      %$headers_ptr= ('Cache-Control' => 'no-cache','Pragma' => "no-cache",'Expires' => '0');
+      return get_results($lastkey,$results);
+   }
+   else
+   {
+      my $result;
+      $headers_ptr->{'Cache-Control'} = 'no-cache';
+      $headers_ptr->{'Pragma'} = "no-cache";
+      $headers_ptr->{'Expires'} = '0';
+      if ($headers_ptr->{'Content-Type'} eq 'text/html')
+      {
+         $result = get_results_html($results);
+      }
+      else
+      {
+         $result = get_results_prop($results);
+         if ($enc)
+         {
+           $result = decode($result,$enc);
+         }
+      }
+      return $result;
+   }
+}
+
+sub list #list all the stylesheet loaded
+{
+   my $cont="";
+   my $ind = 0;
+   foreach $key (keys %stylesheet_hash)
+   {
+      $cont .= ok_replace("$list\n",$key,$stylesheet_hash{$key}[0]);
+      $ind++;
+   }
+   if ($ind > 0) {   return ok_print($cont);  }
+   else { return ok_print($empty);  }
+}
+
+sub home #return Dispay active
+{
+   if ($_[0] ne "") { return synerror_print($error{"home_qs"},$all_usage); }
+   else {
+      return ok_print($home_message.$all_usage);
+   }
+}
+
+sub help #return html help
+{
+   if ($_[0] ne "") { return synerror_print($error{"help_qs"},$help_usage); }
+   return ok_print($help_message.$all_usage);
+}