PageRenderTime 57ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/saf/lib/XML/Browser.php

https://github.com/lux/sitellite
PHP | 265 lines | 178 code | 53 blank | 34 comment | 21 complexity | be75daf1802a1334254e7d8f9812c181 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, Apache-2.0, GPL-3.0
  1. <?php
  2. include_once ('../../init.php');
  3. /**
  4. * @package XML
  5. */
  6. class XMLBrowser {
  7. var $doc;
  8. var $error;
  9. function XMLBrowser (&$doc) {
  10. $this->doc =& $doc;
  11. }
  12. function set ($params = array (), $val = '') {
  13. if (! empty ($val)) {
  14. $this->{$params} = $val;
  15. } else {
  16. foreach ($params as $key => $value) {
  17. $this->{$key} = $value;
  18. }
  19. }
  20. }
  21. function browse ($path, $visible, $offset = 0, $limit = 10) {
  22. global $intl, $loader;
  23. $loader->import ('saf.Database.Pager');
  24. $output = '';
  25. $res = $this->doc->query ($path);
  26. if (! is_array ($res)) {
  27. $this->error = $this->doc->error;
  28. return 0;
  29. }
  30. $pager = new Pager;
  31. printf ('<p>%s</p>', $pager->link ($this->browseLink, $limit, $offset, count ($res)));
  32. // create table header
  33. $output .= "<table border='1' cellpadding='5'>\n";
  34. $output .= "\t<tr>\n";
  35. $output .= "\t\t<th><input type='submit' name='action' value='" . $intl->get ('Delete') . "' /></th>\n";
  36. $output .= "\t\t<th><input type='submit' value='" . $intl->get ('Select All') . "' /></th>\n";
  37. foreach ($visible as $node) {
  38. $output .= "\t\t<th>" . ucwords (str_replace ('_', ' ', $node)) . "</th>\n";
  39. }
  40. $output .= "\t</tr>\n";
  41. for ($i = $offset; $i < ($offset + $limit); $i++) {
  42. if (! is_object ($res[$i])) {
  43. break;
  44. }
  45. $row = $res[$i]->makeObj ();
  46. $path = urlencode ($res[$i]->path ());
  47. $output .= "\t<tr>\n";
  48. $output .= "\t\t<td align='center'>";
  49. $output .= "<input type='checkbox' name='del_items[]' value='" . $path . "' />";
  50. // $output .= $intl->get ('Delete');
  51. $output .= "</td>\n";
  52. $output .= "\t\t<td>";
  53. $output .= "<a href='" . $this->editLink . $path . "'>";
  54. $output .= $intl->get ('Edit');
  55. $output .= '</a>';
  56. $output .= ' | ';
  57. $output .= "<a href='" . $this->downloadLink . $path . "'>";
  58. $output .= $intl->get ('Download');
  59. $output .= '</a>';
  60. $output .= "</td>\n";
  61. foreach ($visible as $node) {
  62. $output .= "\t\t<td>" . $row->{$node} . "</td>\n";
  63. }
  64. $output .= "\t</tr>\n";
  65. }
  66. // create table footer
  67. $output .= "</table>\n";
  68. return $output;
  69. }
  70. function add ($parentPath, $types, $template) {
  71. }
  72. function editable ($path, $types = array (), $template = '', $remember = array ()) {
  73. global $loader, $cgi, $intl;
  74. $loader->import ('saf.MailForm');
  75. $form = new MailForm;
  76. if (! empty ($template)) {
  77. $form->template = $template;
  78. }
  79. $res = $this->doc->query ($path);
  80. $res = array_shift ($res);
  81. if (! is_object ($res)) {
  82. $this->error = $this->doc->error;
  83. return false;
  84. }
  85. $row = $res->makeObj ();
  86. foreach (get_object_vars ($row) as $key => $value) {
  87. if ($key == 'attrs') {
  88. continue;
  89. }
  90. if (isset ($types[$key])) {
  91. $type = $types[$key];
  92. } else {
  93. $type = 'text';
  94. }
  95. $w =& $form->addWidget ($type, $key);
  96. $w->setValue ($value);
  97. }
  98. foreach ($remember as $rem) {
  99. $w =& $form->addWidget ('hidden', $rem);
  100. $w->setValue ($cgi->{$rem});
  101. }
  102. $w =& $form->addWidget ('msubmit', 'submit_button');
  103. $b =& $w->getButton ();
  104. $b->setValues ($intl->get ('Update'));
  105. $b =& $w->addButton ('submit_button', $intl->get ('Cancel'));
  106. $b->extra = "onclick='window.history.go (-1); return false'";
  107. if ($form->invalid ($cgi)) {
  108. $form->setValues ($cgi);
  109. return $form->show ();
  110. } else {
  111. $form->setValues ($cgi);
  112. $vals = $form->getValues ();
  113. return $vals;
  114. }
  115. }
  116. function delete ($paths) {
  117. }
  118. }
  119. $loader->import ('saf.XML.Sloppy');
  120. $loader->import ('saf.I18n');
  121. $loader->import ('saf.CGI');
  122. $loader->import ('saf.Template');
  123. $simple = new SimpleTemplate;
  124. $cgi = new CGI;
  125. if (! isset ($cgi->offset)) {
  126. $cgi->offset = 0;
  127. }
  128. if (! isset ($cgi->view)) {
  129. $cgi->view = 'browse';
  130. }
  131. $intl = new I18n ();
  132. $sloppy = new SloppyDOM ();
  133. $doc = $sloppy->parseFromFile ('../../../sitellite/inc/lang/languages.xml');
  134. $xbrowser = new XMLBrowser ($doc);
  135. $xbrowser->set (array (
  136. 'editLink' => $PHP_SELF . '?view=edit&path=',
  137. 'addLink' => $PHP_SELF . '?view=add&path=',
  138. 'browseLink' => $PHP_SELF . '?',
  139. 'downloadLink' => $PHP_SELF . '?view=download&path=',
  140. ));
  141. //echo $xbrowser->browse ('/languages/lang', array ('name', 'code', 'charset'), $cgi->offset, 2);
  142. //printf ('<p>%s</p>', $doc->root->children[0]->path ());
  143. /* $res = $xbrowser->editable ('/languages[0]/lang[0]');
  144. if (is_array ($res)) {
  145. // form has been submitted
  146. echo '<pre>';
  147. print_r ($res);
  148. echo '</pre>';
  149. } elseif ($res === false) {
  150. printf ('<p>%s</p>', $xbrowser->error);
  151. } else {
  152. echo $res;
  153. } */
  154. //echo '<pre>';
  155. //print_r ($doc);
  156. //echo htmlentities_compat (join ('', file ('../../../sitellite/inc/lang/languages.xml')));
  157. //echo '</pre>';
  158. if ($cgi->view == 'browse') {
  159. echo $xbrowser->browse ('/languages/lang', array ('name', 'code', 'charset'), $cgi->offset, 2);
  160. } elseif ($cgi->view == 'edit') {
  161. $res = $xbrowser->editable ($cgi->path, array (), '', array ('view', 'path'));
  162. if (is_array ($res)) {
  163. // form has been submitted
  164. echo '<pre>';
  165. print_r ($res);
  166. echo '</pre>';
  167. } elseif ($res === false) {
  168. printf ('<p>%s</p>', $xbrowser->error);
  169. } else {
  170. echo $res;
  171. }
  172. } elseif ($cgi->view == 'download') {
  173. $res = $doc->query ($cgi->path);
  174. $xml = $res[0]->write ();
  175. header ("content-type: application/x-octet-stream");
  176. header ("content-disposition: attachment; filename=" . preg_replace ('/[^a-zA-Z0-9_-]+/', '_', $cgi->path));
  177. header ("content-length: " . strlen ($xml));
  178. echo $xml;
  179. exit;
  180. }
  181. echo '<pre>';
  182. //print_r ($doc);
  183. echo htmlentities_compat (join ('', file ('../../../sitellite/inc/lang/languages.xml')));
  184. echo '</pre>';
  185. $loader->import ('saf.Database');
  186. $db = new Database ('MySQL:www.sitellite3.lo:DBNAME', 'USER', 'PASS');
  187. $tables = array ();
  188. $tables['sitellite_page'] = $db->table ('sitellite_page', 'id');
  189. $tables['sitellite_page']->getInfo ();
  190. $tables['sitellite_page']->changeType ('below_page', 'ref', 'sitellite_page');
  191. $tables['sitellite_page']->columns['below_page']->addblank = true;
  192. $tables['sitellite_page']->columns['below_page']->display_column = 'title';
  193. $tables['sitellite_page']->addFacet ('Section', 'below_page');
  194. echo $tables['sitellite_page']->showFacet ($tables['sitellite_page']->facets[0]);
  195. //echo '<pre>';
  196. //print_r ($tables['sitellite_page']->facets);
  197. //echo '</pre>';
  198. $tables['sitellite_news'] = $db->table ('sitellite_news', 'id');
  199. $tables['sitellite_news']->getInfo ();
  200. $tables['sitellite_news']->addFacet ('Date', 'date');
  201. echo $tables['sitellite_news']->showFacet ($tables['sitellite_news']->facets[0]);
  202. //echo '<pre>';
  203. //print_r ($tables['sitellite_news']->facets);
  204. //echo '</pre>';
  205. $tables['t'] = $db->table ('t', 'id');
  206. $tables['t']->getInfo ();
  207. $tables['t']->addFacet ('Time', 'tdot');
  208. echo $tables['t']->showFacet ($tables['t']->facets[0]);
  209. //echo '<pre>';
  210. //print_r ($tables['sitellite_news']->facets);
  211. //echo '</pre>';
  212. ?>