PageRenderTime 49ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/server/asset.soap.php

https://github.com/praaxe/damas-core
PHP | 271 lines | 228 code | 12 blank | 31 comment | 39 complexity | 7fa5f56210ad654c743aa0af6c06bf5c MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. /**
  3. * Author Remy Lalanne
  4. * Copyright (c) 2005-2011 Remy Lalanne
  5. */
  6. session_start();
  7. include_once "service.php";
  8. include_once "../php/DAM.php";
  9. include_once "../php/data_model_1.xml.php";
  10. include_once "FileVersion/lib.asset.php";
  11. include_once "FileSystem/lib.file.php";
  12. damas_service::init_http();
  13. damas_service::accessGranted();
  14. damas_service::allowed( "asset::" . arg("cmd") );
  15. $err = $ERR_NOERROR;
  16. $cmd = arg("cmd");
  17. $ret = false;
  18. header('Content-type: application/xml; charset=UTF-8');
  19. echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
  20. echo "<!-- generated by ".$_SERVER['SCRIPT_NAME']." -->\n";
  21. echo '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">'."\n";
  22. echo "\t<soap:Header>\n";
  23. $start_time = microtime();
  24. switch( $cmd )
  25. {
  26. case "getElementById":
  27. $id = model::searchKey('id', arg('id'));
  28. $id = $id[0];
  29. $ret = model_xml::node($id, 1, $NODE_TAG | $NODE_PRM);
  30. if (!$ret)
  31. $err = $ERR_NODE_ID;
  32. break;
  33. case "time":
  34. if( ! model::setKey( arg("id"), "time", time() ) )
  35. $err = $ERR_NODE_UPDATE;
  36. break;
  37. case "write":
  38. $ret = DAM::write( arg("id"), arg("text") );
  39. if (!$ret)
  40. $err = $ERR_NODE_CREATE;
  41. break;
  42. case "lock":
  43. if( model::hastag( arg("id"), "lock" ) )
  44. {
  45. $err = $ERR_NODE_UPDATE;
  46. break;
  47. }
  48. $ret = model::tag( arg("id"), 'lock' );
  49. $ret &= model::setKey( arg("id"), "lock_user", getUser() );
  50. $ret &= model::setKey( arg("id"), 'lock_text', arg("comment") );
  51. if (!$ret)
  52. $err = $ERR_ASSET_LOCK;
  53. break;
  54. case "unlock":
  55. if( asset_ismylock( arg("id") ) )
  56. {
  57. $ret = model::untag( arg("id"), 'lock' );
  58. model::removeKey( arg("id"), 'lock_user' );
  59. model::removeKey( arg("id"), 'lock_text' );
  60. }
  61. if (!$ret)
  62. $err = $ERR_NODE_UPDATE;
  63. break;
  64. case "upload_set_image":
  65. if( is_uploaded_file( $_FILES['file']['tmp_name'] ) )
  66. {
  67. $extension = pathinfo( $_FILES['file']['name'], PATHINFO_EXTENSION );
  68. if( move_uploaded_file( $_FILES['file']['tmp_name'], $assetsLCL . '/.damas/images/' . arg("id") . '.' . $extension ) )
  69. {
  70. model::setKey( arg("id"), 'image', '/.damas/images/' . arg("id") . '.' . $extension );
  71. break;
  72. }
  73. }
  74. $err = $ERR_ASSET_UPDATE;
  75. break;
  76. case "upload_create_asset":
  77. if( is_uploaded_file( $_FILES['file']['tmp_name'] ) )
  78. {
  79. $file = model::getKey( arg( 'id' ), 'dir' ) . '/' . $_FILES['file']['name'];
  80. if( move_uploaded_file( $_FILES['file']['tmp_name'], $assetsLCL . $file ) )
  81. {
  82. $id = model::createNode( arg( 'id' ), "asset" );
  83. model::setKey( $id, 'file', $file );
  84. model::setKey( $id, 'text', arg( 'message' ) );
  85. model::setKey( $id, 'user', getUser() );
  86. model::setKey( $id, 'time', time() );
  87. $ret = model_xml::node( $id, 1, $NODE_TAG | $NODE_PRM );
  88. break;
  89. }
  90. }
  91. $err = $ERR_NODE_CREATE;
  92. $ret = false;
  93. break;
  94. case "upload":
  95. if( model::hastag( arg( 'id' ), 'lock' ) )
  96. {
  97. if( model::getKey( arg( 'id' ), 'lock_user' ) != getUser() )
  98. {
  99. $err = $ERR_ASSET_UPDATE;
  100. echo sprintf( "<error>asset is locked for the user %s</error>",
  101. model::getKey( arg( 'id' ), 'lock_user' )
  102. );
  103. $ret = false;
  104. break;
  105. }
  106. }
  107. $path = $_FILES['file']['tmp_name'];
  108. if( !is_uploaded_file( $path ) )
  109. {
  110. $err = $ERR_ASSET_UPDATE;
  111. echo "<error>is_uploaded_file() error</error>";
  112. $ret = false;
  113. break;
  114. }
  115. if( !assets::asset_upload( arg("id"), $path, arg("message") ) )
  116. {
  117. $err = $ERR_ASSET_UPDATE;
  118. $ret = false;
  119. echo sprintf( "<error>Permission denied to copy %s to %s</error>",
  120. $path,
  121. $assetsLCL . model::getKey( arg( 'id' ), 'file' )
  122. );
  123. }
  124. break;
  125. case "version_backup":
  126. $id = assets::version_backup( arg("id") );
  127. if( !$id ) $err = $ERR_NODE_CREATE;
  128. if( $id )
  129. $ret = model_xml::node( $id, 1, $NODE_TAG | $NODE_PRM );
  130. else
  131. $ret = false;
  132. break;
  133. case "version_increment":
  134. $ret = assets::version_increment( arg("id"), arg("message") );
  135. if (!$ret)
  136. $err = $ERR_ASSET_UPDATE;
  137. break;
  138. case "version_increment2":
  139. if( is_null( arg('id') ) || is_null( arg('message') ) ){
  140. $err = $ERR_COMMAND; break;
  141. }
  142. $ret = assets::version_increment2( arg("id"), arg("message") );
  143. if (!$ret)
  144. $err = $ERR_ASSET_UPDATE;
  145. break;
  146. case "recycle":
  147. $ret = DAM::recycle( arg('id') );
  148. if (!$ret)
  149. $err = $ERR_NODE_MOVE;
  150. break;
  151. case "empty_trashcan":
  152. $ret = DAM::empty_trashcan();
  153. if (!$ret)
  154. $err = $ERR_NODE_ID;
  155. break;
  156. //
  157. // OLD
  158. //
  159. case "save":
  160. $ret = asset_save(arg("id"), arg("path"), arg("comment"));
  161. if (!$ret)
  162. $err = $ERR_ASSET_UPDATE;
  163. break;
  164. case "saveable":
  165. if(!is_writable($assetsLCL.model::getKey(arg("id"),'path_backups'))){
  166. $err = $ERR_FILE_PERMISSION;
  167. break;
  168. }
  169. $ret = asset_saveable(arg("id"));
  170. if(!$ret)
  171. $err = $ERR_ASSET_SAVEABLE;
  172. break;
  173. case "backup":
  174. $ret = asset_backup(arg("id"));
  175. if(!$ret)
  176. $err = $ERR_ASSET_BACKUP;
  177. break;
  178. case "backupundo":
  179. $ret = asset_backup_undo(arg("id"));
  180. if(!$ret)
  181. $err = $ERR_ASSET_UNDOBACKUP;
  182. break;
  183. case "commitnode":
  184. $ret = asset_commit_node(arg("id"),arg("comment"));
  185. if(!$ret)
  186. $err = $ERR_ASSET_UPDATE;
  187. break;
  188. case "rollback":
  189. $ret = asset_rollback(arg("id"), arg("comment"));
  190. echo "ret=".$ret;
  191. if(!$ret)
  192. $err = $ERR_ASSET_ROLLBACK;
  193. break;
  194. case "savecheck":
  195. if (!asset_backup_able(arg("id")))
  196. $err = $ERR_ASSET_READONLY;
  197. break;
  198. case "filecheck":
  199. if( !file_exists( $assetsLCL . model::getKey( arg("id"), 'file' ) ) )
  200. {
  201. $err = $ERR_FILE_NOT_FOUND;
  202. break;
  203. }
  204. if( !is_readable( $assetsLCL . model::getKey( arg("id"), 'file' ) ) )
  205. {
  206. $err = $ERR_FILE_PERMISSION;
  207. break;
  208. }
  209. if( !model::getKey( arg("id"), "sha1" ) )
  210. {
  211. $err = $ERR_ASSET_NOSHA1;
  212. break;
  213. }
  214. if( !asset_check_sha1( arg("id") ) )
  215. $err = $ERR_ASSET_FILECHECK;
  216. break;
  217. //
  218. // FROM dam.soap.php
  219. //
  220. /*
  221. case "insert":
  222. $id = DAM::insert(arg('type'),arg('name'));
  223. if ($id)
  224. $ret = mysql_get($id, 1, $NODE_TAG | $NODE_PRM);
  225. break;
  226. case "insertIn":
  227. $id = model::createNode( arg('id'), arg('type') );
  228. if( $id )
  229. {
  230. if( arg("name") )
  231. model::setKey( $id, "name", arg("name") );
  232. $ret = mysql_get($id, 1, $NODE_TAG | $NODE_PRM);
  233. }
  234. break;
  235. case "say":
  236. $ret = DAM::say( arg("path"), arg("text") );
  237. if (!$ret)
  238. $err = $ERR_NODE_CREATE;
  239. break;
  240. */
  241. default:
  242. $err = $ERR_COMMAND;
  243. }
  244. if( $err == $ERR_NOERROR )
  245. {
  246. damas_service::log_event();
  247. }
  248. echo soaplike_head($cmd,$err);
  249. echo "\t<FILES";
  250. foreach ($_FILES as $k => $v)
  251. echo " " . $k.'="'.$v.'"';
  252. echo "/>\n";
  253. $exec_time = ceil((microtime() - $start_time) * 1000) + "ms";
  254. echo "\t\t<execution_time>$exec_time</execution_time>\n";
  255. echo "\t</soap:Header>\n";
  256. echo "\t<soap:Body>\n";
  257. echo "\t\t<returnvalue>$ret</returnvalue>\n";
  258. echo "\t</soap:Body>\n";
  259. echo "</soap:Envelope>\n";