| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * ownCloud - Documents App | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @author Victor Dubiniuk | 
					
						
							|  |  |  |  * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is licensed under the Affero General Public License version 3 or | 
					
						
							|  |  |  |  * later. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace OCA\Documents; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DocumentController extends Controller{ | 
					
						
							| 
									
										
										
										
											2013-09-13 13:18:45 +03:00
										 |  |  | 	const ODT_TEMPLATE = 'UEsDBBQAAAgAAC6aLENexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAACAAALposQ9dwh9LYAgAA2AIAABgAAABUaHVtYm5haWxzL3RodW1ibmFpbC5wbmeJUE5HDQoaCgAAAA1JSERSAAAAxgAAAQAIAgAAAGc/nhcAAAKfSURBVHic7dKxCQAwDMCwDvn/5fQJQ6FIF3jw7O6BzrwO4DeWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYpYiZililiJmKWKWImYpYheoVwb+sqPDzwAAAABJRU5ErkJgglBLAwQUAAgICAAumixDAAAAAAAAAAAAAAAACwAAAGNvbnRlbnQueG1s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
 | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2013-09-13 13:18:45 +03:00
										 |  |  | 	public static function create($args){ | 
					
						
							|  |  |  | 		$uid = self::preDispatch(); | 
					
						
							| 
									
										
										
										
											2013-09-26 21:01:41 +03:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											2013-09-13 13:18:45 +03:00
										 |  |  | 		$view = new \OC\Files\View('/' . $uid . '/files'); | 
					
						
							| 
									
										
										
										
											2013-10-01 19:34:08 +03:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		$dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', '/'); | 
					
						
							| 
									
										
										
										
											2014-04-02 23:18:39 +03:00
										 |  |  | 		if (!$view->is_dir($dir)){ | 
					
						
							|  |  |  | 			$dir = '/'; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-10-01 19:34:08 +03:00
										 |  |  | 		$path = Helper::getNewFileName($view, $dir . '/New Document.odt'); | 
					
						
							| 
									
										
										
										
											2013-09-13 13:40:26 +03:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											2013-10-03 20:34:17 +03:00
										 |  |  | 		$content = base64_decode(self::ODT_TEMPLATE); | 
					
						
							|  |  |  | 		if (class_exists('\OC\Files\Type\TemplateManager')){ | 
					
						
							|  |  |  | 			$manager = \OC_Helper::getFileTemplateManager(); | 
					
						
							| 
									
										
										
										
											2013-12-26 15:42:28 +00:00
										 |  |  | 			$templateContent = $manager->getTemplate(Storage::MIMETYPE_LIBREOFFICE_WORDPROCESSOR); | 
					
						
							| 
									
										
										
										
											2013-10-03 20:34:17 +03:00
										 |  |  | 			if ($templateContent){ | 
					
						
							|  |  |  | 				$content = $templateContent; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2014-04-02 23:18:39 +03:00
										 |  |  | 		if ($view->file_put_contents($path, $content)){ | 
					
						
							|  |  |  | 			$info = $view->getFileInfo($path); | 
					
						
							|  |  |  | 			\OCP\JSON::success(array ('fileid' => $info['fileid']) ); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			\OCP\JSON::error( | 
					
						
							| 
									
										
										
										
											2014-04-09 18:54:22 +03:00
										 |  |  | 					array ('message' => Config::getL10n()->t('Can\'t create document')) | 
					
						
							| 
									
										
										
										
											2014-04-02 23:18:39 +03:00
										 |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-09-13 13:18:45 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-21 21:18:53 +03:00
										 |  |  | 	/** | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 	 * Process partial/complete file download | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 	 * @param array $args - array containing session id as an element with a key es_id  | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 	 */ | 
					
						
							|  |  |  | 	public static function serve($args){ | 
					
						
							| 
									
										
										
										
											2014-08-04 20:51:50 +03:00
										 |  |  | 		$session = new Db\Session(); | 
					
						
							| 
									
										
										
										
											2014-04-11 23:12:23 +03:00
										 |  |  | 		$session->load(@$args['es_id']); | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 			 | 
					
						
							| 
									
										
										
										
											2014-04-10 21:23:26 +03:00
										 |  |  | 		self::preDispatchGuest(); | 
					
						
							| 
									
										
										
										
											2013-09-26 21:01:41 +03:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											2014-04-11 23:12:23 +03:00
										 |  |  | 		$filename = $session->getGenesisUrl() ? $session->getGenesisUrl() : ''; | 
					
						
							|  |  |  | 		$download = new Download($session->getOwner(), $filename); | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 		$download->sendResponse(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-12-19 00:07:17 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function rename($args){ | 
					
						
							| 
									
										
										
										
											2014-05-14 00:06:10 +03:00
										 |  |  | 		self::preDispatch(); | 
					
						
							| 
									
										
										
										
											2014-04-08 22:12:08 +03:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											2014-04-09 18:54:22 +03:00
										 |  |  | 		$fileId = intval(Helper::getArrayValueByKey($args, 'file_id', 0)); | 
					
						
							|  |  |  | 		$name = Helper::getArrayValueByKey($_POST, 'name'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-08 22:12:08 +03:00
										 |  |  | 		$view = \OC\Files\Filesystem::getView(); | 
					
						
							|  |  |  | 		$path = $view->getPath($fileId); | 
					
						
							| 
									
										
										
										
											2013-12-19 00:07:17 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-08 22:12:08 +03:00
										 |  |  | 		if (isset($name) && $view->is_file($path) && $view->isUpdatable($path)) { | 
					
						
							|  |  |  | 			$newPath = dirname($path) . '/' . $name; | 
					
						
							|  |  |  | 			if ($view->rename($path, $newPath)) { | 
					
						
							| 
									
										
										
										
											2013-12-19 00:07:17 +03:00
										 |  |  | 				\OCP\JSON::success(); | 
					
						
							|  |  |  | 				return; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		\OCP\JSON::error(array( | 
					
						
							| 
									
										
										
										
											2014-04-09 18:54:22 +03:00
										 |  |  | 			'message' => Config::getL10n()->t('You don\'t have permission to rename this document') | 
					
						
							| 
									
										
										
										
											2013-12-19 00:07:17 +03:00
										 |  |  | 		)); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * lists the documents the user has access to (including shared files, once the code in core has been fixed) | 
					
						
							|  |  |  | 	 * also adds session and member info for these files | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	public static function listAll(){ | 
					
						
							|  |  |  | 		self::preDispatch(); | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2014-04-14 18:05:18 +03:00
										 |  |  | 		$found = Storage::getDocuments(); | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		$fileIds = array(); | 
					
						
							| 
									
										
										
										
											2014-04-14 18:05:18 +03:00
										 |  |  | 		$documents = array(); | 
					
						
							|  |  |  | 		foreach ($found as $key=>$document) { | 
					
						
							|  |  |  | 			if (is_object($document)){ | 
					
						
							|  |  |  | 				$documents[] = $document->getData(); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$documents[$key] = $document; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-09-12 23:02:56 +03:00
										 |  |  | 			$documents[$key]['icon'] = preg_replace('/\.png$/', '.svg', \OC_Helper::mimetypeIcon($document['mimetype'])); | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 			$fileIds[] = $document['fileid']; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-01 17:49:03 +03:00
										 |  |  | 		usort($documents, function($a, $b){ | 
					
						
							|  |  |  | 			return @$b['mtime']-@$a['mtime']; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2014-08-04 20:51:50 +03:00
										 |  |  | 		$session = new Db\Session(); | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 		$sessions = $session->getCollectionBy('file_id', $fileIds); | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		$members = array(); | 
					
						
							| 
									
										
										
										
											2014-08-04 21:00:58 +03:00
										 |  |  | 		$member = new Db\Member(); | 
					
						
							| 
									
										
										
										
											2013-10-31 20:24:55 +03:00
										 |  |  | 		foreach ($sessions as $session) {			 | 
					
						
							|  |  |  | 			$members[$session['es_id']] = $member->getActiveCollection($session['es_id']); | 
					
						
							| 
									
										
										
										
											2013-09-02 19:54:23 +03:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		\OCP\JSON::success(array('documents' => $documents,'sessions' => $sessions,'members' => $members)); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-11-08 15:46:30 +00:00
										 |  |  | } |