PageRenderTime 37ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/server/model.soap.php

https://github.com/praaxe/damas-core
PHP | 297 lines | 221 code | 11 blank | 65 comment | 57 complexity | 4937935bd520f1a567efd80193b4ee45 MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. /**
  3. * SOAP web service of DAMAS software (damas-software.org)
  4. *
  5. * Copyright 2005-2012 Remy Lalanne
  6. *
  7. * This file is part of damas-core.
  8. *
  9. * damas-core is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation, either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * damas-core is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with damas-core. If not, see <http://www.gnu.org/licenses/>.
  21. *
  22. */
  23. session_start();
  24. include_once "service.php";
  25. include_once "../php/data_model_1.xml.php";
  26. damas_service::init_http();
  27. damas_service::accessGranted();
  28. damas_service::allowed( "model::" . arg("cmd") );
  29. header('Content-type: application/xml; charset=UTF-8');
  30. echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
  31. echo "<!-- generated by " . $_SERVER['SCRIPT_NAME'] . " -->\n";
  32. if( arg("xsl") )
  33. echo '<?xml-stylesheet type="text/xsl" href="' . arg("xsl") . '"?>' . "\n";
  34. echo '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">' . "\n";
  35. echo "\t<soap:Header>\n";
  36. $start_time = microtime();
  37. $err = $ERR_NOERROR;
  38. $ret = false;
  39. $cmd = arg("cmd");
  40. switch( $cmd )
  41. {
  42. case "createNode":
  43. if( is_null( arg('id') ) || is_null( arg('type') ) ){
  44. $err = $ERR_COMMAND; break;
  45. }
  46. $id = model::createNode( arg("id"), arg("type") );
  47. if( !$id ) $err = $ERR_NODE_CREATE;
  48. if( $id )
  49. $ret = model_xml::node( $id, 1, $NODE_TAG | $NODE_PRM );
  50. else
  51. $ret = false;
  52. break;
  53. case "duplicate":
  54. if( is_null( arg('id') ) ){
  55. $err = $ERR_COMMAND; break;
  56. }
  57. $id = model::copyBranch( arg("id"), false );
  58. if( !$id) $err = $ERR_NODE_CREATE;
  59. if( $id )
  60. $ret = model_xml::node( $id, 1, $NODE_TAG | $NODE_PRM );
  61. else
  62. $ret = false;
  63. break;
  64. case "removeNode":
  65. if( is_null( arg('id') ) ){
  66. $err = $ERR_COMMAND; break;
  67. }
  68. $ret = model::removeNode( arg("id") );
  69. if( !$ret ) $err = $ERR_NODE_DELETE;
  70. break;
  71. case "setKey":
  72. if( is_null( arg('id') ) || is_null( arg('name') ) || is_null( arg('value') ) ){
  73. $err = $ERR_COMMAND; break;
  74. }
  75. $ret = model::setKey( arg("id"), arg("name"), arg("value") );
  76. if( !$ret ) $err = $ERR_NODE_UPDATE;
  77. break;
  78. case "removeKey":
  79. if( is_null( arg('id') ) || is_null( arg('name') ) ){
  80. $err = $ERR_COMMAND; break;
  81. }
  82. $ret = model::removeKey( arg("id"), arg("name") );
  83. if( !$ret) $err = $ERR_NODE_UPDATE;
  84. break;
  85. case "move":
  86. if( is_null( arg('id') ) || is_null( arg('target') ) ){
  87. $err = $ERR_COMMAND; break;
  88. }
  89. $ret = model::move( arg("id"), arg("target") );
  90. if( !$ret) $err = $ERR_NODE_MOVE;
  91. break;
  92. case "tag":
  93. if( is_null( arg('id') ) || is_null( arg('name') ) ){
  94. $err = $ERR_COMMAND; break;
  95. }
  96. $ret = model::tag( arg("id"), arg("name") );
  97. if( !$ret ) $err = $ERR_NODE_UPDATE;
  98. break;
  99. case "untag":
  100. if( is_null( arg('id') ) || is_null( arg('name') ) ){
  101. $err = $ERR_COMMAND; break;
  102. }
  103. $ret = model::untag( arg("id"), arg("name") );
  104. if( !$ret) $err = $ERR_NODE_UPDATE;
  105. break;
  106. case "link":
  107. if( is_null( arg('src') ) || is_null( arg('tgt') ) )
  108. {
  109. $err = $ERR_COMMAND; break;
  110. }
  111. $ret = model::link( arg("src"), arg("tgt") );
  112. if( !$ret) $err = $ERR_NODE_UPDATE;
  113. break;
  114. case "unlink":
  115. if( is_null( arg('id') ) ){
  116. $err = $ERR_COMMAND; break;
  117. }
  118. $ret = model::unlink( arg("id") );
  119. if( !$ret) $err = $ERR_NODE_UPDATE;
  120. break;
  121. case "setType":
  122. if( is_null( arg('id') ) || is_null( arg('type') ) ){
  123. $err = $ERR_COMMAND; break;
  124. }
  125. $ret = model::setType( arg("id"), arg("type") );
  126. if( !$ret) $err = $ERR_NODE_UPDATE;
  127. break;
  128. case "setTags":
  129. if( is_null( arg('id') ) || is_null( arg('tags') ) ){
  130. $err = $ERR_COMMAND; break;
  131. }
  132. $ret = model::setTags( arg("id"), arg("tags") );
  133. if( !$ret ) $err = $ERR_NODE_UPDATE;
  134. break;
  135. case "setKeys":
  136. if( is_null( arg('id') ) || is_null( arg('old') ) || is_null ( arg('new') ) ){
  137. $err = $ERR_COMMAND; break;
  138. }
  139. $ret = model::setKeys( arg("id"), arg("old"), arg("new") );
  140. if( !$ret ) $err = $ERR_NODE_UPDATE;
  141. break;
  142. /*
  143. case "clean":
  144. $ret = model::clean();
  145. if( !$ret ) $err = $ERR_NODE_UPDATE;
  146. break;
  147. *
  148. /**
  149. *
  150. * XML functions
  151. * model_xml namespace
  152. *
  153. */
  154. case "ancestors":
  155. if( is_null( arg('id') ) ){
  156. $err = $ERR_COMMAND; break;
  157. }
  158. $ret = model_xml::multi( implode( ',', model::ancestors( arg('id') ) ), 1, $NODE_TAG | $NODE_PRM );
  159. break;
  160. case "searchKey": // should return array of ids (json array?)
  161. if( !arg('key') || !arg('value') ){
  162. $err = $ERR_COMMAND; break;
  163. }
  164. $array = model::searchKey( arg('key'), arg('value') );
  165. //echo sizeof($array);
  166. $ret = model_xml::multi( implode(',', $array), 1, $NODE_TAG | $NODE_PRM );
  167. if( !$ret ) $err = $ERR_NODE_ID;
  168. break;
  169. case "single":
  170. if( is_null( arg('id') ) ){
  171. $err = $ERR_COMMAND; break;
  172. }
  173. $ret = model_xml::node( arg( "id" ), 1, $NODE_TAG | $NODE_PRM );
  174. if( !$ret ) $err = $ERR_NODE_ID;
  175. break;
  176. case "children":
  177. if( is_null( arg('id') ) ){
  178. $err = $ERR_COMMAND; break;
  179. }
  180. $ret = model_xml::children( arg("id"), 1 );
  181. #if( !$ret) $err = $ERR_NODE_ID;
  182. break;
  183. case "multi":
  184. if( is_null( arg('id') ) ){
  185. $err = $ERR_COMMAND; break;
  186. }
  187. #$ret = xml_multi(arg("id"), arg("flags"));
  188. #$ret = xml_multi2(arg("id"));
  189. $ret = model_xml::multi( arg("id"), 1, $NODE_TAG | $NODE_PRM );
  190. if (!$ret)
  191. $err = $ERR_NODE_ID;
  192. break;
  193. case "graph":
  194. if( is_null( arg('id') ) ){
  195. $err = $ERR_COMMAND; break;
  196. }
  197. $ret = model_xml::graph( arg("id") );
  198. if (!$ret)
  199. $err = $ERR_NODE_ID;
  200. break;
  201. /**
  202. *
  203. * OTHER
  204. *
  205. */
  206. case "stats":
  207. $q = "SELECT COUNT(*) AS count FROM node;";
  208. $result = mysql_query($q);
  209. $row = mysql_fetch_array($result);
  210. $ret .= sprintf('<node_count>%s</node_count>', $row['count']);
  211. $q = "SELECT COUNT(*) AS count FROM `key`;";
  212. $result = mysql_query($q);
  213. $row = mysql_fetch_array($result);
  214. $ret .= sprintf('<node_param_count>%s</node_param_count>', $row['count']);
  215. $q = "SELECT COUNT(*) AS count FROM tag;";
  216. $result = mysql_query($q);
  217. $row = mysql_fetch_array($result);
  218. $ret .= sprintf('<node_tag_count>%s</node_tag_count>', $row['count']);
  219. $q = "SELECT COUNT(*) AS count FROM link;";
  220. $result = mysql_query($q);
  221. $row = mysql_fetch_array($result);
  222. $ret .= sprintf('<node_link_count>%s</node_link_count>', $row['count']);
  223. break;
  224. case "types":
  225. $q = "SELECT type, COUNT(*) AS count FROM node GROUP BY type ORDER BY type;";
  226. $result = mysql_query($q);
  227. while ($row = mysql_fetch_array($result)) {
  228. $ret .= sprintf('<type count="%s">%s</type>',
  229. $row['count'],
  230. htmlspecialchars($row['type'])
  231. );
  232. }
  233. break;
  234. case "tags":
  235. $q = "SELECT name, COUNT(*) AS count FROM tag GROUP BY name ORDER BY name;";
  236. $result = mysql_query($q);
  237. while ($row = mysql_fetch_array($result)) {
  238. $ret .= sprintf('<tag count="%s">%s</tag>',
  239. $row['count'],
  240. htmlspecialchars($row['name'])
  241. );
  242. }
  243. break;
  244. /*
  245. case "cascade":
  246. $ret = mysql_get(arg("id"), $depth);
  247. if (!$ret)
  248. $err = $ERR_NODE_ID;
  249. break;
  250. case "flatten":
  251. $flags = 15;
  252. $types = array("Task","task");
  253. $depth = 0;
  254. if(arg("flags")) $flags = arg("flags");
  255. if(arg("types")) $types = arg("types");
  256. if(arg("depth")) $depth = arg("depth");
  257. $ret = mysql_flatten(arg("id"), $flags, $types, $depth);
  258. if (!$ret)
  259. $err = $ERR_NODE_ID;
  260. break;
  261. case "spider":
  262. $ret = xml_spider(arg("id"), $depth);
  263. if (!$ret)
  264. $err = $ERR_NODE_ID;
  265. break;
  266. */
  267. default:
  268. header("HTTP/1.1: 400 Bad Request"); //ERR_COMMAND
  269. echo "Bad command";
  270. exit;
  271. }
  272. $exec_time = ceil((microtime() - $start_time) * 1000) + "ms";
  273. if( $err == $ERR_NOERROR )
  274. {
  275. $nolog = array( 'single', 'children', 'multi', 'stats', 'types', 'tags' );
  276. if( ! in_array( arg('cmd'), $nolog ) )
  277. damas_service::log_event();
  278. }
  279. echo soaplike_head($cmd,$err);
  280. echo "\t\t<execution_time>$exec_time</execution_time>\n";
  281. echo "\t</soap:Header>\n";
  282. echo "\t<soap:Body>\n";
  283. echo "\t\t<returnvalue>$ret</returnvalue>\n";
  284. echo "\t</soap:Body>\n";
  285. echo "</soap:Envelope>\n";
  286. ?>