diff --git a/3rdparty/fullcalendar/js/fullcalendar.js b/3rdparty/fullcalendar/js/fullcalendar.js index 779a313c761..314f8c8a1a5 100644 --- a/3rdparty/fullcalendar/js/fullcalendar.js +++ b/3rdparty/fullcalendar/js/fullcalendar.js @@ -4662,7 +4662,7 @@ function DayEventRenderer() { ""; } html += - "" + htmlEscape(event.title) + "" + + "" + event.title + "" + ""; if (seg.isEnd && isEventResizable(event)) { html += diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php new file mode 100644 index 00000000000..e52f633cf14 --- /dev/null +++ b/apps/admin_audit/appinfo/app.php @@ -0,0 +1,18 @@ + + + admin_audit + Log audit info + 0.1 + AGPL + Bart Visscher + 2 + Audit user actions in Owncloud + diff --git a/apps/admin_audit/lib/hooks_handlers.php b/apps/admin_audit/lib/hooks_handlers.php new file mode 100644 index 00000000000..c5aec97d939 --- /dev/null +++ b/apps/admin_audit/lib/hooks_handlers.php @@ -0,0 +1,72 @@ +VEVENT; - $description = strip_tags($request["description"]); + $description = $request["description"]; $repeat = $request["repeat"]; if($repeat != 'doesnotrepeat'){ $rrule = ''; diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index ea3a9da6f7a..bbb753d5e69 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -1,15 +1,20 @@ $source, 'token'=>$token); OC_Filesystem::readfile($source); } } else { diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php index 4abf80ae19c..6e092269250 100644 --- a/apps/files_sharing/lib_share.php +++ b/apps/files_sharing/lib_share.php @@ -47,6 +47,7 @@ class OC_Share { } if ($uid_shared_with == self::PUBLICLINK) { $token = sha1("$uid_shared_with-$source"); + OCP\Util::emitHook('OC_Share', 'public', array('source'=>$source, 'token'=>$token, 'permissions'=>$permissions)); $query->execute(array($uid_owner, self::PUBLICLINK, $source, $token, $permissions)); $this->token = $token; } else { @@ -118,6 +119,7 @@ class OC_Share { if (isset($gid)) { $uid = $uid."@".$gid; } + OCP\Util::emitHook('OC_Share', 'user', array('source'=>$source, 'target'=>$target, 'with'=>$uid, 'permissions'=>$permissions)); $query->execute(array($uid_owner, $uid, $source, $target, $permissions)); } } diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php index 1a6942ad160..62c86ee18e4 100644 --- a/apps/files_sharing/sharedstorage.php +++ b/apps/files_sharing/sharedstorage.php @@ -320,6 +320,11 @@ class OC_Filestorage_Shared extends OC_Filestorage { public function file_get_contents($path) { $source = $this->getSource($path); if ($source) { + $info = array( + 'target' => $this->datadir.$path, + 'source' => $source, + ); + OCP\Util::emitHook('OC_Filestorage_Shared', 'file_get_contents', $info); $storage = OC_Filesystem::getStorage($source); return $storage->file_get_contents($this->getInternalPath($source)); } @@ -329,6 +334,11 @@ class OC_Filestorage_Shared extends OC_Filestorage { if ($this->is_writable($path)) { $source = $this->getSource($path); if ($source) { + $info = array( + 'target' => $this->datadir.$path, + 'source' => $source, + ); + OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info); $storage = OC_Filesystem::getStorage($source); $result = $storage->file_put_contents($this->getInternalPath($source), $data); if ($result) { @@ -416,6 +426,12 @@ class OC_Filestorage_Shared extends OC_Filestorage { public function fopen($path, $mode) { $source = $this->getSource($path); if ($source) { + $info = array( + 'target' => $this->datadir.$path, + 'source' => $source, + 'mode' => $mode, + ); + OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info); $storage = OC_Filesystem::getStorage($source); return $storage->fopen($this->getInternalPath($source), $mode); } @@ -508,8 +524,9 @@ class OC_Filestorage_Shared extends OC_Filestorage { } } - public static function setup() { - OC_Filesystem::mount('OC_Filestorage_Shared', array('datadir' => '/'.OCP\USER::getUser().'/files/Shared'), '/'.OCP\USER::getUser().'/files/Shared/'); + public static function setup($options) { + $user_dir = $options['user_dir']; + OC_Filesystem::mount('OC_Filestorage_Shared', array('datadir' => $user_dir.'/Shared'), $user_dir.'/Shared/'); } /** @@ -522,11 +539,3 @@ class OC_Filestorage_Shared extends OC_Filestorage { return $this->filemtime($path)>$time; } } - -if (OCP\USER::isLoggedIn()) { - OC_Filestorage_Shared::setup(); -} else { - OCP\Util::connectHook('OC_User', 'post_login', 'OC_Filestorage_Shared', 'setup'); -} - -?> diff --git a/apps/files_sharing_log/appinfo/app.php b/apps/files_sharing_log/appinfo/app.php new file mode 100644 index 00000000000..23cae61fbf4 --- /dev/null +++ b/apps/files_sharing_log/appinfo/app.php @@ -0,0 +1,22 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +OC::$CLASSPATH['OC_Files_Sharing_Log'] = 'apps/files_sharing_log/log.php'; + +$l=new OC_L10N('files_sharing_log'); +OCP\App::addNavigationEntry( array( + 'id' => 'files_sharing_log_index', + 'order' => 5, + 'href' => OCP\Util::linkTo( 'files_sharing_log', 'index.php' ), + 'icon' => OCP\Util::imagePath( 'files_sharing_log', 'icon.png' ), + 'name' => $l->t('Shared files log')) +); + +OCP\Util::connectHook('OC_Filestorage_Shared', 'fopen', 'OC_Files_Sharing_Log', 'fopen'); +OCP\Util::connectHook('OC_Filestorage_Shared', 'file_get_contents', 'OC_Files_Sharing_Log', 'file_get_contents'); +OCP\Util::connectHook('OC_Filestorage_Shared', 'file_put_contents', 'OC_Files_Sharing_Log', 'file_put_contents'); diff --git a/apps/files_sharing_log/appinfo/database.xml b/apps/files_sharing_log/appinfo/database.xml new file mode 100644 index 00000000000..92e5f0125bd --- /dev/null +++ b/apps/files_sharing_log/appinfo/database.xml @@ -0,0 +1,44 @@ + + + *dbname* + true + false + latin1 + + *dbprefix*sharing_log + + + user_id + text + true + 64 + + + source + text + true + 128 + + + uid_who + text + true + 64 + + + when + integer + + false + true + 4 + + + mode + text + true + 4 + + +
+
diff --git a/apps/files_sharing_log/appinfo/info.xml b/apps/files_sharing_log/appinfo/info.xml new file mode 100644 index 00000000000..d5e3283df3f --- /dev/null +++ b/apps/files_sharing_log/appinfo/info.xml @@ -0,0 +1,10 @@ + + + files_sharing_log + File Shared access logging app + Log access to shared files + AGPL + Bart Visscher + 4 + true + diff --git a/apps/files_sharing_log/appinfo/version b/apps/files_sharing_log/appinfo/version new file mode 100644 index 00000000000..49d59571fbf --- /dev/null +++ b/apps/files_sharing_log/appinfo/version @@ -0,0 +1 @@ +0.1 diff --git a/apps/files_sharing_log/css/style.css b/apps/files_sharing_log/css/style.css new file mode 100644 index 00000000000..069d3a45e0d --- /dev/null +++ b/apps/files_sharing_log/css/style.css @@ -0,0 +1,7 @@ +#files_sharing_log { +padding: 2em; +} +#files_sharing_log th, +#files_sharing_log td { +padding: 0 1em; +} diff --git a/apps/files_sharing_log/index.php b/apps/files_sharing_log/index.php new file mode 100644 index 00000000000..ffacbdd8604 --- /dev/null +++ b/apps/files_sharing_log/index.php @@ -0,0 +1,21 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +OCP\User::checkLoggedIn(); +OCP\App::checkAppEnabled('files_sharing_log'); + +OCP\App::setActiveNavigationEntry('files_sharing_log_index'); + +OCP\Util::addStyle('files_sharing_log', 'style'); + +$query = OCP\DB::prepare('SELECT * FROM *PREFIX*sharing_log WHERE user_id = ?'); +$log = $query->execute(array(OCP\User::getUser()))->fetchAll(); + +$output = new OCP\Template('files_sharing_log', 'index', 'user'); +$output->assign('log', $log); +$output->printPage(); diff --git a/apps/files_sharing_log/log.php b/apps/files_sharing_log/log.php new file mode 100644 index 00000000000..e6a12b9fb1d --- /dev/null +++ b/apps/files_sharing_log/log.php @@ -0,0 +1,34 @@ +execute(array($source, $target))->fetchAll(); + $info = $info[0]; + //var_dump($info); + $query = OCP\DB::prepare("INSERT INTO *PREFIX*sharing_log VALUES (?,?,?,?,?)"); + $query->execute(array($info['uid_owner'], $source, OCP\User::getUser(), time(), $mode)); + //die; + } +} diff --git a/apps/files_sharing_log/templates/index.php b/apps/files_sharing_log/templates/index.php new file mode 100644 index 00000000000..55bfc1d6a3c --- /dev/null +++ b/apps/files_sharing_log/templates/index.php @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + +
t('File') ?>t('Who') ?>t('When') ?>t('What') ?>
+ + + + + + + t('Read'); + break; + case 'put': + echo $l->t('Write'); + break; + default: + if (strpos('r', $log['mode']) !== false): + echo $l->t('Read'); + else: + echo $l->t('Write'); + endif; + endswitch; + ?> +
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index 49f1573f7c2..8b891848c57 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -6,4 +6,4 @@ OCP\App::registerAdmin('files_versions', 'settings'); OCP\Util::addscript('files_versions', 'versions'); // Listen to write signals -OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, "OCA_Versions\Storage", "write_hook"); +OCP\Util::connectHook('OC_Filesystem', 'post_write', "OCA_Versions\Storage", "write_hook"); diff --git a/apps/gallery/lib/hooks_handlers.php b/apps/gallery/lib/hooks_handlers.php index a9f4dc6affc..093979834da 100644 --- a/apps/gallery/lib/hooks_handlers.php +++ b/apps/gallery/lib/hooks_handlers.php @@ -21,7 +21,7 @@ * */ -OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, "OC_Gallery_Hooks_Handlers", "removePhoto"); +OCP\Util::connectHook('OC_Filesystem', 'delete', "OC_Gallery_Hooks_Handlers", "removePhoto"); //OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_rename, "OC_Gallery_Hooks_Handlers", "renamePhoto"); require_once(OC::$CLASSPATH['Pictures_Managers']); diff --git a/lib/base.php b/lib/base.php index 6e209afebda..b6ca19568fe 100644 --- a/lib/base.php +++ b/lib/base.php @@ -353,12 +353,6 @@ class OC{ OC_User::useBackend( OC_Config::getValue( "userbackend", "database" )); OC_Group::useBackend(new OC_Group_Database()); - // Set up file system unless forbidden - global $RUNTIME_NOSETUPFS; - if(!$RUNTIME_NOSETUPFS ){ - OC_Util::setupFS(); - } - // Load Apps // This includes plugins for users and filesystems as well global $RUNTIME_NOAPPS; diff --git a/lib/filesystem.php b/lib/filesystem.php index 0d0943d3639..0ab3bd69acd 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -25,7 +25,7 @@ /** * Class for abstraction of filesystem functions * This class won't call any filesystem functions for itself but but will pass them to the correct OC_Filestorage object - * this class should also handle all the file premission related stuff + * this class should also handle all the file permission related stuff * * Hooks provided: * read(path) @@ -488,4 +488,5 @@ class OC_Filesystem{ } } +OC_Util::setupFS(); require_once('filecache.php'); diff --git a/lib/public/util.php b/lib/public/util.php index 7c0cb666077..c611d59a533 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -274,7 +274,7 @@ class Util { * @return array with sanitized strings or a single sinitized string, depends on the input parameter. */ public static function sanitizeHTML( $value ){ - return(\OC_Util::sanitizeHTML($value)); //Specify encoding for PHP<5.4 + return(\OC_Util::sanitizeHTML($value)); } } diff --git a/lib/util.php b/lib/util.php index 5492587862c..7792f96d445 100755 --- a/lib/util.php +++ b/lib/util.php @@ -14,30 +14,32 @@ class OC_Util { public static $core_scripts=array(); // Can be set up - public static function setupFS( $user = "", $root = "files" ){// configure the initial filesystem based on the configuration + public static function setupFS( $user = '' ){// configure the initial filesystem based on the configuration if(self::$fsSetup){//setting up the filesystem twice can only lead to trouble return false; } - // If we are not forced to load a specific user we load the one that is logged in - if( $user == "" && OC_User::isLoggedIn()){ - $user = OC_User::getUser(); - } - $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); //first set up the local "root" storage if(!self::$rootMounted){ OC_Filesystem::mount('OC_Filestorage_Local',array('datadir'=>$CONFIG_DATADIRECTORY),'/'); self::$rootMounted=true; } + + // If we are not forced to load a specific user we load the one that is logged in + if( $user == "" && OC_User::isLoggedIn()){ + $user = OC_User::getUser(); + } + if( $user != "" ){ //if we aren't logged in, there is no use to set up the filesystem - $userdirectory = $CONFIG_DATADIRECTORY."/$user/$root"; + $user_dir = '/'.$user.'/files'; + $userdirectory = $CONFIG_DATADIRECTORY.$user_dir; if( !is_dir( $userdirectory )){ mkdir( $userdirectory, 0755, true ); } //jail the user into his "home" directory - OC_Filesystem::init('/'.$user.'/'.$root); + OC_Filesystem::init($user_dir); $quotaProxy=new OC_FileProxy_Quota(); OC_FileProxy::register($quotaProxy); self::$fsSetup=true; @@ -50,6 +52,7 @@ class OC_Util { } } } + OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir)); } } @@ -321,7 +324,11 @@ class OC_Util { OC_Log::write('core','redirectToDefaultPage',OC_Log::DEBUG); if(isset($_REQUEST['redirect_url']) && (substr($_REQUEST['redirect_url'], 0, strlen(OC::$WEBROOT)) == OC::$WEBROOT || $_REQUEST['redirect_url'][0] == '/')) { header( 'Location: '.$_REQUEST['redirect_url']); - } else { + } + else if (isset(OC::$REQUESTEDAPP) && !empty(OC::$REQUESTEDAPP)) { + header( 'Location: '.OC::$WEBROOT.'/?app='.OC::$REQUESTEDAPP ); + } + else { header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', '?app=files')); } exit();