summaryrefslogtreecommitdiff
path: root/utils/refs.php
diff options
context:
space:
mode:
Diffstat (limited to 'utils/refs.php')
-rw-r--r--utils/refs.php139
1 files changed, 139 insertions, 0 deletions
diff --git a/utils/refs.php b/utils/refs.php
new file mode 100644
index 0000000..0589cff
--- /dev/null
+++ b/utils/refs.php
@@ -0,0 +1,139 @@
+<?php /* -*- Mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+
+include_once($UTIL_DIR . "/modules.php");
+
+class Ref {
+ public $mod;
+ public $id;
+
+ function show()
+ {
+ $str = "";
+ $module = loadModule($this->mod);
+ if($module && method_exists($module, "showRef")) {
+ $str .= "<div class=\"ref\">\n";
+ $str .= /*"[".$this->mod."] - ".*/$module->showRef($this->id);
+ $str .= "</div>\n";
+ }
+ return $str;
+ }
+
+ function Ref($mod, $id)
+ {
+ $this->mod = $mod;
+ $this->id = $id;
+ }
+}
+
+class Refs {
+ public $refs = array();
+
+ function show()
+ {
+ $str = "";
+ $str .= "<div class=\"refs\">\n";
+ $str .= " <div class=\"refs_header\">References:</div>\n";
+ foreach($this->refs as $ref) {
+ $str .= $ref->show();
+ }
+ $str .= "</div>";
+ return $str;
+ }
+
+ public function write($fp, $indent)
+ {
+ if($this->refs) {
+ fwrite($fp, $indent."<refs>\n");
+ foreach($this->refs as $ref) {
+ fwrite($fp, $indent." <ref mod=\"".$ref->mod."\" id=\"".$ref->id."\"/>\n");
+ }
+ fwrite($fp, $indent."</refs>\n");
+ }
+ }
+
+ public function add($ref)
+ {
+ array_push($this->refs, $ref);
+ }
+
+ public function Refs($refsnode = NULL)
+ {
+ if(!$refsnode) return;
+
+ $refs = $refsnode->getElementsByTagName('ref');
+ foreach($refs as $r) {
+ $ref = new Ref($r->getAttribute('mod'),
+ $r->getAttribute('id'));
+ $this->add($ref);
+ }
+
+ }
+
+}
+
+function refsAddWidget($form, $refslist)
+{
+ $form->addWidget(new ListEditor("References:", "refslist",
+ new LineEdit("ID", "ref_id"),
+ new LineEdit("Module", "ref_mod"),
+ $refslist, true));
+}
+
+function refsAddHiddenWidget($form, $lst)
+{
+ $vallst = array();
+ $vallst["refslist_hidden"] = serialize(refsGetCommaListFromRefs($lst));
+ $form->addWidget(new Hidden($vallst));
+}
+
+function refsGetFromHidden($vals)
+{
+ $refslist = unserialize($vals["refslist_hidden"]);
+ return $refslist;
+}
+
+function refsGetCommaListFromRefs($refs)
+{
+ $lst = array();
+ foreach($refs->refs as $ref) {
+ array_push($lst, $ref->mod.":".$ref->id);
+ }
+ return $lst;
+}
+
+function refsGetRefsFromHidden($vals)
+{
+ $r = refsGetFromHidden($vals);
+
+ $refs = new Refs();
+ foreach($r as $k => $val) {
+ $v = explode(":", $val);
+ $refmod = $v[0];
+ $refid = $v[1];
+ $ref = new Ref($refmod, $refid);
+ $refs->add($ref);
+ }
+
+ return $refs;
+}
+
+function refsGetRefsFromWidget()
+{
+ $lst = refsGetValuesFromWidget();
+ $refs = new Refs();
+ foreach($lst as $val) {
+ $v = explode(":", $val);
+ $refmod = $v[0];
+ $refid = $v[1];
+ $ref = new Ref($refmod, $refid);
+ $refs->add($ref);
+ }
+ return $refs;
+}
+
+function refsGetValuesFromWidget()
+{
+ global $GLOBALS;
+ return $GLOBALS["refslist"];
+}
+?> \ No newline at end of file