From: Robin Appelman Date: Wed, 7 Aug 2013 14:53:09 +0000 (+0200) Subject: add the option to have templates for newly created files X-Git-Tag: v6.0.0alpha2~302^2~5 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9321eceed6a94f74ccdb908c05e97dfb1585d211;p=nextcloud-server.git add the option to have templates for newly created files --- diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php index 8548fc95ddf..21db0a7834b 100644 --- a/apps/files/ajax/newfile.php +++ b/apps/files/ajax/newfile.php @@ -3,29 +3,29 @@ // Init owncloud global $eventSource; -if(!OC_User::isLoggedIn()) { +if (!OC_User::isLoggedIn()) { exit; } session_write_close(); // Get the params -$dir = isset( $_REQUEST['dir'] ) ? '/'.trim($_REQUEST['dir'], '/\\') : ''; -$filename = isset( $_REQUEST['filename'] ) ? trim($_REQUEST['filename'], '/\\') : ''; -$content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : ''; -$source = isset( $_REQUEST['source'] ) ? trim($_REQUEST['source'], '/\\') : ''; +$dir = isset($_REQUEST['dir']) ? '/' . trim($_REQUEST['dir'], '/\\') : ''; +$filename = isset($_REQUEST['filename']) ? trim($_REQUEST['filename'], '/\\') : ''; +$content = isset($_REQUEST['content']) ? $_REQUEST['content'] : ''; +$source = isset($_REQUEST['source']) ? trim($_REQUEST['source'], '/\\') : ''; -if($source) { - $eventSource=new OC_EventSource(); +if ($source) { + $eventSource = new OC_EventSource(); } else { OC_JSON::callCheck(); } -if($filename == '') { - OCP\JSON::error(array("data" => array( "message" => "Empty Filename" ))); +if ($filename == '') { + OCP\JSON::error(array("data" => array("message" => "Empty Filename"))); exit(); } -if(strpos($filename, '/')!==false) { - OCP\JSON::error(array("data" => array( "message" => "Invalid Filename" ))); +if (strpos($filename, '/') !== false) { + OCP\JSON::error(array("data" => array("message" => "Invalid Filename"))); exit(); } @@ -34,7 +34,7 @@ function progress($notification_code, $severity, $message, $message_code, $bytes static $lastsize = 0; global $eventSource; - switch($notification_code) { + switch ($notification_code) { case STREAM_NOTIFY_FILE_SIZE_IS: $filesize = $bytes_max; break; @@ -43,52 +43,56 @@ function progress($notification_code, $severity, $message, $message_code, $bytes if ($bytes_transferred > 0) { if (!isset($filesize)) { } else { - $progress = (int)(($bytes_transferred/$filesize)*100); - if($progress>$lastsize) {//limit the number or messages send + $progress = (int)(($bytes_transferred / $filesize) * 100); + if ($progress > $lastsize) { //limit the number or messages send $eventSource->send('progress', $progress); } - $lastsize=$progress; + $lastsize = $progress; } } break; } } -if($source) { - if(substr($source, 0, 8)!='https://' and substr($source, 0, 7)!='http://') { - OCP\JSON::error(array("data" => array( "message" => "Not a valid source" ))); +if ($source) { + if (substr($source, 0, 8) != 'https://' and substr($source, 0, 7) != 'http://') { + OCP\JSON::error(array("data" => array("message" => "Not a valid source"))); exit(); } - $ctx = stream_context_create(null, array('notification' =>'progress')); - $sourceStream=fopen($source, 'rb', false, $ctx); - $target=$dir.'/'.$filename; - $result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream); - if($result) { + $ctx = stream_context_create(null, array('notification' => 'progress')); + $sourceStream = fopen($source, 'rb', false, $ctx); + $target = $dir . '/' . $filename; + $result = \OC\Files\Filesystem::file_put_contents($target, $sourceStream); + if ($result) { $meta = \OC\Files\Filesystem::getFileInfo($target); - $mime=$meta['mimetype']; + $mime = $meta['mimetype']; $id = $meta['fileid']; - $eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id)); + $eventSource->send('success', array('mime' => $mime, 'size' => \OC\Files\Filesystem::filesize($target), 'id' => $id)); } else { - $eventSource->send('error', "Error while downloading ".$source. ' to '.$target); + $eventSource->send('error', "Error while downloading " . $source . ' to ' . $target); } $eventSource->close(); exit(); } else { - if($content) { - if(\OC\Files\Filesystem::file_put_contents($dir.'/'.$filename, $content)) { - $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename); + if ($content) { + if (\OC\Files\Filesystem::file_put_contents($dir . '/' . $filename, $content)) { + $meta = \OC\Files\Filesystem::getFileInfo($dir . '/' . $filename); $id = $meta['fileid']; - OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id))); + OCP\JSON::success(array("data" => array('content' => $content, 'id' => $id))); exit(); } - }elseif(\OC\Files\Filesystem::touch($dir . '/' . $filename)) { - $meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename); + } elseif (\OC\Files\Filesystem::touch($dir . '/' . $filename)) { + $meta = \OC\Files\Filesystem::getFileInfo($dir . '/' . $filename); + $templateManager = OC_Helper::getFileTemplateManager(); + if ($content = $templateManager->getTemplate($meta['mimetype'])) { + \OC\Files\Filesystem::file_put_contents($dir . '/' . $filename, $content); + } $id = $meta['fileid']; - OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id, 'mime' => $meta['mimetype']))); + OCP\JSON::success(array("data" => array('content' => $content, 'id' => $id, 'mime' => $meta['mimetype']))); exit(); } } -OCP\JSON::error(array("data" => array( "message" => "Error when creating the file" ))); +OCP\JSON::error(array("data" => array("message" => "Error when creating the file"))); diff --git a/lib/files/type/templatemanager.php b/lib/files/type/templatemanager.php new file mode 100644 index 00000000000..cd1536d2732 --- /dev/null +++ b/lib/files/type/templatemanager.php @@ -0,0 +1,46 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Type; + +class TemplateManager { + protected $templates = array(); + + public function registerTemplate($mimetype, $path) { + $this->templates[$mimetype] = $path; + } + + /** + * get the path of the template for a mimetype + * + * @param string $mimetype + * @return string | null + */ + public function getTemplatePath($mimetype) { + if (isset($this->templates[$mimetype])) { + return $this->templates[$mimetype]; + } else { + return null; + } + } + + /** + * get the template content for a mimetype + * + * @param string $mimetype + * @return string + */ + public function getTemplate($mimetype) { + $path = $this->getTemplatePath($mimetype); + if ($path) { + return file_get_contents($path); + } else { + return ''; + } + } +} diff --git a/lib/helper.php b/lib/helper.php index 801f06352d0..8b64baaea72 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -28,6 +28,7 @@ class OC_Helper { private static $tmpFiles = array(); private static $mimetypeIcons = array(); private static $mimetypeDetector; + private static $templateManager; /** * @brief Creates an url using a defined route @@ -357,6 +358,9 @@ class OC_Helper { } } + /** + * @return \OC\Files\Type\Detection + */ static public function getMimetypeDetector() { if (!self::$mimetypeDetector) { self::$mimetypeDetector = new \OC\Files\Type\Detection(); @@ -365,6 +369,16 @@ class OC_Helper { return self::$mimetypeDetector; } + /** + * @return \OC\Files\Type\TemplateManager + */ + static public function getFileTemplateManager() { + if (!self::$templateManager) { + self::$templateManager = new \OC\Files\Type\TemplateManager(); + } + return self::$templateManager; + } + /** * Try to guess the mimetype based on filename *