diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 5cab0707bdab40d639d0136c89086f03ef62fc53..66453740f5d939992d256a8c5a5a4b64f65b0260 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -691,8 +691,9 @@ var FileList={ var $fileList = $('#fileList'); var permissions = $('#permissions').val(); var isCreatable = (permissions & OC.PERMISSION_CREATE) !== 0; - $('#emptycontent').toggleClass('hidden', !isCreatable || $fileList.find('tr').exists()); - $('#filestable th').toggleClass('hidden', $fileList.find('tr').exists() === false); + var exists = $fileList.find('tr:first').exists(); + $('#emptycontent').toggleClass('hidden', !isCreatable || exists); + $('#filestable th').toggleClass('hidden', !exists); }, showMask: function() { // in case one was shown before diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php index 6e464f4e28715037cb1653fc6d9056e8af74ab10..5f603b7fe43d20415a62dfbfd4cb11d42deaac89 100755 --- a/apps/files_external/lib/dropbox.php +++ b/apps/files_external/lib/dropbox.php @@ -269,7 +269,11 @@ class Dropbox extends \OC\Files\Storage\Common { } public function touch($path, $mtime = null) { - return false; + if ($this->file_exists($path)) { + return false; + } else { + $this->file_put_contents($path, ''); + } } } diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php index 86938ef3bb9c59c82c450c057a61e045adc2941c..b615d24ce76c2b3dc13459767a139e92deaf8d9b 100644 --- a/apps/files_external/lib/swift.php +++ b/apps/files_external/lib/swift.php @@ -364,7 +364,7 @@ class Swift extends \OC\Files\Storage\Common { 'X-Object-Meta-Timestamp' => $mtime ) ); - $object->Update($settings); + return $object->Update($settings); } else { $object = $this->container->DataObject(); if (is_null($mtime)) { @@ -377,7 +377,7 @@ class Swift extends \OC\Files\Storage\Common { 'X-Object-Meta-Timestamp' => $mtime ) ); - $object->Create($settings); + return $object->Create($settings); } } diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php index 0837222e51103f78c1dfcf44d2a45410804f53c3..02f6cb5fc4f73720f1dca49f87ca4b0c2d2fb48f 100644 --- a/apps/files_external/lib/webdav.php +++ b/apps/files_external/lib/webdav.php @@ -234,6 +234,7 @@ class DAV extends \OC\Files\Storage\Common{ } else { $this->file_put_contents($path, ''); } + return true; } public function getFile($path, $target) { diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php index 92361b65f63e01fc7120d0cf6a622c53e2671d71..5498250dbf5eaf7a8d17f40eb318641ed5d9a9d6 100644 --- a/apps/files_trashbin/ajax/delete.php +++ b/apps/files_trashbin/ajax/delete.php @@ -3,10 +3,19 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); -$files = $_POST['files']; -$dirlisting = $_POST['dirlisting']; -$list = json_decode($files); - +// "empty trash" command +$deleteAll = false; +if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true'){ + $user = \OCP\User::getUser(); + $list = OCA\Files_Trashbin\Helper::getTrashFiles('/'); + $deleteAll = true; + $dirlisting = '0'; +} +else { + $files = $_POST['files']; + $dirlisting = $_POST['dirlisting']; + $list = json_decode($files); +} $error = array(); $success = array(); @@ -14,22 +23,30 @@ $success = array(); $i = 0; foreach ($list as $file) { if ( $dirlisting === '0') { - $delimiter = strrpos($file, '.d'); - $filename = substr($file, 0, $delimiter); - $timestamp = substr($file, $delimiter+2); + if ($deleteAll) { + $filename = $file['name']; + $timestamp = $file['timestamp']; + } + else { + $delimiter = strrpos($file, '.d'); + $filename = substr($file, 0, $delimiter); + $timestamp = substr($file, $delimiter+2); + } } else { $filename = $file; $timestamp = null; } OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp); - if (!OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) { + if (OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) { + $error[] = $filename; + OC_Log::write('trashbin','can\'t delete ' . $filename . ' permanently.', OC_Log::ERROR); + } + // only list deleted files if not deleting everything + else if (!$deleteAll) { $success[$i]['filename'] = $file; $success[$i]['timestamp'] = $timestamp; $i++; - } else { - $error[] = $filename; - OC_Log::write('trashbin','can\'t delete ' . $filename . ' permanently.', OC_Log::ERROR); } } diff --git a/apps/files_trashbin/js/filelist.js b/apps/files_trashbin/js/filelist.js index cd5a67ddfe002d502d013074b1baf496a948cbbf..f42abb6d029dc9a526713754ae89e7d8a44ccaf7 100644 --- a/apps/files_trashbin/js/filelist.js +++ b/apps/files_trashbin/js/filelist.js @@ -22,3 +22,10 @@ FileList.reload = function(){ FileList.linkTo = function(dir){ return OC.linkTo('files_trashbin', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); } + +FileList.updateEmptyContent = function(){ + var $fileList = $('#fileList'); + var exists = $fileList.find('tr:first').exists(); + $('#emptycontent').toggleClass('hidden', exists); + $('#filestable th').toggleClass('hidden', !exists); +} diff --git a/apps/files_trashbin/js/trash.js b/apps/files_trashbin/js/trash.js index 4e6a1e93fa40c969d3d68569d0a68d674b80c98f..84c23d66992143a86d3a46b97809259e56194c18 100644 --- a/apps/files_trashbin/js/trash.js +++ b/apps/files_trashbin/js/trash.js @@ -19,6 +19,7 @@ $(document).ready(function() { } enableActions(); FileList.updateFileSummary(); + FileList.updateEmptyContent(); } ); @@ -45,6 +46,7 @@ $(document).ready(function() { } enableActions(); FileList.updateFileSummary(); + FileList.updateEmptyContent(); } ); @@ -122,34 +124,60 @@ $(document).ready(function() { } enableActions(); FileList.updateFileSummary(); + FileList.updateEmptyContent(); } ); }); $('.delete').click('click', function(event) { event.preventDefault(); - var files = getSelectedFiles('file'); - var fileslist = JSON.stringify(files); - var dirlisting = getSelectedFiles('dirlisting')[0]; + var allFiles = $('#select_all').is(':checked'); + var files = []; + var params = {}; + if (allFiles) { + params = { + allfiles: true + }; + } + else { + files = getSelectedFiles('file'); + params = { + files: JSON.stringify(files), + dirlisting: getSelectedFiles('dirlisting')[0] + }; + }; disableActions(); - for (var i = 0; i < files.length; i++) { - var deleteAction = $('tr').filterAttr('data-file', files[i]).children("td.date").children(".action.delete"); - deleteAction.removeClass('delete-icon').addClass('progress-icon'); + if (allFiles) { + FileList.showMask(); + } + else { + for (var i = 0; i < files.length; i++) { + var deleteAction = $('tr').filterAttr('data-file', files[i]).children("td.date").children(".action.delete"); + deleteAction.removeClass('delete-icon').addClass('progress-icon'); + } } $.post(OC.filePath('files_trashbin', 'ajax', 'delete.php'), - {files: fileslist, dirlisting: dirlisting}, + params, function(result) { - for (var i = 0; i < result.data.success.length; i++) { - var row = document.getElementById(result.data.success[i].filename); - row.parentNode.removeChild(row); + if (allFiles) { + FileList.hideMask(); + // simply remove all files + $('#fileList').empty(); + } + else { + for (var i = 0; i < result.data.success.length; i++) { + var row = document.getElementById(result.data.success[i].filename); + row.parentNode.removeChild(row); + } } if (result.status !== 'success') { OC.dialogs.alert(result.data.message, t('core', 'Error')); } enableActions(); FileList.updateFileSummary(); + FileList.updateEmptyContent(); } ); diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php index 15ba074e45eefa42f1e21d8174de7a61cfd5dde1..f9264d4352cca017004e6a3021f304bd5feb5dde 100644 --- a/apps/files_trashbin/templates/index.php +++ b/apps/files_trashbin/templates/index.php @@ -4,9 +4,7 @@ </div> <div id='notification'></div> -<?php if (isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false && !$_['ajaxLoad']):?> - <div id="emptycontent"><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div> -<?php endif; ?> +<div id="emptycontent" <?php if (!(isset($_['files']) && count($_['files']) === 0 && $_['dirlisting'] === false && !$_['ajaxLoad'])):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Your trash bin is empty!'))?></div> <input type="hidden" name="ajaxLoad" id="ajaxLoad" value="<?php p($_['ajaxLoad']); ?>" /> <input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>"></input> diff --git a/core/command/app/disable.php b/core/command/app/disable.php new file mode 100644 index 0000000000000000000000000000000000000000..dcdee92349e26d9675783d99bee3d33e57c97b04 --- /dev/null +++ b/core/command/app/disable.php @@ -0,0 +1,37 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Core\Command\App; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Disable extends Command { + protected function configure() { + $this + ->setName('app:disable') + ->setDescription('disable an app') + ->addArgument( + 'app-id', + InputArgument::REQUIRED, + 'disable the specified app' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $appId = $input->getArgument('app-id'); + if (\OC_App::isEnabled($appId)) { + \OC_App::disable($appId); + $output->writeln($appId . ' disabled'); + } else { + $output->writeln('No such app enabled: ' . $appId); + } + } +} diff --git a/core/command/app/enable.php b/core/command/app/enable.php new file mode 100644 index 0000000000000000000000000000000000000000..f08546602ee0eab23ddbe97cb5ff1b28ec546a77 --- /dev/null +++ b/core/command/app/enable.php @@ -0,0 +1,39 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Core\Command\App; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Enable extends Command { + protected function configure() { + $this + ->setName('app:enable') + ->setDescription('enable an app') + ->addArgument( + 'app-id', + InputArgument::REQUIRED, + 'enable the specified app' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $appId = $input->getArgument('app-id'); + if (\OC_App::isEnabled($appId)) { + $output->writeln($appId . ' is already enabled'); + } else if (!\OC_App::getAppPath($appId)) { + $output->writeln($appId . ' not found'); + } else { + \OC_App::enable($appId); + $output->writeln($appId . ' enabled'); + } + } +} diff --git a/core/command/app/listapps.php b/core/command/app/listapps.php new file mode 100644 index 0000000000000000000000000000000000000000..dc471c5453a4a42d5ee2fefb24dc983c09d19ae6 --- /dev/null +++ b/core/command/app/listapps.php @@ -0,0 +1,47 @@ +<?php +/** + * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Core\Command\App; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ListApps extends Command { + protected function configure() { + $this + ->setName('app:list') + ->setDescription('List all available apps'); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $apps = \OC_App::getAllApps(); + $enabledApps = array(); + $disabledApps = array(); + + //sort enabled apps above disabled apps + foreach ($apps as $app) { + if (\OC_App::isEnabled($app)) { + $enabledApps[] = $app; + } else { + $disabledApps[] = $app; + } + } + + sort($enabledApps); + sort($disabledApps); + $output->writeln('Enabled:'); + foreach ($enabledApps as $app) { + $output->writeln(' - ' . $app); + } + $output->writeln('Disabled:'); + foreach ($disabledApps as $app) { + $output->writeln(' - ' . $app); + } + } +} diff --git a/core/css/styles.css b/core/css/styles.css index 938b522a90fb84d843c5cd6af0b36fa37302c238..5c0aa1fedc2255217bf258513f7cd1bb352fbb23 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -561,7 +561,7 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; } /* NAVIGATION ------------------------------------------------------------- */ #navigation { - position: absolute; + position: fixed; top: 0; bottom: 0; left: 0; diff --git a/core/register_command.php b/core/register_command.php index 2f351b67a1ee2426c4e53ef2e50b3abecc20939a..1e520e38825cff59ae2c4f8e5289d4264ad4472c 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -11,3 +11,6 @@ $application->add(new OC\Core\Command\Status); $application->add(new OC\Core\Command\Db\GenerateChangeScript()); $application->add(new OC\Core\Command\Upgrade()); $application->add(new OC\Core\Command\Maintenance\SingleUser()); +$application->add(new OC\Core\Command\App\Disable()); +$application->add(new OC\Core\Command\App\Enable()); +$application->add(new OC\Core\Command\App\ListApps()); diff --git a/lib/base.php b/lib/base.php index b361ac3c71ae2d4c8adbf80b019d07b9a6b8a151..2feedd81d8c3de654560f1017526e7742123a3d1 100644 --- a/lib/base.php +++ b/lib/base.php @@ -178,11 +178,19 @@ class OC { if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) { $defaults = new OC_Defaults(); - OC_Template::printErrorPage( - "Can't write into config directory!", - 'This can usually be fixed by ' - .'<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">giving the webserver write access to the config directory</a>.' - ); + if (self::$CLI) { + echo "Can't write into config directory!\n"; + echo "This can usually be fixed by giving the webserver write access to the config directory\n"; + echo "\n"; + echo "See " . \OC_Helper::linkToDocs('admin-dir_permissions') . "\n"; + exit; + } else { + OC_Template::printErrorPage( + "Can't write into config directory!", + 'This can usually be fixed by ' + .'<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">giving the webserver write access to the config directory</a>.' + ); + } } } @@ -496,7 +504,14 @@ class OC { $errors = OC_Util::checkServer(); if (count($errors) > 0) { - OC_Template::printGuestPage('', 'error', array('errors' => $errors)); + if (self::$CLI) { + foreach ($errors as $error) { + echo $error['error']."\n"; + echo $error['hint'] . "\n\n"; + } + } else { + OC_Template::printGuestPage('', 'error', array('errors' => $errors)); + } exit; } diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php index 1c80ebe80449106cf5052625a59285ce77736676..65231040fb5973f7622e1730387d8a3c427a1ef5 100644 --- a/lib/private/connector/sabre/filesplugin.php +++ b/lib/private/connector/sabre/filesplugin.php @@ -78,7 +78,19 @@ class OC_Connector_Sabre_FilesPlugin extends Sabre_DAV_ServerPlugin * @throws Sabre_DAV_Exception_BadRequest */ public function sendFileIdHeader($filePath, Sabre_DAV_INode $node = null) { + // chunked upload handling + if (isset($_SERVER['HTTP_OC_CHUNKED'])) { + list($path, $name) = \Sabre_DAV_URLUtil::splitPath($filePath); + $info = OC_FileChunking::decodeName($name); + if (!empty($info)) { + $filePath = $path . '/' . $info['name']; + } + } + // we get the node for the given $filePath here because in case of afterCreateFile $node is the parent folder + if (!$this->server->tree->nodeExists($filePath)) { + return; + } $node = $this->server->tree->getNodeForPath($filePath); if ($node instanceof OC_Connector_Sabre_Node) { $fileId = $node->getFileId(); diff --git a/lib/private/defaults.php b/lib/private/defaults.php index 4951c6f50aebc90b75a13f1a39df29c4db012ac3..cec9a65c7f3690be385c88ea7760791b40d4c693 100644 --- a/lib/private/defaults.php +++ b/lib/private/defaults.php @@ -1,15 +1,13 @@ <?php -/** - * Default strings and values which differ between the enterprise and the - * community edition. Use the get methods to always get the right strings. - */ - - if (file_exists(OC::$SERVERROOT . '/themes/' . OC_Util::getTheme() . '/defaults.php')) { require_once 'themes/' . OC_Util::getTheme() . '/defaults.php'; } +/** + * Default strings and values which differ between the enterprise and the + * community edition. Use the get methods to always get the right strings. + */ class OC_Defaults { private $theme; @@ -48,6 +46,10 @@ class OC_Defaults { return false; } + /** + * Returns the base URL + * @return string URL + */ public function getBaseUrl() { if ($this->themeExist('getBaseUrl')) { return $this->theme->getBaseUrl(); @@ -56,6 +58,10 @@ class OC_Defaults { } } + /** + * Returns the URL where the sync clients are listed + * @return string URL + */ public function getSyncClientUrl() { if ($this->themeExist('getSyncClientUrl')) { return $this->theme->getSyncClientUrl(); @@ -64,6 +70,10 @@ class OC_Defaults { } } + /** + * Returns the documentation URL + * @return string URL + */ public function getDocBaseUrl() { if ($this->themeExist('getDocBaseUrl')) { return $this->theme->getDocBaseUrl(); @@ -72,6 +82,10 @@ class OC_Defaults { } } + /** + * Returns the title + * @return string title + */ public function getTitle() { if ($this->themeExist('getTitle')) { return $this->theme->getTitle(); @@ -80,6 +94,10 @@ class OC_Defaults { } } + /** + * Returns the short name of the software + * @return string title + */ public function getName() { if ($this->themeExist('getName')) { return $this->theme->getName(); @@ -88,6 +106,10 @@ class OC_Defaults { } } + /** + * Returns entity (e.g. company name) - used for footer, copyright + * @return string entity name + */ public function getEntity() { if ($this->themeExist('getEntity')) { return $this->theme->getEntity(); @@ -96,6 +118,10 @@ class OC_Defaults { } } + /** + * Returns slogan + * @return string slogan + */ public function getSlogan() { if ($this->themeExist('getSlogan')) { return $this->theme->getSlogan(); @@ -104,6 +130,10 @@ class OC_Defaults { } } + /** + * Returns logo claim + * @return string logo claim + */ public function getLogoClaim() { if ($this->themeExist('getLogoClaim')) { return $this->theme->getLogoClaim(); @@ -112,6 +142,10 @@ class OC_Defaults { } } + /** + * Returns short version of the footer + * @return string short footer + */ public function getShortFooter() { if ($this->themeExist('getShortFooter')) { $footer = $this->theme->getShortFooter(); @@ -123,6 +157,10 @@ class OC_Defaults { return $footer; } + /** + * Returns long version of the footer + * @return string long footer + */ public function getLongFooter() { if ($this->themeExist('getLongFooter')) { $footer = $this->theme->getLongFooter(); diff --git a/lib/private/request.php b/lib/private/request.php index d11e5b16cfe00a77c8919ca62405794128d058e9..7a75bf252080433663ef015351249546144cc0b0 100755 --- a/lib/private/request.php +++ b/lib/private/request.php @@ -136,7 +136,18 @@ class OC_Request { * @returns string Path info or false when not found */ public static function getRawPathInfo() { - $path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME'])); + $requestUri = $_SERVER['REQUEST_URI']; + // remove too many leading slashes - can be caused by reverse proxy configuration + if (strpos($requestUri, '/') === 0) { + $requestUri = '/' . ltrim($requestUri, '/'); + } + + $scriptName = $_SERVER['SCRIPT_NAME']; + // in case uri and script name don't match we better throw an exception + if (strpos($requestUri, $scriptName) !== 0) { + throw new Exception("REQUEST_URI($requestUri) does not start with the SCRIPT_NAME($scriptName)"); + } + $path_info = substr($requestUri, strlen($scriptName)); // Remove the query string from REQUEST_URI if ($pos = strpos($path_info, '?')) { $path_info = substr($path_info, 0, $pos); diff --git a/lib/public/activity/iconsumer.php b/lib/public/activity/iconsumer.php index a0134a379dcfc735c9069cd80254975c64ee0ea4..9afacf4e745533c22c33d1c5ec31d10e908e1977 100644 --- a/lib/public/activity/iconsumer.php +++ b/lib/public/activity/iconsumer.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Activity/IConsumer interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Activity; diff --git a/lib/public/activity/imanager.php b/lib/public/activity/imanager.php index 90215d637c0a5aa5b7efbc6a7cce9e5cf0777e2b..086e430d677d480419b5206420ad421484e06883 100644 --- a/lib/public/activity/imanager.php +++ b/lib/public/activity/imanager.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Activity/IManager interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Activity; @@ -47,7 +52,6 @@ interface IManager { * * $callable has to return an instance of OCA\Activity\IConsumer * - * @param string $key * @param \Closure $callable */ function registerConsumer(\Closure $callable); diff --git a/lib/public/appframework/app.php b/lib/public/appframework/app.php index 6ac48bf102aa7c7b27296449dea9417b11704759..0ff6648c5d4cdf19454cb77ad17f1248d840b78e 100644 --- a/lib/public/appframework/app.php +++ b/lib/public/appframework/app.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework/App class + */ + namespace OCP\AppFramework; diff --git a/lib/public/appframework/controller.php b/lib/public/appframework/controller.php index 320e0cfebb2079ce37a7d05a4d8659bb0aa1c9f2..dc8da96787168ed41ff290b61fb730e9eb68108d 100644 --- a/lib/public/appframework/controller.php +++ b/lib/public/appframework/controller.php @@ -20,6 +20,10 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework\Controller class + */ namespace OCP\AppFramework; @@ -34,16 +38,19 @@ use OCP\IRequest; abstract class Controller { /** + * app container for dependency injection * @var \OCP\AppFramework\IAppContainer */ protected $app; /** + * current request * @var \OCP\IRequest */ protected $request; /** + * constructor of the controller * @param IAppContainer $app interface to the app * @param IRequest $request an instance of the request */ diff --git a/lib/public/appframework/http.php b/lib/public/appframework/http.php index c584d4ec670b97789d7687d6e89e0fcf510a609f..60f314202cc9e93f484cddf6901e5322196dde5c 100644 --- a/lib/public/appframework/http.php +++ b/lib/public/appframework/http.php @@ -20,10 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework\HTTP class + */ namespace OCP\AppFramework; - +/** + * Base class which contains constants for HTTP status codes + */ class Http { const STATUS_CONTINUE = 100; diff --git a/lib/public/appframework/http/jsonresponse.php b/lib/public/appframework/http/jsonresponse.php index 7c2b609bc2eae35d8d39cad142be62fdae62b940..b54b23a34e633335c2ba9c4382dc281c511ae511 100644 --- a/lib/public/appframework/http/jsonresponse.php +++ b/lib/public/appframework/http/jsonresponse.php @@ -20,6 +20,10 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework\HTTP\JSONResponse class + */ namespace OCP\AppFramework\Http; @@ -30,10 +34,15 @@ use OCP\AppFramework\Http; */ class JSONResponse extends Response { + /** + * response data + * @var array|object + */ protected $data; /** + * constructor of JSONResponse * @param array|object $data the object or array that should be transformed * @param int $statusCode the Http status code, defaults to 200 */ @@ -55,7 +64,7 @@ class JSONResponse extends Response { /** * Sets values in the data json array - * @param array|object $params an array or object which will be transformed + * @param array|object $data an array or object which will be transformed * to JSON */ public function setData($data){ diff --git a/lib/public/appframework/http/response.php b/lib/public/appframework/http/response.php index f776878a814193b55cf60818dc9937598bad9cc2..0f5a18ca4fec9c81bd772271d78f47b2826fd20e 100644 --- a/lib/public/appframework/http/response.php +++ b/lib/public/appframework/http/response.php @@ -20,6 +20,10 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework\HTTP\Response class + */ namespace OCP\AppFramework\Http; diff --git a/lib/public/appframework/http/templateresponse.php b/lib/public/appframework/http/templateresponse.php index 6156f8062fcafbb05de9b2d8a27700b6caf0f725..2200a38beca93d4c60307e1071ca7f5146a39f89 100644 --- a/lib/public/appframework/http/templateresponse.php +++ b/lib/public/appframework/http/templateresponse.php @@ -20,6 +20,10 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework\HTTP\TemplateResponse class + */ namespace OCP\AppFramework\Http; @@ -29,14 +33,34 @@ namespace OCP\AppFramework\Http; */ class TemplateResponse extends Response { + /** + * name of the template + * @var string + */ protected $templateName; + + /** + * parameters + * @var array + */ protected $params; + + /** + * rendering type (admin, user, blank) + * @var string + */ protected $renderAs; + + /** + * app name + * @var string + */ protected $appName; /** - * @param string $templateName the name of the template + * constructor of TemplateResponse * @param string $appName the name of the app to load the template from + * @param string $templateName the name of the template */ public function __construct($appName, $templateName) { $this->templateName = $templateName; diff --git a/lib/public/appframework/iapi.php b/lib/public/appframework/iapi.php index a22b056635e64c3e9d411985733b0c521c9ee827..963e870f79bd5311f4d35a09db459bb52eacec9e 100644 --- a/lib/public/appframework/iapi.php +++ b/lib/public/appframework/iapi.php @@ -20,6 +20,10 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework/IApi interface + */ namespace OCP\AppFramework; diff --git a/lib/public/appframework/middleware.php b/lib/public/appframework/middleware.php index c4ee1c0dbae18da21943b20f282bd02fc6e52fbd..24f3193993547fd12db0169de3439037a170fcdc 100644 --- a/lib/public/appframework/middleware.php +++ b/lib/public/appframework/middleware.php @@ -20,6 +20,10 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * AppFramework\Middleware class + */ namespace OCP\AppFramework; diff --git a/lib/public/authentication/iapachebackend.php b/lib/public/authentication/iapachebackend.php index 2d2f8c4e486f65ead0f9f3727c06b3e9352f9cfd..3979a14302eba4b6bea40805d39fe3c0b15d9648 100644 --- a/lib/public/authentication/iapachebackend.php +++ b/lib/public/authentication/iapachebackend.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Authentication/IApacheBackend interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Authentication; diff --git a/lib/public/db.php b/lib/public/db.php index b9424b53862803dd8c6412286595c2ce625406dc..c9997c79c3cd555fa86f9cfffa3644d658ae8c55 100644 --- a/lib/public/db.php +++ b/lib/public/db.php @@ -37,6 +37,8 @@ class DB { /** * Prepare a SQL query * @param string $query Query string + * @param int $limit Limit of the SQL statement + * @param int $offset Offset of the SQL statement * @return \MDB2_Statement_Common prepared SQL query * * SQL query via MDB2 prepare(), needs to be execute()'d! diff --git a/lib/public/defaults.php b/lib/public/defaults.php index 8f7853a86a38f5eca2f4f3e7bf377e9e008c2070..34b68903ee815d5d1238a149d5f72b4c90b81971 100644 --- a/lib/public/defaults.php +++ b/lib/public/defaults.php @@ -30,19 +30,27 @@ // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP; -/* +/** * public api to access default strings and urls for your templates */ class Defaults { + /** + * \OC_Defaults instance to retrieve the defaults + * @return string + */ private $defaults; + /** + * creates a \OC_Defaults instance which is used in all methods to retrieve the + * actual defaults + */ function __construct() { $this->defaults = new \OC_Defaults(); } /** - * @breif get base URL for the organisation behind your ownCloud instance + * get base URL for the organisation behind your ownCloud instance * @return string */ public function getBaseUrl() { @@ -50,7 +58,7 @@ class Defaults { } /** - * @breif link to the desktop sync client + * link to the desktop sync client * @return string */ public function getSyncClientUrl() { @@ -58,7 +66,7 @@ class Defaults { } /** - * @breif base URL to the documentation of your ownCloud instance + * base URL to the documentation of your ownCloud instance * @return string */ public function getDocBaseUrl() { @@ -66,7 +74,7 @@ class Defaults { } /** - * @breif name of your ownCloud instance + * name of your ownCloud instance * @return string */ public function getName() { @@ -74,7 +82,7 @@ class Defaults { } /** - * @breif Entity behind your onwCloud instance + * Entity behind your onwCloud instance * @return string */ public function getEntity() { @@ -82,7 +90,7 @@ class Defaults { } /** - * @breif ownCloud slogan + * ownCloud slogan * @return string */ public function getSlogan() { @@ -90,7 +98,7 @@ class Defaults { } /** - * @breif logo claim + * logo claim * @return string */ public function getLogoClaim() { @@ -98,7 +106,7 @@ class Defaults { } /** - * @breif footer, short version + * footer, short version * @return string */ public function getShortFooter() { @@ -106,7 +114,7 @@ class Defaults { } /** - * @breif footer, long version + * footer, long version * @return string */ public function getLongFooter() { diff --git a/lib/public/files/alreadyexistsexception.php b/lib/public/files/alreadyexistsexception.php index 3132e3b0c313377d0ea90b721b43edc04c3eaf0e..7bea947aef0ee1a48a701a7606a4e765a3492b43 100644 --- a/lib/public/files/alreadyexistsexception.php +++ b/lib/public/files/alreadyexistsexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/AlreadyExistsException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for already existing files/folders + */ class AlreadyExistsException extends \Exception {} diff --git a/lib/public/files/entitytoolargeexception.php b/lib/public/files/entitytoolargeexception.php index e0d93ccbcd0876758b81482675f3382185dd70ce..eaa68a548b9e7477d89bf0a3bdb0867da076a2c6 100644 --- a/lib/public/files/entitytoolargeexception.php +++ b/lib/public/files/entitytoolargeexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/EntityTooLargeException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for too large entity + */ class EntityTooLargeException extends \Exception {} diff --git a/lib/public/files/file.php b/lib/public/files/file.php index 730213039d027d1ba99794d94a0dd214bce7eab0..c6cda59f9b08b1e64694f48473a518b4da4d067c 100644 --- a/lib/public/files/file.php +++ b/lib/public/files/file.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/File interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; diff --git a/lib/public/files/folder.php b/lib/public/files/folder.php index 5c9785db571a31cd532e1ee70cb50dc7f9683e72..7fec1c529a598f31f9f5e7734568552676776806 100644 --- a/lib/public/files/folder.php +++ b/lib/public/files/folder.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/Folder interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; diff --git a/lib/public/files/invalidcontentexception.php b/lib/public/files/invalidcontentexception.php index 2e1356e2ba31a7ab8aea7f7f60bd8eb45eb51da5..3dfe7378c4db97e5fab7cf0f882c07134046e3d2 100644 --- a/lib/public/files/invalidcontentexception.php +++ b/lib/public/files/invalidcontentexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/InvalidContentException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for invalid content + */ class InvalidContentException extends \Exception {} diff --git a/lib/public/files/invalidpathexception.php b/lib/public/files/invalidpathexception.php index 893eb1e43f8c459f316c54622c5848fca2cf0e15..8ecfa7d89ad9ba91f2d9d63afdfbc1250b6130a9 100644 --- a/lib/public/files/invalidpathexception.php +++ b/lib/public/files/invalidpathexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/InvalidPathException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for invalid path + */ class InvalidPathException extends \Exception {} diff --git a/lib/public/files/node.php b/lib/public/files/node.php index e38bfa3b2ef3de4f87aa75a690c87f60ccd1b436..972b1cfa492b0e6361659bd4125ff6db2d3661a9 100644 --- a/lib/public/files/node.php +++ b/lib/public/files/node.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/Node interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; diff --git a/lib/public/files/notenoughspaceexception.php b/lib/public/files/notenoughspaceexception.php index 1597a4518b05119a0c2429cf2482ed3f9da2781d..17f91b31bfca5be21231e7453e79d5c3304c994a 100644 --- a/lib/public/files/notenoughspaceexception.php +++ b/lib/public/files/notenoughspaceexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/NotEnoughSpaceException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for not enough space + */ class NotEnoughSpaceException extends \Exception {} diff --git a/lib/public/files/notfoundexception.php b/lib/public/files/notfoundexception.php index 489e43fc5fb1cd97132dcdf5c2cf796b1715d27e..cb35199220b004c6891622f706175b9693ec6787 100644 --- a/lib/public/files/notfoundexception.php +++ b/lib/public/files/notfoundexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/NotFoundException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for not found entity + */ class NotFoundException extends \Exception {} diff --git a/lib/public/files/notpermittedexception.php b/lib/public/files/notpermittedexception.php index a5be43dbf577f9c77397e40c42f062f3c1b8bfca..e37bd6fad3c50759422e367a1a2663a050d2c488 100644 --- a/lib/public/files/notpermittedexception.php +++ b/lib/public/files/notpermittedexception.php @@ -20,8 +20,16 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/NotPermittedException class + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; +/** + * Exception for not permitted action + */ class NotPermittedException extends \Exception {} diff --git a/lib/public/files/storage.php b/lib/public/files/storage.php index 7a7d5ec1efce7272d5a2be8761b617d0805acb65..194b42a6481c83b8d135f35529d5b5856442cfa1 100644 --- a/lib/public/files/storage.php +++ b/lib/public/files/storage.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * Files/Storage interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP\Files; diff --git a/lib/public/iaddressbook.php b/lib/public/iaddressbook.php index 77e8750d9da50fa9da03a21f6a884dbadc47eb43..dcfe08012e67dbfc74a358883a30bcda976c90e4 100644 --- a/lib/public/iaddressbook.php +++ b/lib/public/iaddressbook.php @@ -20,6 +20,11 @@ * */ +/** + * Public interface of ownCloud for apps to use. + * IAddressBook interface + */ + // use OCP namespace for all classes that are considered public. // This means that they should be used by apps instead of the internal ownCloud classes namespace OCP { diff --git a/lib/public/icontainer.php b/lib/public/icontainer.php index 6b7052cc4f40fcc3842139049ce3b2a9c41be74a..eaffa5d5a0627f17e47f7103f783ed8ce21325df 100644 --- a/lib/public/icontainer.php +++ b/lib/public/icontainer.php @@ -64,7 +64,7 @@ interface IContainer { * In case the parameter is false the service will be recreated on every call. * * @param string $name - * @param callable $closure + * @param \Closure $closure * @param bool $shared * @return void */ diff --git a/lib/public/idbconnection.php b/lib/public/idbconnection.php index 17e3de0ffe7132a3ee7ab1ace3e33f0c0d52ff58..656b5e7e5b299723c76f6737f3a1a262d09509a5 100644 --- a/lib/public/idbconnection.php +++ b/lib/public/idbconnection.php @@ -45,7 +45,7 @@ interface IDBConnection { /** * Used to get the id of the just inserted element - * @param string $tableName the name of the table where we inserted the item + * @param string $table the name of the table where we inserted the item * @return int the id of the inserted element */ public function lastInsertId($table = null); diff --git a/lib/public/share.php b/lib/public/share.php index caa274b8579492343d23a98d99328f00928079c5..6178a5ae04302cb2cb36e0647a74259ac569f6c6 100644 --- a/lib/public/share.php +++ b/lib/public/share.php @@ -256,7 +256,7 @@ class Share { /** * Get the item of item type shared with the current user * @param string $itemType - * @param string $ItemTarget + * @param string $itemTarget * @param int $format (optional) Format type must be defined by the backend * @return Return depends on format */ @@ -268,8 +268,8 @@ class Share { /** * Get the item of item type shared with a given user by source - * @param string $ItemType - * @param string $ItemSource + * @param string $itemType + * @param string $itemSource * @param string $user User user to whom the item was shared * @return array Return list of items with file_target, permissions and expiration */ diff --git a/tests/lib/request.php b/tests/lib/request.php index 2b2094a612dd36abc7d781325a059df468d364e6..a740751f060df22f4191a13d4b735eea0e496319 100644 --- a/tests/lib/request.php +++ b/tests/lib/request.php @@ -23,4 +23,46 @@ class Test_Request extends PHPUnit_Framework_TestCase { $scriptName = OC_Request::scriptName(); $this->assertEquals('/domain.tld/ownCloud/tests/lib/request.php', $scriptName); } + + /** + * @dataProvider rawPathInfoProvider + * @param $expected + * @param $requestUri + * @param $scriptName + */ + public function testRawPathInfo($expected, $requestUri, $scriptName) { + $_SERVER['REQUEST_URI'] = $requestUri; + $_SERVER['SCRIPT_NAME'] = $scriptName; + $rawPathInfo = OC_Request::getRawPathInfo(); + $this->assertEquals($expected, $rawPathInfo); + } + + function rawPathInfoProvider() { + return array( + array('/core/ajax/translations.php', 'index.php/core/ajax/translations.php', 'index.php'), + array('/core/ajax/translations.php', '/index.php/core/ajax/translations.php', '/index.php'), + array('/core/ajax/translations.php', '//index.php/core/ajax/translations.php', '/index.php'), + ); + } + + /** + * @dataProvider rawPathInfoThrowsExceptionProvider + * @expectedException Exception + * + * @param $requestUri + * @param $scriptName + */ + public function testRawPathInfoThrowsException($requestUri, $scriptName) { + $_SERVER['REQUEST_URI'] = $requestUri; + $_SERVER['SCRIPT_NAME'] = $scriptName; + OC_Request::getRawPathInfo(); + } + + function rawPathInfoThrowsExceptionProvider() { + return array( + array('core/ajax/translations.php', '/index.php'), + array('/core/ajax/translations.php', '/index.php'), + array('//core/ajax/translations.php', '/index.php'), + ); + } }