PageRenderTime 26ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/php-cake/app/controllers/services_controller.php

https://code.google.com/p/syncanything/
PHP | 228 lines | 141 code | 28 blank | 59 comment | 26 complexity | 2892eb37594e0752595339e2e6ba6a1d MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. App::import('Core', 'CakeSocket');
  3. class ServicesController extends AppController {
  4. var $name = 'Services';
  5. var $helpers = array('Html');
  6. var $uses = array('Transaction');
  7. function beforeFilter() {
  8. //$this->layout = '';
  9. //$this->render(false);
  10. parent::beforeFilter();
  11. }
  12. function index() {
  13. /*
  14. $delimiter = "\r\n";
  15. $this->Socket = new CakeSocket(array(
  16. //'host' => 'syncany.evolver.org.ua',
  17. 'host' => 'localhost',
  18. 'port' => 843,
  19. 'request' => array(
  20. 'uri' => array(
  21. 'scheme' => 'https'
  22. )
  23. )
  24. ));
  25. $this->Socket->connect();
  26. var_dump($this->Socket->connected);
  27. if ($this->Socket->connected) {
  28. $responce = array(
  29. 'call' => 'updateEntity',
  30. 'ticket' => "8d59ffdc16c7ae404952973280d6145e",
  31. 'user_id' => 2,
  32. 'client_id' => 81
  33. );
  34. $this->Socket->write(json_encode($responce) . $delimiter);
  35. }
  36. $this->Socket->disconnect();
  37. */
  38. }
  39. private function setHeader($code) {
  40. $protocol = $_SERVER["SERVER_PROTOCOL"];
  41. switch ($code) {
  42. case '404':
  43. $h = $protocol . " 404 Not Found";
  44. break;
  45. case '200':
  46. $h = $protocol . " 200 OK";
  47. break;
  48. default:
  49. trigger_error('Undefined header code: ' . $code, E_USER_ERROR);
  50. break;
  51. }
  52. header($h);
  53. }
  54. /**
  55. * Create folder or empty fiel by ticket
  56. *
  57. * @param $ticket
  58. */
  59. function create($ticket) {
  60. $this->layout = '';
  61. $this->render(false);
  62. $result = false;
  63. $transaction = $this->Transaction->getUnfinishedByTicket($ticket);
  64. if (isset($transaction['Transaction']) && isset($transaction['Entity'])) {
  65. $destPath = $transaction['Entity']['stored'] . strtolower($transaction['Entity']['hash']);
  66. $destFolder = $transaction['Entity']['stored'];
  67. $destPath = $transaction['Entity']['stored'] . strtolower($transaction['Entity']['hash']);
  68. $result = is_dir($destFolder) && is_writeable($destFolder);
  69. if(!$result) {
  70. $folder = new Folder($destFolder);
  71. $result = $folder->create($destFolder, STORAGE_FOLDERS_MOD);
  72. }
  73. if ($result) {
  74. $file = new File($destPath, false, STORAGE_FILES_MOD);
  75. $result = $file->create();
  76. var_dump($result);
  77. $file->close();
  78. }
  79. }
  80. if ($result) {
  81. //notify by socket result
  82. $this->Transaction->finish($ticket);
  83. if ($this->inTestMode()) {
  84. return '200';
  85. } else {
  86. $this->setHeader('200');
  87. }
  88. } else {
  89. if ($this->inTestMode()) {
  90. return '404';
  91. } else {
  92. $this->setHeader('404');
  93. }
  94. }
  95. }
  96. /**
  97. * Upload file by client
  98. *
  99. * @param $ticket
  100. */
  101. function upload($ticket) {
  102. $this->layout = '';
  103. $this->render(false);
  104. $result = false;
  105. if (!empty($this->params['form'])) {
  106. $request = $this->params['form'];
  107. if ($this->__uploadByTicket($ticket, $request)) {
  108. //$this->cakeError('error404');
  109. $result = true;
  110. }
  111. }
  112. if ($result) {
  113. //notify by socket result
  114. $this->Transaction->finish($ticket);
  115. if ($this->inTestMode()) {
  116. return '200';
  117. } else {
  118. $this->setHeader('200');
  119. }
  120. } else {
  121. if ($this->inTestMode()) {
  122. return '404';
  123. } else {
  124. $this->setHeader('404');
  125. }
  126. }
  127. }
  128. /**
  129. * Upload file from web frontend
  130. */
  131. function web_upload() {
  132. $request = $this->params['form'];
  133. if (!empty($this->data)) {
  134. /*
  135. STORAGE_PATH
  136. if ($this->__copyUploadedFile($sourceFile, $destFile)) {
  137. $this->Transaction->finish($ticket);
  138. return true;
  139. }
  140. */
  141. }
  142. }
  143. private function __uploadByTicket($ticket, $request) {
  144. // only for test without ngnix
  145. if (isset($request['entity']['tmp_name'])) {
  146. $request['entity_path'] = $request['entity']['tmp_name'];
  147. }
  148. $transaction = $this->Transaction->getUnfinishedByTicket($ticket);
  149. if (isset($transaction['Transaction']) && isset($transaction['Entity'])) {
  150. $storageFolder = $transaction['Entity']['stored'];
  151. $storageFile = strtolower($transaction['Entity']['hash']);
  152. $destFile = $storageFolder . $storageFile;
  153. if (!empty($request['entity_path'])) {
  154. $sourceFile = $request['entity_path'];
  155. if ($this->__copyUploadedFile($sourceFile, $destFile)) {
  156. $this->Transaction->finish($ticket);
  157. //notify by socket result
  158. return true;
  159. }
  160. }
  161. }
  162. return false;
  163. }
  164. private function __copyUploadedFile($source, $dest) {
  165. $destFolder = str_replace(array('\\', '/'), DS, dirname($dest));
  166. $result = is_dir($destFolder) && is_writeable($destFolder);
  167. if(!$result) {
  168. $folder = new Folder($destFolder);
  169. $result = $folder->create($destFolder, STORAGE_FOLDERS_MOD);
  170. }
  171. if ($result) {
  172. $file = new File($source);
  173. $result = $file->copy($dest);
  174. $file->close();
  175. }
  176. return $result;
  177. }
  178. function download($ticket) {
  179. $this->layout = '';
  180. $this->render(false);
  181. }
  182. function delete($ticket) {
  183. $this->layout = '';
  184. $this->render(false);
  185. $this->setHeader('200');
  186. }
  187. }
  188. ?>