Merge pull request #1662 from owncloud/style-cleanup

Style cleanup
This commit is contained in:
Bart Visscher 2013-02-14 12:54:36 -08:00
commit 9058d398a7
78 changed files with 864 additions and 437 deletions

View File

@ -1,7 +1,7 @@
<?php if(count($_["breadcrumb"])):?> <?php if(count($_["breadcrumb"])):?>
<div class="crumb"> <div class="crumb">
<a href="<?php echo $_['baseURL']; ?>"> <a href="<?php echo $_['baseURL']; ?>">
<img src="<?php echo OCP\image_path('core','places/home.svg');?>" class="svg" /> <img src="<?php echo OCP\image_path('core', 'places/home.svg');?>" class="svg" />
</a> </a>
</div> </div>
<?php endif;?> <?php endif;?>

View File

@ -12,7 +12,7 @@ OC_FileProxy::register( new OCA\Encryption\Proxy() );
// User-related hooks // User-related hooks
OCP\Util::connectHook( 'OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login' ); OCP\Util::connectHook( 'OC_User', 'post_login', 'OCA\Encryption\Hooks', 'login' );
OCP\Util::connectHook( 'OC_User', 'pre_setPassword','OCA\Encryption\Hooks', 'setPassphrase' ); OCP\Util::connectHook( 'OC_User', 'pre_setPassword', 'OCA\Encryption\Hooks', 'setPassphrase' );
// Sharing-related hooks // Sharing-related hooks
OCP\Util::connectHook( 'OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared' ); OCP\Util::connectHook( 'OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared' );

View File

@ -14,7 +14,7 @@ fclose($fh);
$filename = $_FILES['rootcert_import']['name']; $filename = $_FILES['rootcert_import']['name'];
$view = new \OC\Files\View('/'.\OCP\User::getUser().'/files_external/uploads'); $view = new \OC\Files\View('/'.\OCP\User::getUser().'/files_external/uploads');
if (!$view->file_exists('')){ if (!$view->file_exists('')) {
$view->mkdir(''); $view->mkdir('');
} }

View File

@ -310,7 +310,7 @@ class OC_Mount_Config {
foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) { foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
$content .= "\t\t'".$group."' => array (\n"; $content .= "\t\t'".$group."' => array (\n";
foreach ($mounts as $mountPoint => $mount) { foreach ($mounts as $mountPoint => $mount) {
$content .= "\t\t\t'".addcslashes($mountPoint,"'")."' => ".str_replace("\n", '', var_export($mount, true)).", \n"; $content .= "\t\t\t'".addcslashes($mountPoint, "'")."' => ".str_replace("\n", '', var_export($mount, true)).", \n";
} }
$content .= "\t\t),\n"; $content .= "\t\t),\n";
@ -322,7 +322,7 @@ class OC_Mount_Config {
foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) { foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) {
$content .= "\t\t'".$user."' => array (\n"; $content .= "\t\t'".$user."' => array (\n";
foreach ($mounts as $mountPoint => $mount) { foreach ($mounts as $mountPoint => $mount) {
$content .= "\t\t\t'".addcslashes($mountPoint,"'")."' => ".str_replace("\n", '', var_export($mount, true)).",\n"; $content .= "\t\t\t'".addcslashes($mountPoint, "'")."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
} }
$content .= "\t\t),\n"; $content .= "\t\t),\n";
} }

View File

@ -68,7 +68,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
case 'ab': case 'ab':
//these are supported by the wrapper //these are supported by the wrapper
$context = stream_context_create(array('ftp' => array('overwrite' => true))); $context = stream_context_create(array('ftp' => array('overwrite' => true)));
return fopen($this->constructUrl($path),$mode, false,$context); return fopen($this->constructUrl($path), $mode, false, $context);
case 'r+': case 'r+':
case 'w+': case 'w+':
case 'wb+': case 'wb+':
@ -89,7 +89,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
$this->getFile($path, $tmpFile); $this->getFile($path, $tmpFile);
} }
self::$tempFiles[$tmpFile]=$path; self::$tempFiles[$tmpFile]=$path;
return fopen('close://'.$tmpFile,$mode); return fopen('close://'.$tmpFile, $mode);
} }
return false; return false;
} }

View File

@ -33,7 +33,7 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
$this->share='/'.$this->share; $this->share='/'.$this->share;
} }
if(substr($this->share, -1, 1)=='/') { if(substr($this->share, -1, 1)=='/') {
$this->share = substr($this->share,0,-1); $this->share = substr($this->share, 0, -1);
} }
} }

View File

@ -12,7 +12,7 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
private $ready = false; private $ready = false;
protected function init(){ protected function init(){
if($this->ready){ if($this->ready) {
return; return;
} }
$this->ready = true; $this->ready = true;
@ -71,39 +71,39 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
return $succes; return $succes;
} }
public function fopen($path,$mode) { public function fopen($path, $mode) {
$this->init(); $this->init();
return fopen($this->constructUrl($path),$mode); return fopen($this->constructUrl($path), $mode);
} }
public function free_space($path) { public function free_space($path) {
return 0; return 0;
} }
public function touch($path,$mtime=null) { public function touch($path, $mtime=null) {
$this->init(); $this->init();
if(is_null($mtime)) { if(is_null($mtime)) {
$fh = $this->fopen($path,'a'); $fh = $this->fopen($path, 'a');
fwrite($fh,''); fwrite($fh, '');
fclose($fh); fclose($fh);
} else { } else {
return false;//not supported return false;//not supported
} }
} }
public function getFile($path,$target) { public function getFile($path, $target) {
$this->init(); $this->init();
return copy($this->constructUrl($path),$target); return copy($this->constructUrl($path), $target);
} }
public function uploadFile($path,$target) { public function uploadFile($path, $target) {
$this->init(); $this->init();
return copy($path,$this->constructUrl($target)); return copy($path, $this->constructUrl($target));
} }
public function rename($path1,$path2) { public function rename($path1, $path2) {
$this->init(); $this->init();
return rename($this->constructUrl($path1),$this->constructUrl($path2)); return rename($this->constructUrl($path1), $this->constructUrl($path2));
} }
public function stat($path) { public function stat($path) {

View File

@ -210,7 +210,7 @@ class SWIFT extends \OC\Files\Storage\Common{
return false; return false;
} else { } else {
$fh=fopen($tmpFile, 'a'); $fh=fopen($tmpFile, 'a');
fwrite($fh,$name . "\n"); fwrite($fh, $name . "\n");
} }
} catch(\Exception $e) { } catch(\Exception $e) {
file_put_contents($tmpFile, $name . "\n"); file_put_contents($tmpFile, $name . "\n");
@ -290,7 +290,7 @@ class SWIFT extends \OC\Files\Storage\Common{
} }
private function init(){ private function init(){
if($this->ready){ if($this->ready) {
return; return;
} }
$this->ready = true; $this->ready = true;

View File

@ -49,7 +49,7 @@ class DAV extends \OC\Files\Storage\Common{
} }
private function init(){ private function init(){
if($this->ready){ if($this->ready) {
return; return;
} }
$this->ready = true; $this->ready = true;
@ -153,10 +153,10 @@ class DAV extends \OC\Files\Storage\Common{
public function unlink($path) { public function unlink($path) {
$this->init(); $this->init();
return $this->simpleResponse('DELETE', $path, null ,204); return $this->simpleResponse('DELETE', $path, null, 204);
} }
public function fopen($path,$mode) { public function fopen($path, $mode) {
$this->init(); $this->init();
$path=$this->cleanPath($path); $path=$this->cleanPath($path);
switch($mode) { switch($mode) {
@ -235,13 +235,13 @@ class DAV extends \OC\Files\Storage\Common{
$this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime)); $this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime));
} }
public function getFile($path,$target) { public function getFile($path, $target) {
$this->init(); $this->init();
$source=$this->fopen($path,'r'); $source=$this->fopen($path, 'r');
file_put_contents($target,$source); file_put_contents($target, $source);
} }
public function uploadFile($path,$target) { public function uploadFile($path, $target) {
$this->init(); $this->init();
$source=fopen($path, 'r'); $source=fopen($path, 'r');
@ -256,7 +256,7 @@ class DAV extends \OC\Files\Storage\Common{
curl_close ($curl); curl_close ($curl);
} }
public function rename($path1,$path2) { public function rename($path1, $path2) {
$this->init(); $this->init();
$path1=$this->cleanPath($path1); $path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2); $path2=$this->root.$this->cleanPath($path2);
@ -268,7 +268,7 @@ class DAV extends \OC\Files\Storage\Common{
} }
} }
public function copy($path1,$path2) { public function copy($path1, $path2) {
$this->init(); $this->init();
$path1=$this->cleanPath($path1); $path1=$this->cleanPath($path1);
$path2=$this->root.$this->cleanPath($path2); $path2=$this->root.$this->cleanPath($path2);
@ -321,7 +321,7 @@ class DAV extends \OC\Files\Storage\Common{
} }
} }
private function simpleResponse($method,$path,$body,$expected) { private function simpleResponse($method, $path, $body, $expected) {
$path=$this->cleanPath($path); $path=$this->cleanPath($path);
try { try {
$response=$this->client->request($method, $path, $body); $response=$this->client->request($method, $path, $body);

View File

@ -38,7 +38,7 @@ if ( $error ) {
$filelist .= $e.', '; $filelist .= $e.', ';
} }
$l = OC_L10N::get('files_trashbin'); $l = OC_L10N::get('files_trashbin');
$message = $l->t("Couldn't restore %s", array(rtrim($filelist,', '))); $message = $l->t("Couldn't restore %s", array(rtrim($filelist, ', ')));
OCP\JSON::error(array("data" => array("message" => $message, OCP\JSON::error(array("data" => array("message" => $message,
"success" => $success, "error" => $error))); "success" => $success, "error" => $error)));
} else { } else {

View File

@ -27,7 +27,7 @@ if ($dir) {
$pos = strpos($dir.'/', '/', 1); $pos = strpos($dir.'/', '/', 1);
$tmp = substr($dir, 0, $pos); $tmp = substr($dir, 0, $pos);
$pos = strrpos($tmp, '.d'); $pos = strrpos($tmp, '.d');
$timestamp = substr($tmp,$pos+2); $timestamp = substr($tmp, $pos+2);
$result[] = array( $result[] = array(
'id' => $entryName, 'id' => $entryName,
'timestamp' => $timestamp, 'timestamp' => $timestamp,

View File

@ -80,7 +80,7 @@ class Trashbin {
} }
} }
} else { } else {
\OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR); \OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin', \OC_log::ERROR);
} }
// get available disk space for user // get available disk space for user
@ -188,7 +188,7 @@ class Trashbin {
\OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize); \OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
return true; return true;
} else { } else {
\OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename , \OC_log::ERROR); \OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename, \OC_log::ERROR);
} }
return false; return false;

View File

@ -27,7 +27,7 @@ OCP\JSON::checkAppEnabled('user_ldap');
OCP\JSON::callCheck(); OCP\JSON::callCheck();
$prefix = $_POST['ldap_serverconfig_chooser']; $prefix = $_POST['ldap_serverconfig_chooser'];
if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)){ if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)) {
OCP\JSON::success(); OCP\JSON::success();
} else { } else {
$l=OC_L10N::get('user_ldap'); $l=OC_L10N::get('user_ldap');

View File

@ -192,7 +192,7 @@ class Connection {
private function getValue($varname) { private function getValue($varname) {
static $defaults; static $defaults;
if(is_null($defaults)){ if(is_null($defaults)) {
$defaults = $this->getDefaults(); $defaults = $this->getDefaults();
} }
return \OCP\Config::getAppValue($this->configID, return \OCP\Config::getAppValue($this->configID,
@ -235,7 +235,7 @@ class Connection {
$this->config['turnOffCertCheck'] $this->config['turnOffCertCheck']
= $this->$v('ldap_turn_off_cert_check'); = $this->$v('ldap_turn_off_cert_check');
$this->config['ldapUserDisplayName'] $this->config['ldapUserDisplayName']
= mb_strtolower($this->$v('ldap_display_name'),'UTF-8'); = mb_strtolower($this->$v('ldap_display_name'), 'UTF-8');
$this->config['ldapUserFilter'] $this->config['ldapUserFilter']
= $this->$v('ldap_userlist_filter'); = $this->$v('ldap_userlist_filter');
$this->config['ldapGroupFilter'] = $this->$v('ldap_group_filter'); $this->config['ldapGroupFilter'] = $this->$v('ldap_group_filter');
@ -336,7 +336,7 @@ class Connection {
case 'ldapBaseGroups': case 'ldapBaseGroups':
case 'ldapAttributesForUserSearch': case 'ldapAttributesForUserSearch':
case 'ldapAttributesForGroupSearch': case 'ldapAttributesForGroupSearch':
if(is_array($value)){ if(is_array($value)) {
$value = implode("\n", $value); $value = implode("\n", $value);
} }
break; break;

View File

@ -20,7 +20,7 @@
echo 'Request Method: ' . $_['sysinfo']['requestmethod'] . "\n"; echo 'Request Method: ' . $_['sysinfo']['requestmethod'] . "\n";
echo 'Database: ' . $_['sysinfo']['database'] . "\n"; echo 'Database: ' . $_['sysinfo']['database'] . "\n";
echo '</textarea>'; echo '</textarea>';
}else{ } else {
echo 'Your administrator has disabled systeminformations.'; echo 'Your administrator has disabled systeminformations.';
} }
?> ?>

View File

@ -82,7 +82,7 @@ class OC_API {
// Prepare the request variables // Prepare the request variables
if($_SERVER['REQUEST_METHOD'] == 'PUT') { if($_SERVER['REQUEST_METHOD'] == 'PUT') {
parse_str(file_get_contents("php://input"), $parameters['_put']); parse_str(file_get_contents("php://input"), $parameters['_put']);
} else if($_SERVER['REQUEST_METHOD'] == 'DELETE'){ } else if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
parse_str(file_get_contents("php://input"), $parameters['_delete']); parse_str(file_get_contents("php://input"), $parameters['_delete']);
} }
$name = $parameters['_route']; $name = $parameters['_route'];

View File

@ -83,7 +83,7 @@ class OC_App{
} }
// return // return
return true; return true;
} }
/** /**
* load a single app * load a single app
@ -157,7 +157,7 @@ class OC_App{
*/ */
public static function isShipped($appid){ public static function isShipped($appid){
$info = self::getAppInfo($appid); $info = self::getAppInfo($appid);
if(isset($info['shipped']) && $info['shipped']=='true'){ if(isset($info['shipped']) && $info['shipped']=='true') {
return true; return true;
} else { } else {
return false; return false;
@ -168,10 +168,12 @@ class OC_App{
* get all enabled apps * get all enabled apps
*/ */
public static function getEnabledApps() { public static function getEnabledApps() {
if(!OC_Config::getValue('installed', false)) if(!OC_Config::getValue('installed', false)) {
return array(); return array();
}
$apps=array('files'); $apps=array('files');
$query = OC_DB::prepare( 'SELECT `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\'' ); $query = OC_DB::prepare( 'SELECT `appid` FROM `*PREFIX*appconfig`'
.' WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\'' );
$result=$query->execute(); $result=$query->execute();
while($row=$result->fetchRow()) { while($row=$result->fetchRow()) {
if(array_search($row['appid'], $apps)===false) { if(array_search($row['appid'], $apps)===false) {
@ -212,7 +214,8 @@ class OC_App{
$appdata=OC_OCSClient::getApplication($app); $appdata=OC_OCSClient::getApplication($app);
$download=OC_OCSClient::getApplicationDownload($app, 1); $download=OC_OCSClient::getApplicationDownload($app, 1);
if(isset($download['downloadlink']) and $download['downloadlink']!='') { if(isset($download['downloadlink']) and $download['downloadlink']!='') {
$app=OC_Installer::installApp(array('source'=>'http', 'href'=>$download['downloadlink'],'appdata'=>$appdata)); $info = array('source'=>'http', 'href'=>$download['downloadlink'], 'appdata'=>$appdata);
$app=OC_Installer::installApp($info);
} }
} }
} }
@ -221,7 +224,10 @@ class OC_App{
$info=OC_App::getAppInfo($app); $info=OC_App::getAppInfo($app);
$version=OC_Util::getVersion(); $version=OC_Util::getVersion();
if(!isset($info['require']) or ($version[0]>$info['require'])) { if(!isset($info['require']) or ($version[0]>$info['require'])) {
OC_Log::write('core', 'App "'.$info['name'].'" can\'t be installed because it is not compatible with this version of ownCloud', OC_Log::ERROR); OC_Log::write('core',
'App "'.$info['name'].'" can\'t be installed because it is'
.' not compatible with this version of ownCloud',
OC_Log::ERROR);
return false; return false;
}else{ }else{
OC_Appconfig::setValue( $app, 'enabled', 'yes' ); OC_Appconfig::setValue( $app, 'enabled', 'yes' );
@ -247,7 +253,7 @@ class OC_App{
OC_Appconfig::setValue( $app, 'enabled', 'no' ); OC_Appconfig::setValue( $app, 'enabled', 'no' );
// check if app is a shipped app or not. if not delete // check if app is a shipped app or not. if not delete
if(!OC_App::isShipped( $app )){ if(!OC_App::isShipped( $app )) {
OC_Installer::removeApp( $app ); OC_Installer::removeApp( $app );
} }
} }
@ -336,33 +342,70 @@ class OC_App{
// by default, settings only contain the help menu // by default, settings only contain the help menu
if(OC_Config::getValue('knowledgebaseenabled', true)==true) { if(OC_Config::getValue('knowledgebaseenabled', true)==true) {
$settings = array( $settings = array(
array( "id" => "help", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_help" ), "name" => $l->t("Help"), "icon" => OC_Helper::imagePath( "settings", "help.svg" )) array(
"id" => "help",
"order" => 1000,
"href" => OC_Helper::linkToRoute( "settings_help" ),
"name" => $l->t("Help"),
"icon" => OC_Helper::imagePath( "settings", "help.svg" )
)
); );
} }
// if the user is logged-in // if the user is logged-in
if (OC_User::isLoggedIn()) { if (OC_User::isLoggedIn()) {
// personal menu // personal menu
$settings[] = array( "id" => "personal", "order" => 1, "href" => OC_Helper::linkToRoute( "settings_personal" ), "name" => $l->t("Personal"), "icon" => OC_Helper::imagePath( "settings", "personal.svg" )); $settings[] = array(
"id" => "personal",
"order" => 1,
"href" => OC_Helper::linkToRoute( "settings_personal" ),
"name" => $l->t("Personal"),
"icon" => OC_Helper::imagePath( "settings", "personal.svg" )
);
// if there are some settings forms // if there are some settings forms
if(!empty(self::$settingsForms)) if(!empty(self::$settingsForms)) {
// settings menu // settings menu
$settings[]=array( "id" => "settings", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_settings" ), "name" => $l->t("Settings"), "icon" => OC_Helper::imagePath( "settings", "settings.svg" )); $settings[]=array(
"id" => "settings",
"order" => 1000,
"href" => OC_Helper::linkToRoute( "settings_settings" ),
"name" => $l->t("Settings"),
"icon" => OC_Helper::imagePath( "settings", "settings.svg" )
);
}
//SubAdmins are also allowed to access user management //SubAdmins are also allowed to access user management
if(OC_SubAdmin::isSubAdmin(OC_User::getUser())) { if(OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
// admin users menu // admin users menu
$settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkToRoute( "settings_users" ), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath( "settings", "users.svg" )); $settings[] = array(
"id" => "core_users",
"order" => 2,
"href" => OC_Helper::linkToRoute( "settings_users" ),
"name" => $l->t("Users"),
"icon" => OC_Helper::imagePath( "settings", "users.svg" )
);
} }
// if the user is an admin // if the user is an admin
if(OC_User::isAdminUser(OC_User::getUser())) { if(OC_User::isAdminUser(OC_User::getUser())) {
// admin apps menu // admin apps menu
$settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkToRoute( "settings_apps" ).'?installed', "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" )); $settings[] = array(
"id" => "core_apps",
"order" => 3,
"href" => OC_Helper::linkToRoute( "settings_apps" ).'?installed',
"name" => $l->t("Apps"),
"icon" => OC_Helper::imagePath( "settings", "apps.svg" )
);
$settings[]=array( "id" => "admin", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_admin" ), "name" => $l->t("Admin"), "icon" => OC_Helper::imagePath( "settings", "admin.svg" )); $settings[]=array(
"id" => "admin",
"order" => 1000,
"href" => OC_Helper::linkToRoute( "settings_admin" ),
"name" => $l->t("Admin"),
"icon" => OC_Helper::imagePath( "settings", "admin.svg" )
);
} }
} }
@ -395,9 +438,10 @@ class OC_App{
} }
foreach(OC::$APPSROOTS as $dir) { foreach(OC::$APPSROOTS as $dir) {
if(isset($dir['writable']) && $dir['writable']===true) if(isset($dir['writable']) && $dir['writable']===true) {
return $dir['path']; return $dir['path'];
} }
}
OC_Log::write('core', 'No application directories are marked as writable.', OC_Log::ERROR); OC_Log::write('core', 'No application directories are marked as writable.', OC_Log::ERROR);
return null; return null;
@ -641,7 +685,8 @@ class OC_App{
public static function listAllApps() { public static function listAllApps() {
$installedApps = OC_App::getAllApps(); $installedApps = OC_App::getAllApps();
//TODO which apps do we want to blacklist and how do we integrate blacklisting with the multi apps folder feature? //TODO which apps do we want to blacklist and how do we integrate
// blacklisting with the multi apps folder feature?
$blacklist = array('files');//we dont want to show configuration for these $blacklist = array('files');//we dont want to show configuration for these
$appList = array(); $appList = array();
@ -702,11 +747,12 @@ class OC_App{
$combinedApps = $appList; $combinedApps = $appList;
} }
return $combinedApps; return $combinedApps;
} }
/** /**
* @brief: get a list of all apps on apps.owncloud.com * @brief: get a list of all apps on apps.owncloud.com
* @return array, multi-dimensional array of apps. Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description * @return array, multi-dimensional array of apps.
* Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
*/ */
public static function getAppstoreApps( $filter = 'approved' ) { public static function getAppstoreApps( $filter = 'approved' ) {
$categoryNames = OC_OCSClient::getCategories(); $categoryNames = OC_OCSClient::getCategories();
@ -726,7 +772,7 @@ class OC_App{
$app1[$i]['ocs_id'] = $app['id']; $app1[$i]['ocs_id'] = $app['id'];
$app1[$i]['internal'] = $app1[$i]['active'] = 0; $app1[$i]['internal'] = $app1[$i]['active'] = 0;
$app1[$i]['update'] = false; $app1[$i]['update'] = false;
if($app['label']=='recommended'){ if($app['label']=='recommended') {
$app1[$i]['internallabel'] = 'Recommended'; $app1[$i]['internallabel'] = 'Recommended';
$app1[$i]['internalclass'] = 'recommendedapp'; $app1[$i]['internalclass'] = 'recommendedapp';
}else{ }else{
@ -774,7 +820,9 @@ class OC_App{
$installedVersion = $versions[$app]; $installedVersion = $versions[$app];
if (version_compare($currentVersion, $installedVersion, '>')) { if (version_compare($currentVersion, $installedVersion, '>')) {
$info = self::getAppInfo($app); $info = self::getAppInfo($app);
OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion, OC_Log::DEBUG); OC_Log::write($app,
'starting app upgrade from '.$installedVersion.' to '.$currentVersion,
OC_Log::DEBUG);
try { try {
OC_App::updateApp($app); OC_App::updateApp($app);
OC_Hook::emit('update', 'success', 'Updated '.$info['name'].' app'); OC_Hook::emit('update', 'success', 'Updated '.$info['name'].' app');
@ -804,7 +852,10 @@ class OC_App{
// check if the app is compatible with this version of ownCloud // check if the app is compatible with this version of ownCloud
$info = OC_App::getAppInfo($app); $info = OC_App::getAppInfo($app);
if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) { if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) {
OC_Log::write('core', 'App "'.$info['name'].'" ('.$app.') can\'t be used because it is not compatible with this version of ownCloud', OC_Log::ERROR); OC_Log::write('core',
'App "'.$info['name'].'" ('.$app.') can\'t be used because it is'
.' not compatible with this version of ownCloud',
OC_Log::ERROR);
OC_App::disable( $app ); OC_App::disable( $app );
OC_Hook::emit('update', 'success', 'Disabled '.$info['name'].' app because it is not compatible'); OC_Hook::emit('update', 'success', 'Disabled '.$info['name'].' app because it is not compatible');
} }
@ -820,7 +871,8 @@ class OC_App{
return $versions; // when function is used besides in checkUpgrade return $versions; // when function is used besides in checkUpgrade
} }
$versions=array(); $versions=array();
$query = OC_DB::prepare( 'SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig` WHERE `configkey` = \'installed_version\'' ); $query = OC_DB::prepare( 'SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig`'
.' WHERE `configkey` = \'installed_version\'' );
$result = $query->execute(); $result = $query->execute();
while($row = $result->fetchRow()) { while($row = $result->fetchRow()) {
$versions[$row['appid']]=$row['configvalue']; $versions[$row['appid']]=$row['configvalue'];

View File

@ -91,7 +91,8 @@ class OC_Appconfig{
*/ */
public static function getValue( $app, $key, $default = null ) { public static function getValue( $app, $key, $default = null ) {
// At least some magic in here :-) // At least some magic in here :-)
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*appconfig` WHERE `appid` = ? AND `configkey` = ?' ); $query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*appconfig`'
.' WHERE `appid` = ? AND `configkey` = ?' );
$result = $query->execute( array( $app, $key )); $result = $query->execute( array( $app, $key ));
$row = $result->fetchRow(); $row = $result->fetchRow();
if($row) { if($row) {
@ -124,11 +125,13 @@ class OC_Appconfig{
public static function setValue( $app, $key, $value ) { public static function setValue( $app, $key, $value ) {
// Does the key exist? yes: update. No: insert // Does the key exist? yes: update. No: insert
if(! self::hasKey($app, $key)) { if(! self::hasKey($app, $key)) {
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*appconfig` ( `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ? )' ); $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*appconfig` ( `appid`, `configkey`, `configvalue` )'
.' VALUES( ?, ?, ? )' );
$query->execute( array( $app, $key, $value )); $query->execute( array( $app, $key, $value ));
} }
else{ else{
$query = OC_DB::prepare( 'UPDATE `*PREFIX*appconfig` SET `configvalue` = ? WHERE `appid` = ? AND `configkey` = ?' ); $query = OC_DB::prepare( 'UPDATE `*PREFIX*appconfig` SET `configvalue` = ?'
.' WHERE `appid` = ? AND `configkey` = ?' );
$query->execute( array( $value, $app, $key )); $query->execute( array( $value, $app, $key ));
} }
} }

View File

@ -82,7 +82,8 @@ class OC_BackgroundJob_QueuedTask{
* @return id of task * @return id of task
*/ */
public static function add( $app, $klass, $method, $parameters ) { public static function add( $app, $klass, $method, $parameters ) {
$stmt = OC_DB::prepare( 'INSERT INTO `*PREFIX*queuedtasks` (`app`, `klass`, `method`, `parameters`) VALUES(?,?,?,?)' ); $stmt = OC_DB::prepare( 'INSERT INTO `*PREFIX*queuedtasks` (`app`, `klass`, `method`, `parameters`)'
.' VALUES(?,?,?,?)' );
$result = $stmt->execute(array($app, $klass, $method, $parameters )); $result = $stmt->execute(array($app, $klass, $method, $parameters ));
return OC_DB::insertid(); return OC_DB::insertid();

View File

@ -162,7 +162,9 @@ class OC {
OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/'); OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/');
OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/'); OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/');
} else { } else {
echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file."); echo("3rdparty directory not found! Please put the ownCloud 3rdparty'
.' folder in the ownCloud folder or the folder above.'
.' You can also configure the location in the config.php file.");
exit; exit;
} }
// search the apps folder // search the apps folder
@ -178,11 +180,16 @@ class OC {
} elseif (file_exists(OC::$SERVERROOT . '/apps')) { } elseif (file_exists(OC::$SERVERROOT . '/apps')) {
OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true); OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true);
} elseif (file_exists(OC::$SERVERROOT . '/../apps')) { } elseif (file_exists(OC::$SERVERROOT . '/../apps')) {
OC::$APPSROOTS[] = array('path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps', 'url' => '/apps', 'writable' => true); OC::$APPSROOTS[] = array(
'path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps',
'url' => '/apps',
'writable' => true
);
} }
if (empty(OC::$APPSROOTS)) { if (empty(OC::$APPSROOTS)) {
echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file."); echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder'
.' or the folder above. You can also configure the location in the config.php file.");
exit; exit;
} }
$paths = array(); $paths = array();
@ -202,9 +209,14 @@ class OC {
} }
public static function checkConfig() { public static function checkConfig() {
if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) { if (file_exists(OC::$SERVERROOT . "/config/config.php")
and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
$tmpl = new OC_Template('', 'error', 'guest'); $tmpl = new OC_Template('', 'error', 'guest');
$tmpl->assign('errors', array(1 => array('error' => "Can't write into config directory 'config'", 'hint' => "You can usually fix this by giving the webserver user write access to the config directory in owncloud"))); $tmpl->assign('errors', array(1 => array(
'error' => "Can't write into config directory 'config'",
'hint' => "You can usually fix this by giving the webserver user write access'
.' to the config directory in owncloud"
)));
$tmpl->printPage(); $tmpl->printPage();
exit(); exit();
} }
@ -262,7 +274,9 @@ class OC {
if (version_compare($currentVersion, $installedVersion, '>')) { if (version_compare($currentVersion, $installedVersion, '>')) {
if ($showTemplate && !OC_Config::getValue('maintenance', false)) { if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
OC_Config::setValue('maintenance', true); OC_Config::setValue('maintenance', true);
OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG); OC_Log::write('core',
'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion,
OC_Log::DEBUG);
OC_Util::addscript('update'); OC_Util::addscript('update');
$tmpl = new OC_Template('', 'update', 'guest'); $tmpl = new OC_Template('', 'update', 'guest');
$tmpl->assign('version', OC_Util::getVersionString()); $tmpl->assign('version', OC_Util::getVersionString());
@ -393,14 +407,16 @@ class OC {
} }
//set http auth headers for apache+php-cgi work around //set http auth headers for apache+php-cgi work around
if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) { if (isset($_SERVER['HTTP_AUTHORIZATION'])
&& preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
list($name, $password) = explode(':', base64_decode($matches[1]), 2); list($name, $password) = explode(':', base64_decode($matches[1]), 2);
$_SERVER['PHP_AUTH_USER'] = strip_tags($name); $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password); $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
} }
//set http auth headers for apache+php-cgi work around if variable gets renamed by apache //set http auth headers for apache+php-cgi work around if variable gets renamed by apache
if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) { if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])
&& preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) {
list($name, $password) = explode(':', base64_decode($matches[1]), 2); list($name, $password) = explode(':', base64_decode($matches[1]), 2);
$_SERVER['PHP_AUTH_USER'] = strip_tags($name); $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password); $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
@ -447,7 +463,8 @@ class OC {
OC_User::useBackend(new OC_User_Database()); OC_User::useBackend(new OC_User_Database());
OC_Group::useBackend(new OC_Group_Database()); OC_Group::useBackend(new OC_Group_Database());
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) { if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id'])
&& $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) {
OC_User::logout(); OC_User::logout();
} }
@ -504,7 +521,9 @@ class OC {
// write error into log if locale can't be set // write error into log if locale can't be set
if (OC_Util::issetlocaleworking() == false) { if (OC_Util::issetlocaleworking() == false) {
OC_Log::write('core', 'setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system', OC_Log::ERROR); OC_Log::write('core',
'setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system',
OC_Log::ERROR);
} }
if (OC_Config::getValue('installed', false)) { if (OC_Config::getValue('installed', false)) {
if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') { if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
@ -556,7 +575,7 @@ class OC {
} }
$request = OC_Request::getPathInfo(); $request = OC_Request::getPathInfo();
if(substr($request, -3) !== '.js'){// we need these files during the upgrade if(substr($request, -3) !== '.js') {// we need these files during the upgrade
self::checkMaintenanceMode(); self::checkMaintenanceMode();
self::checkUpgrade(); self::checkUpgrade();
} }

View File

@ -166,7 +166,8 @@ class OC_Config{
$tmpl = new OC_Template( '', 'error', 'guest' ); $tmpl = new OC_Template( '', 'error', 'guest' );
$tmpl->assign('errors', array(1=>array( $tmpl->assign('errors', array(1=>array(
'error'=>"Can't write into config directory 'config'", 'error'=>"Can't write into config directory 'config'",
'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud"))); 'hint'=>"You can usually fix this by giving the webserver user write access'
.' to the config directory in owncloud")));
$tmpl->printPage(); $tmpl->printPage();
exit; exit;
} }

View File

@ -160,7 +160,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
$chunks = array_chunk($paths, 200, false); $chunks = array_chunk($paths, 200, false);
foreach ($chunks as $pack) { foreach ($chunks as $pack) {
$placeholders = join(',', array_fill(0, count($pack), '?')); $placeholders = join(',', array_fill(0, count($pack), '?'));
$query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' ); $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties`'
.' WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' );
array_unshift($pack, OC_User::getUser()); // prepend userid array_unshift($pack, OC_User::getUser()); // prepend userid
$result = $query->execute( $pack ); $result = $query->execute( $pack );
while($row = $result->fetchRow()) { while($row = $result->fetchRow()) {

View File

@ -84,7 +84,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/ */
public function get() { public function get() {
return \OC\Files\Filesystem::fopen($this->path,'rb'); return \OC\Files\Filesystem::fopen($this->path, 'rb');
} }
@ -113,8 +113,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
/** /**
* Returns the ETag for a file * Returns the ETag for a file
* *
* An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change. * An ETag is a unique identifier representing the current version of the
* The ETag is an arbritrary string, but MUST be surrounded by double-quotes. * file. If the file changes, the ETag MUST change. The ETag is an
* arbritrary string, but MUST be surrounded by double-quotes.
* *
* Return null if the ETag can not effectively be determined * Return null if the ETag can not effectively be determined
* *

View File

@ -44,7 +44,8 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
// NOTE: SQLite requires time() to be inserted directly. That's ugly // NOTE: SQLite requires time() to be inserted directly. That's ugly
// but otherwise reading locks from SQLite Databases will return // but otherwise reading locks from SQLite Databases will return
// nothing // nothing
$query = 'SELECT * FROM `*PREFIX*locks` WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)'; $query = 'SELECT * FROM `*PREFIX*locks`'
.' WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
$params = array(OC_User::getUser(), $uri); $params = array(OC_User::getUser(), $uri);
// We need to check locks for every part in the uri. // We need to check locks for every part in the uri.
@ -116,11 +117,33 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
} }
if ($exists) { if ($exists) {
$query = OC_DB::prepare( 'UPDATE `*PREFIX*locks` SET `owner` = ?, `timeout` = ?, `scope` = ?, `depth` = ?, `uri` = ?, `created` = ? WHERE `userid` = ? AND `token` = ?' ); $query = OC_DB::prepare( 'UPDATE `*PREFIX*locks`'
$result = $query->execute( array($lockInfo->owner,$lockInfo->timeout,$lockInfo->scope,$lockInfo->depth,$uri,$lockInfo->created,OC_User::getUser(),$lockInfo->token)); .' SET `owner` = ?, `timeout` = ?, `scope` = ?, `depth` = ?, `uri` = ?, `created` = ?'
.' WHERE `userid` = ? AND `token` = ?' );
$result = $query->execute( array(
$lockInfo->owner,
$lockInfo->timeout,
$lockInfo->scope,
$lockInfo->depth,
$uri,
$lockInfo->created,
OC_User::getUser(),
$lockInfo->token)
);
} else { } else {
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*locks` (`userid`,`owner`,`timeout`,`scope`,`depth`,`uri`,`created`,`token`) VALUES (?,?,?,?,?,?,?,?)' ); $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*locks`'
$result = $query->execute( array(OC_User::getUser(),$lockInfo->owner,$lockInfo->timeout,$lockInfo->scope,$lockInfo->depth,$uri,$lockInfo->created,$lockInfo->token)); .' (`userid`,`owner`,`timeout`,`scope`,`depth`,`uri`,`created`,`token`)'
.' VALUES (?,?,?,?,?,?,?,?)' );
$result = $query->execute( array(
OC_User::getUser(),
$lockInfo->owner,
$lockInfo->timeout,
$lockInfo->scope,
$lockInfo->depth,
$uri,
$lockInfo->created,
$lockInfo->token)
);
} }
return true; return true;

View File

@ -84,12 +84,13 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
$newPath = $parentPath . '/' . $newName; $newPath = $parentPath . '/' . $newName;
$oldPath = $this->path; $oldPath = $this->path;
\OC\Files\Filesystem::rename($this->path,$newPath); \OC\Files\Filesystem::rename($this->path, $newPath);
$this->path = $newPath; $this->path = $newPath;
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?' ); $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ?'
$query->execute( array( $newPath,OC_User::getUser(), $oldPath )); .' WHERE `userid` = ? AND `propertypath` = ?' );
$query->execute( array( $newPath, OC_User::getUser(), $oldPath ));
} }
@ -149,7 +150,8 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
// If it was null, we need to delete the property // If it was null, we need to delete the property
if (is_null($propertyValue)) { if (is_null($propertyValue)) {
if(array_key_exists( $propertyName, $existing )) { if(array_key_exists( $propertyName, $existing )) {
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' ); $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`'
.' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
$query->execute( array( OC_User::getUser(), $this->path, $propertyName )); $query->execute( array( OC_User::getUser(), $this->path, $propertyName ));
} }
} }
@ -160,10 +162,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
$this->touch($propertyValue); $this->touch($propertyValue);
} else { } else {
if(!array_key_exists( $propertyName, $existing )) { if(!array_key_exists( $propertyName, $existing )) {
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' ); $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties`'
.' (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
$query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue )); $query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue ));
} else { } else {
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' ); $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ?'
.' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
$query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName )); $query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName ));
} }
} }

View File

@ -40,7 +40,7 @@ class OC_Connector_Sabre_Request extends Sabre_HTTP_Request {
* @return string * @return string
*/ */
public function getRawServerValue($field) { public function getRawServerValue($field) {
if($field == 'REQUEST_URI'){ if($field == 'REQUEST_URI') {
return $this->getUri(); return $this->getUri();
} }
else{ else{

View File

@ -232,7 +232,8 @@ class OC_DB {
'log_line_break' => '<br>', 'log_line_break' => '<br>',
'idxname_format' => '%s', 'idxname_format' => '%s',
'debug' => true, 'debug' => true,
'quote_identifier' => true ); 'quote_identifier' => true
);
// Add the dsn according to the database type // Add the dsn according to the database type
switch($type) { switch($type) {
@ -474,7 +475,8 @@ class OC_DB {
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
*/ */
if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't
$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content ); $content = str_replace( '<default>0000-00-00 00:00:00</default>',
'<default>CURRENT_TIMESTAMP</default>', $content );
} }
file_put_contents( $file2, $content ); file_put_contents( $file2, $content );
@ -499,7 +501,8 @@ class OC_DB {
// Die in case something went wrong // Die in case something went wrong
if( $ret instanceof MDB2_Error ) { if( $ret instanceof MDB2_Error ) {
OC_Template::printErrorPage( self::$MDB2->getDebugOutput().' '.$ret->getMessage() . ': ' . $ret->getUserInfo() ); OC_Template::printErrorPage( self::$MDB2->getDebugOutput().' '.$ret->getMessage() . ': '
. $ret->getUserInfo() );
} }
return true; return true;
@ -541,7 +544,8 @@ class OC_DB {
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
*/ */
if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't
$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content ); $content = str_replace( '<default>0000-00-00 00:00:00</default>',
'<default>CURRENT_TIMESTAMP</default>', $content );
} }
file_put_contents( $file2, $content ); file_put_contents( $file2, $content );
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false); $op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
@ -679,7 +683,8 @@ class OC_DB {
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'strftime(\'%s\',\'now\')', $query ); $query = str_ireplace( 'UNIX_TIMESTAMP()', 'strftime(\'%s\',\'now\')', $query );
}elseif( $type == 'pgsql' ) { }elseif( $type == 'pgsql' ) {
$query = str_replace( '`', '"', $query ); $query = str_replace( '`', '"', $query );
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'cast(extract(epoch from current_timestamp) as integer)', $query ); $query = str_ireplace( 'UNIX_TIMESTAMP()', 'cast(extract(epoch from current_timestamp) as integer)',
$query );
}elseif( $type == 'oci' ) { }elseif( $type == 'oci' ) {
$query = str_replace( '`', '"', $query ); $query = str_replace( '`', '"', $query );
$query = str_ireplace( 'NOW()', 'CURRENT_TIMESTAMP', $query ); $query = str_ireplace( 'NOW()', 'CURRENT_TIMESTAMP', $query );

View File

@ -62,7 +62,8 @@ class OC_EventSource{
$type=null; $type=null;
} }
if($this->fallback) { if($this->fallback) {
$response='<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack('.$this->fallBackId.',"'.$type.'",'.json_encode($data).')</script>'.PHP_EOL; $response='<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack('
.$this->fallBackId.',"'.$type.'",'.json_encode($data).')</script>'.PHP_EOL;
echo $response; echo $response;
}else{ }else{
if($type) { if($type) {

View File

@ -97,7 +97,8 @@ class OC_FileChunking {
$absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path)); $absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path));
$data = ''; $data = '';
// use file_put_contents as method because that best matches what this function does // use file_put_contents as method because that best matches what this function does
if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && \OC\Files\Filesystem::isValidPath($path)) { if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data)
&& \OC\Files\Filesystem::isValidPath($path)) {
$path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath); $path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath);
$exists = \OC\Files\Filesystem::file_exists($path); $exists = \OC\Files\Filesystem::file_exists($path);
$run = true; $run = true;

View File

@ -28,7 +28,7 @@ class OC_FileProxy_FileOperations extends OC_FileProxy{
static $rootView; static $rootView;
public function premkdir($path) { public function premkdir($path) {
if(!self::$rootView){ if(!self::$rootView) {
self::$rootView = new \OC\Files\View(''); self::$rootView = new \OC\Files\View('');
} }
return !self::$rootView->file_exists($path); return !self::$rootView->file_exists($path);

View File

@ -95,7 +95,7 @@ class OC_FileProxy_Quota extends OC_FileProxy{
} }
public function preCopy($path1, $path2) { public function preCopy($path1, $path2) {
if(!self::$rootView){ if(!self::$rootView) {
self::$rootView = new \OC\Files\View(''); self::$rootView = new \OC\Files\View('');
} }
return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1); return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1);

View File

@ -200,7 +200,8 @@ class OC_Files {
$errors = array( $errors = array(
array( array(
'error' => $l->t('ZIP download is turned off.'), 'error' => $l->t('ZIP download is turned off.'),
'hint' => $l->t('Files need to be downloaded one by one.') . '<br/><a href="javascript:history.back()">' . $l->t('Back to Files') . '</a>', 'hint' => $l->t('Files need to be downloaded one by one.')
. '<br/><a href="javascript:history.back()">' . $l->t('Back to Files') . '</a>',
) )
); );
$tmpl->assign('errors', $errors); $tmpl->assign('errors', $errors);
@ -225,7 +226,9 @@ class OC_Files {
$errors = array( $errors = array(
array( array(
'error' => $l->t('Selected files too large to generate zip file.'), 'error' => $l->t('Selected files too large to generate zip file.'),
'hint' => 'Download the files in smaller chunks, seperately or kindly ask your administrator.<br/><a href="javascript:history.back()">' . $l->t('Back to Files') . '</a>', 'hint' => 'Download the files in smaller chunks, seperately'
.' or kindly ask your administrator.<br/><a href="javascript:history.back()">'
. $l->t('Back to Files') . '</a>',
) )
); );
$tmpl->assign('errors', $errors); $tmpl->assign('errors', $errors);
@ -287,7 +290,9 @@ class OC_Files {
file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess); file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess);
return OC_Helper::computerFileSize($size); return OC_Helper::computerFileSize($size);
} else { } else {
OC_Log::write('files', 'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions', OC_Log::WARN); OC_Log::write('files',
'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions',
OC_Log::WARN);
} }
return false; return false;
} }

View File

@ -198,7 +198,8 @@ class Cache {
$params[] = $this->numericId; $params[] = $this->numericId;
$valuesPlaceholder = array_fill(0, count($queryParts), '?'); $valuesPlaceholder = array_fill(0, count($queryParts), '?');
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ') VALUES(' . implode(', ', $valuesPlaceholder) . ')'); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ')'
.' VALUES(' . implode(', ', $valuesPlaceholder) . ')');
$query->execute($params); $query->execute($params);
return (int)\OC_DB::insertid('*PREFIX*filecache'); return (int)\OC_DB::insertid('*PREFIX*filecache');
@ -215,7 +216,8 @@ class Cache {
list($queryParts, $params) = $this->buildParts($data); list($queryParts, $params) = $this->buildParts($data);
$params[] = $id; $params[] = $id;
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? WHERE fileid = ?'); $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=?'
.' WHERE fileid = ?');
$query->execute($params); $query->execute($params);
} }
@ -332,7 +334,8 @@ class Cache {
$query->execute(array($targetPath, md5($targetPath), $child['fileid'])); $query->execute(array($targetPath, md5($targetPath), $child['fileid']));
} }
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =? WHERE `fileid` = ?'); $query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =?'
.' WHERE `fileid` = ?');
$query->execute(array($target, md5($target), $newParentId, $sourceId)); $query->execute(array($target, md5($target), $newParentId, $sourceId));
} }
@ -492,7 +495,8 @@ class Cache {
* @return string|bool the path of the folder or false when no folder matched * @return string|bool the path of the folder or false when no folder matched
*/ */
public function getIncomplete() { public function getIncomplete() {
$query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1'); $query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache`'
.' WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1');
$query->execute(array($this->numericId)); $query->execute(array($this->numericId));
if ($row = $query->fetchRow()) { if ($row = $query->fetchRow()) {
return $row['path']; return $row['path'];

View File

@ -18,7 +18,7 @@ class Permissions {
* @param \OC\Files\Storage\Storage|string $storage * @param \OC\Files\Storage\Storage|string $storage
*/ */
public function __construct($storage){ public function __construct($storage){
if($storage instanceof \OC\Files\Storage\Storage){ if($storage instanceof \OC\Files\Storage\Storage) {
$this->storageId = $storage->getId(); $this->storageId = $storage->getId();
}else{ }else{
$this->storageId = $storage; $this->storageId = $storage;
@ -51,9 +51,11 @@ class Permissions {
*/ */
public function set($fileId, $user, $permissions) { public function set($fileId, $user, $permissions) {
if (self::get($fileId, $user) !== -1) { if (self::get($fileId, $user) !== -1) {
$query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?'); $query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ?'
.' WHERE `user` = ? AND `fileid` = ?');
} else { } else {
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )'); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`)'
.' VALUES(?, ?,? )');
} }
$query->execute(array($permissions, $user, $fileId)); $query->execute(array($permissions, $user, $fileId));
} }
@ -73,7 +75,8 @@ class Permissions {
$params[] = $user; $params[] = $user;
$inPart = implode(', ', array_fill(0, count($fileIds), '?')); $inPart = implode(', ', array_fill(0, count($fileIds), '?'));
$query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?'); $query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions`'
.' WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
$result = $query->execute($params); $result = $query->execute($params);
$filePermissions = array(); $filePermissions = array();
while ($row = $result->fetchRow()) { while ($row = $result->fetchRow()) {

View File

@ -69,7 +69,8 @@ class Upgrade {
( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` ) ( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` )
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$insertQuery->execute(array($data['id'], $data['storage'], $data['path'], $data['path_hash'], $data['parent'], $data['name'], $insertQuery->execute(array($data['id'], $data['storage'],
$data['path'], $data['path_hash'], $data['parent'], $data['name'],
$data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted'])); $data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted']));
} }
} }

View File

@ -135,7 +135,9 @@ class Filesystem {
/** /**
* get the mountpoint of the storage object for a path * get the mountpoint of the storage object for a path
( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account * ( note: because a storage is not always mounted inside the fakeroot, the
* returned mountpoint is relative to the absolute root of the filesystem
* and doesn't take the chroot into account )
* *
* @param string $path * @param string $path
* @return string * @return string
@ -318,7 +320,8 @@ class Filesystem {
/** /**
* return the path to a local version of the file * return the path to a local version of the file
* we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed * we need this because we can't know if a file is stored local or not from
* outside the filestorage and for some purposes a local file is needed
* *
* @param string $path * @param string $path
* @return string * @return string

View File

@ -107,7 +107,7 @@ class Mapper
private function stripLast($path) { private function stripLast($path) {
if (substr($path, -1) == '/') { if (substr($path, -1) == '/') {
$path = substr_replace($path ,'',-1); $path = substr_replace($path, '', -1);
} }
return $path; return $path;
} }

View File

@ -51,19 +51,19 @@ abstract class Common implements \OC\Files\Storage\Storage {
} }
public function getPermissions($path){ public function getPermissions($path){
$permissions = 0; $permissions = 0;
if($this->isCreatable($path)){ if($this->isCreatable($path)) {
$permissions |= \OCP\PERMISSION_CREATE; $permissions |= \OCP\PERMISSION_CREATE;
} }
if($this->isReadable($path)){ if($this->isReadable($path)) {
$permissions |= \OCP\PERMISSION_READ; $permissions |= \OCP\PERMISSION_READ;
} }
if($this->isUpdatable($path)){ if($this->isUpdatable($path)) {
$permissions |= \OCP\PERMISSION_UPDATE; $permissions |= \OCP\PERMISSION_UPDATE;
} }
if($this->isDeletable($path)){ if($this->isDeletable($path)) {
$permissions |= \OCP\PERMISSION_DELETE; $permissions |= \OCP\PERMISSION_DELETE;
} }
if($this->isSharable($path)){ if($this->isSharable($path)) {
$permissions |= \OCP\PERMISSION_SHARE; $permissions |= \OCP\PERMISSION_SHARE;
} }
return $permissions; return $permissions;
@ -83,21 +83,21 @@ abstract class Common implements \OC\Files\Storage\Storage {
} }
return fread($handle, $size); return fread($handle, $size);
} }
public function file_put_contents($path,$data) { public function file_put_contents($path, $data) {
$handle = $this->fopen($path, "w"); $handle = $this->fopen($path, "w");
return fwrite($handle, $data); return fwrite($handle, $data);
} }
public function rename($path1,$path2) { public function rename($path1, $path2) {
if($this->copy($path1,$path2)) { if($this->copy($path1, $path2)) {
return $this->unlink($path1); return $this->unlink($path1);
}else{ }else{
return false; return false;
} }
} }
public function copy($path1,$path2) { public function copy($path1, $path2) {
$source=$this->fopen($path1,'r'); $source=$this->fopen($path1, 'r');
$target=$this->fopen($path2,'w'); $target=$this->fopen($path2, 'w');
$count=\OC_Helper::streamCopy($source,$target); $count=\OC_Helper::streamCopy($source, $target);
return $count>0; return $count>0;
} }
@ -111,9 +111,10 @@ abstract class Common implements \OC\Files\Storage\Storage {
* deleted together with its contents. To avoid this set $empty to true * deleted together with its contents. To avoid this set $empty to true
*/ */
public function deleteAll( $directory, $empty = false ) { public function deleteAll( $directory, $empty = false ) {
$directory = trim($directory,'/'); $directory = trim($directory, '/');
if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory ) || !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) { if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory )
|| !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) {
return false; return false;
} elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) { } elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) {
return false; return false;
@ -146,25 +147,25 @@ abstract class Common implements \OC\Files\Storage\Storage {
if($this->is_dir($path)) { if($this->is_dir($path)) {
return 'httpd/unix-directory'; return 'httpd/unix-directory';
} }
$source=$this->fopen($path,'r'); $source=$this->fopen($path, 'r');
if(!$source) { if(!$source) {
return false; return false;
} }
$head=fread($source,8192);//8kb should suffice to determine a mimetype $head=fread($source, 8192);//8kb should suffice to determine a mimetype
if($pos=strrpos($path,'.')) { if($pos=strrpos($path, '.')) {
$extension=substr($path,$pos); $extension=substr($path, $pos);
}else{ }else{
$extension=''; $extension='';
} }
$tmpFile=\OC_Helper::tmpFile($extension); $tmpFile=\OC_Helper::tmpFile($extension);
file_put_contents($tmpFile,$head); file_put_contents($tmpFile, $head);
$mime=\OC_Helper::getMimeType($tmpFile); $mime=\OC_Helper::getMimeType($tmpFile);
unlink($tmpFile); unlink($tmpFile);
return $mime; return $mime;
} }
public function hash($type,$path,$raw = false) { public function hash($type, $path, $raw = false) {
$tmpFile=$this->getLocalFile($path); $tmpFile=$this->getLocalFile($path);
$hash=hash($type,$tmpFile,$raw); $hash=hash($type, $tmpFile, $raw);
unlink($tmpFile); unlink($tmpFile);
return $hash; return $hash;
} }
@ -175,42 +176,42 @@ abstract class Common implements \OC\Files\Storage\Storage {
return $this->toTmpFile($path); return $this->toTmpFile($path);
} }
private function toTmpFile($path) {//no longer in the storage api, still useful here private function toTmpFile($path) {//no longer in the storage api, still useful here
$source=$this->fopen($path,'r'); $source=$this->fopen($path, 'r');
if(!$source) { if(!$source) {
return false; return false;
} }
if($pos=strrpos($path,'.')) { if($pos=strrpos($path, '.')) {
$extension=substr($path,$pos); $extension=substr($path, $pos);
}else{ }else{
$extension=''; $extension='';
} }
$tmpFile=\OC_Helper::tmpFile($extension); $tmpFile=\OC_Helper::tmpFile($extension);
$target=fopen($tmpFile,'w'); $target=fopen($tmpFile, 'w');
\OC_Helper::streamCopy($source,$target); \OC_Helper::streamCopy($source, $target);
return $tmpFile; return $tmpFile;
} }
public function getLocalFolder($path) { public function getLocalFolder($path) {
$baseDir=\OC_Helper::tmpFolder(); $baseDir=\OC_Helper::tmpFolder();
$this->addLocalFolder($path,$baseDir); $this->addLocalFolder($path, $baseDir);
return $baseDir; return $baseDir;
} }
private function addLocalFolder($path,$target) { private function addLocalFolder($path, $target) {
if($dh=$this->opendir($path)) { if($dh=$this->opendir($path)) {
while($file=readdir($dh)) { while($file=readdir($dh)) {
if($file!=='.' and $file!=='..') { if($file!=='.' and $file!=='..') {
if($this->is_dir($path.'/'.$file)) { if($this->is_dir($path.'/'.$file)) {
mkdir($target.'/'.$file); mkdir($target.'/'.$file);
$this->addLocalFolder($path.'/'.$file,$target.'/'.$file); $this->addLocalFolder($path.'/'.$file, $target.'/'.$file);
}else{ }else{
$tmp=$this->toTmpFile($path.'/'.$file); $tmp=$this->toTmpFile($path.'/'.$file);
rename($tmp,$target.'/'.$file); rename($tmp, $target.'/'.$file);
} }
} }
} }
} }
} }
protected function searchInDir($query,$dir='') { protected function searchInDir($query, $dir='') {
$files=array(); $files=array();
$dh=$this->opendir($dir); $dh=$this->opendir($dir);
if($dh) { if($dh) {
@ -220,7 +221,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
$files[]=$dir.'/'.$item; $files[]=$dir.'/'.$item;
} }
if($this->is_dir($dir.'/'.$item)) { if($this->is_dir($dir.'/'.$item)) {
$files=array_merge($files,$this->searchInDir($query,$dir.'/'.$item)); $files=array_merge($files, $this->searchInDir($query, $dir.'/'.$item));
} }
} }
} }
@ -233,7 +234,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
* @param int $time * @param int $time
* @return bool * @return bool
*/ */
public function hasUpdated($path,$time) { public function hasUpdated($path, $time) {
return $this->filemtime($path)>$time; return $this->filemtime($path)>$time;
} }

View File

@ -40,7 +40,7 @@ class Local extends \OC\Files\Storage\Common{
return opendir($this->datadir.$path); return opendir($this->datadir.$path);
} }
public function is_dir($path) { public function is_dir($path) {
if(substr($path,-1)=='/') { if(substr($path, -1)=='/') {
$path=substr($path, 0, -1); $path=substr($path, 0, -1);
} }
return is_dir($this->datadir.$path); return is_dir($this->datadir.$path);
@ -117,11 +117,11 @@ class Local extends \OC\Files\Storage\Common{
} }
public function rename($path1, $path2) { public function rename($path1, $path2) {
if (!$this->isUpdatable($path1)) { if (!$this->isUpdatable($path1)) {
\OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR); \OC_Log::write('core', 'unable to rename, file is not writable : '.$path1, \OC_Log::ERROR);
return false; return false;
} }
if(! $this->file_exists($path1)) { if(! $this->file_exists($path1)) {
\OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR); \OC_Log::write('core', 'unable to rename, file does not exists : '.$path1, \OC_Log::ERROR);
return false; return false;
} }
@ -205,7 +205,9 @@ class Local extends \OC\Files\Storage\Common{
return (float)exec('stat -c %s ' . escapeshellarg($fullPath)); return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
} }
} else { } else {
\OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR); \OC_Log::write('core',
'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name,
\OC_Log::ERROR);
} }
return 0; return 0;

View File

@ -61,7 +61,7 @@ class MappedLocal extends \OC\Files\Storage\Common{
return opendir('fakedir://local-win32'.$path); return opendir('fakedir://local-win32'.$path);
} }
public function is_dir($path) { public function is_dir($path) {
if(substr($path,-1)=='/') { if(substr($path, -1)=='/') {
$path=substr($path, 0, -1); $path=substr($path, 0, -1);
} }
return is_dir($this->buildPath($path)); return is_dir($this->buildPath($path));
@ -138,11 +138,11 @@ class MappedLocal extends \OC\Files\Storage\Common{
} }
public function rename($path1, $path2) { public function rename($path1, $path2) {
if (!$this->isUpdatable($path1)) { if (!$this->isUpdatable($path1)) {
\OC_Log::write('core','unable to rename, file is not writable : '.$path1,\OC_Log::ERROR); \OC_Log::write('core', 'unable to rename, file is not writable : '.$path1, \OC_Log::ERROR);
return false; return false;
} }
if(! $this->file_exists($path1)) { if(! $this->file_exists($path1)) {
\OC_Log::write('core','unable to rename, file does not exists : '.$path1,\OC_Log::ERROR); \OC_Log::write('core', 'unable to rename, file does not exists : '.$path1, \OC_Log::ERROR);
return false; return false;
} }
@ -248,7 +248,9 @@ class MappedLocal extends \OC\Files\Storage\Common{
return (float)exec('stat -c %s ' . escapeshellarg($fullPath)); return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
} }
} else { } else {
\OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR); \OC_Log::write('core',
'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name,
\OC_Log::ERROR);
} }
return 0; return 0;

View File

@ -92,7 +92,9 @@ class View {
/** /**
* get the mountpoint of the storage object for a path * get the mountpoint of the storage object for a path
( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account * ( note: because a storage is not always mounted inside the fakeroot, the
* returned mountpoint is relative to the absolute root of the filesystem
* and doesn't take the chroot into account )
* *
* @param string $path * @param string $path
* @return string * @return string
@ -113,7 +115,8 @@ class View {
/** /**
* return the path to a local version of the file * return the path to a local version of the file
* we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed * we need this because we can't know if a file is stored local or not from
* outside the filestorage and for some purposes a local file is needed
* *
* @param string $path * @param string $path
* @return string * @return string
@ -252,7 +255,8 @@ class View {
public function file_put_contents($path, $data) { public function file_put_contents($path, $data) {
if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier
$absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path)); $absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && Filesystem::isValidPath($path)) { if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data)
&& Filesystem::isValidPath($path)) {
$path = $this->getRelativePath($absolutePath); $path = $this->getRelativePath($absolutePath);
$exists = $this->file_exists($path); $exists = $this->file_exists($path);
$run = true; $run = true;
@ -324,7 +328,8 @@ class View {
$postFix2 = (substr($path2, -1, 1) === '/') ? '/' : ''; $postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
$absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1)); $absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
$absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2)); $absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) { if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2)
and Filesystem::isValidPath($path2)) {
$path1 = $this->getRelativePath($absolutePath1); $path1 = $this->getRelativePath($absolutePath1);
$path2 = $this->getRelativePath($absolutePath2); $path2 = $this->getRelativePath($absolutePath2);
@ -776,7 +781,8 @@ class View {
$rootEntry = $subCache->get(''); $rootEntry = $subCache->get('');
if ($rootEntry) { if ($rootEntry) {
$relativePath = trim(substr($mountPoint, $dirLength), '/'); $relativePath = trim(substr($mountPoint, $dirLength), '/');
if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder if ($pos = strpos($relativePath, '/')) {
//mountpoint inside subfolder add size to the correct folder
$entryName = substr($relativePath, 0, $pos); $entryName = substr($relativePath, 0, $pos);
foreach ($files as &$entry) { foreach ($files as &$entry) {
if ($entry['name'] === $entryName) { if ($entry['name'] === $entryName) {

View File

@ -34,7 +34,9 @@
class OC_Filesystem { class OC_Filesystem {
/** /**
* get the mountpoint of the storage object for a path * get the mountpoint of the storage object for a path
( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account * ( note: because a storage is not always mounted inside the fakeroot, the
* returned mountpoint is relative to the absolute root of the filesystem
* and doesn't take the chroot into account )
* *
* @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
* @param string $path * @param string $path
@ -115,7 +117,8 @@ class OC_Filesystem {
/** /**
* return the path to a local version of the file * return the path to a local version of the file
* we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed * we need this because we can't know if a file is stored local or not from
* outside the filestorage and for some purposes a local file is needed
* *
* @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem * @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
* @param string $path * @param string $path

View File

@ -311,7 +311,12 @@ class OC_Group {
$displayNames = array(); $displayNames = array();
foreach ($gids as $gid) { foreach ($gids as $gid) {
// TODO Need to apply limits to groups as total // TODO Need to apply limits to groups as total
$displayNames = array_merge(array_diff(self::displayNamesInGroup($gid, $search, $limit, $offset), $displayNames), $displayNames); $displayNames = array_merge(
array_diff(
self::displayNamesInGroup($gid, $search, $limit, $offset),
$displayNames
),
$displayNames);
} }
return $displayNames; return $displayNames;
} }

View File

@ -200,7 +200,9 @@ class OC_Group_Database extends OC_Group_Backend {
* @return array with user ids * @return array with user ids
*/ */
public function usersInGroup($gid, $search = '', $limit = null, $offset = null) { public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
$stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?', $limit, $offset); $stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?',
$limit,
$offset);
$result = $stmt->execute(array($gid, $search.'%')); $result = $stmt->execute(array($gid, $search.'%'));
$users = array(); $users = array();
while ($row = $result->fetchRow()) { while ($row = $result->fetchRow()) {
@ -220,7 +222,12 @@ class OC_Group_Database extends OC_Group_Backend {
public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) { public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
$displayNames = ''; $displayNames = '';
$stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname` FROM `*PREFIX*users` INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid` WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?', $limit, $offset); $stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname`'
.' FROM `*PREFIX*users`'
.' INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid`'
.' WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?',
$limit,
$offset);
$result = $stmt->execute(array($gid, $search.'%')); $result = $stmt->execute(array($gid, $search.'%'));
$users = array(); $users = array();
while ($row = $result->fetchRow()) { while ($row = $result->fetchRow()) {

View File

@ -132,7 +132,8 @@ class OC_Helper {
* Returns a absolute url to the given service. * Returns a absolute url to the given service.
*/ */
public static function linkToRemote( $service, $add_slash = true ) { public static function linkToRemote( $service, $add_slash = true ) {
return self::makeURLAbsolute(self::linkToRemoteBase($service)) . (($add_slash && $service[strlen($service)-1]!='/')?'/':''); return self::makeURLAbsolute(self::linkToRemoteBase($service))
. (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
} }
/** /**
@ -144,7 +145,8 @@ class OC_Helper {
* Returns a absolute url to the given service. * Returns a absolute url to the given service.
*/ */
public static function linkToPublic($service, $add_slash = false) { public static function linkToPublic($service, $add_slash = false) {
return self::linkToAbsolute( '', 'public.php') . '?service=' . $service . (($add_slash && $service[strlen($service)-1]!='/')?'/':''); return self::linkToAbsolute( '', 'public.php') . '?service=' . $service
. (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
} }
/** /**
@ -379,7 +381,8 @@ class OC_Helper {
$mimeType='application/octet-stream'; $mimeType='application/octet-stream';
} }
if($mimeType=='application/octet-stream' and function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) { if($mimeType=='application/octet-stream' and function_exists('finfo_open')
and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) {
$info = @strtolower(finfo_file($finfo, $path)); $info = @strtolower(finfo_file($finfo, $path));
if($info) { if($info) {
$mimeType=substr($info, 0, strpos($info, ';')); $mimeType=substr($info, 0, strpos($info, ';'));
@ -444,7 +447,8 @@ class OC_Helper {
} }
/** /**
* returns "checked"-attribute if request contains selected radio element OR if radio element is the default one -- maybe? * returns "checked"-attribute if request contains selected radio element
* OR if radio element is the default one -- maybe?
* @param string $s Name of radio-button element name * @param string $s Name of radio-button element name
* @param string $v Value of current radio-button element * @param string $v Value of current radio-button element
* @param string $d Value of default radio-button element * @param string $d Value of default radio-button element

View File

@ -34,7 +34,8 @@ class OC_Hook{
// Connect the hook handler to the requested emitter // Connect the hook handler to the requested emitter
self::$registered[$signalclass][$signalname][] = array( self::$registered[$signalclass][$signalname][] = array(
"class" => $slotclass, "class" => $slotclass,
"name" => $slotname ); "name" => $slotname
);
// No chance for failure ;-) // No chance for failure ;-)
return true; return true;
@ -70,7 +71,9 @@ class OC_Hook{
try { try {
call_user_func( array( $i["class"], $i["name"] ), $params ); call_user_func( array( $i["class"], $i["name"] ), $params );
} catch (Exception $e){ } catch (Exception $e){
OC_Log::write('hook', 'error while running hook (' . $i["class"] . '::' . $i["name"] . '): '.$e->getMessage(), OC_Log::ERROR); OC_Log::write('hook',
'error while running hook (' . $i["class"] . '::' . $i["name"] . '): '.$e->getMessage(),
OC_Log::ERROR);
} }
} }

View File

@ -169,7 +169,9 @@ class OC_Image {
if (!file_exists(dirname($filepath))) if (!file_exists(dirname($filepath)))
mkdir(dirname($filepath), 0777, true); mkdir(dirname($filepath), 0777, true);
if(!is_writable(dirname($filepath))) { if(!is_writable(dirname($filepath))) {
OC_Log::write('core', __METHOD__.'(): Directory \''.dirname($filepath).'\' is not writable.', OC_Log::ERROR); OC_Log::write('core',
__METHOD__.'(): Directory \''.dirname($filepath).'\' is not writable.',
OC_Log::ERROR);
return false; return false;
} elseif(is_writable(dirname($filepath)) && file_exists($filepath) && !is_writable($filepath)) { } elseif(is_writable(dirname($filepath)) && file_exists($filepath) && !is_writable($filepath)) {
OC_Log::write('core', __METHOD__.'(): File \''.$filepath.'\' is not writable.', OC_Log::ERROR); OC_Log::write('core', __METHOD__.'(): File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
@ -394,35 +396,45 @@ class OC_Image {
if (imagetypes() & IMG_GIF) { if (imagetypes() & IMG_GIF) {
$this->resource = imagecreatefromgif($imagepath); $this->resource = imagecreatefromgif($imagepath);
} else { } else {
OC_Log::write('core', 'OC_Image->loadFromFile, GIF images not supported: '.$imagepath, OC_Log::DEBUG); OC_Log::write('core',
'OC_Image->loadFromFile, GIF images not supported: '.$imagepath,
OC_Log::DEBUG);
} }
break; break;
case IMAGETYPE_JPEG: case IMAGETYPE_JPEG:
if (imagetypes() & IMG_JPG) { if (imagetypes() & IMG_JPG) {
$this->resource = imagecreatefromjpeg($imagepath); $this->resource = imagecreatefromjpeg($imagepath);
} else { } else {
OC_Log::write('core', 'OC_Image->loadFromFile, JPG images not supported: '.$imagepath, OC_Log::DEBUG); OC_Log::write('core',
'OC_Image->loadFromFile, JPG images not supported: '.$imagepath,
OC_Log::DEBUG);
} }
break; break;
case IMAGETYPE_PNG: case IMAGETYPE_PNG:
if (imagetypes() & IMG_PNG) { if (imagetypes() & IMG_PNG) {
$this->resource = imagecreatefrompng($imagepath); $this->resource = imagecreatefrompng($imagepath);
} else { } else {
OC_Log::write('core', 'OC_Image->loadFromFile, PNG images not supported: '.$imagepath, OC_Log::DEBUG); OC_Log::write('core',
'OC_Image->loadFromFile, PNG images not supported: '.$imagepath,
OC_Log::DEBUG);
} }
break; break;
case IMAGETYPE_XBM: case IMAGETYPE_XBM:
if (imagetypes() & IMG_XPM) { if (imagetypes() & IMG_XPM) {
$this->resource = imagecreatefromxbm($imagepath); $this->resource = imagecreatefromxbm($imagepath);
} else { } else {
OC_Log::write('core', 'OC_Image->loadFromFile, XBM/XPM images not supported: '.$imagepath, OC_Log::DEBUG); OC_Log::write('core',
'OC_Image->loadFromFile, XBM/XPM images not supported: '.$imagepath,
OC_Log::DEBUG);
} }
break; break;
case IMAGETYPE_WBMP: case IMAGETYPE_WBMP:
if (imagetypes() & IMG_WBMP) { if (imagetypes() & IMG_WBMP) {
$this->resource = imagecreatefromwbmp($imagepath); $this->resource = imagecreatefromwbmp($imagepath);
} else { } else {
OC_Log::write('core', 'OC_Image->loadFromFile, WBMP images not supported: '.$imagepath, OC_Log::DEBUG); OC_Log::write('core',
'OC_Image->loadFromFile, WBMP images not supported: '.$imagepath,
OC_Log::DEBUG);
} }
break; break;
case IMAGETYPE_BMP: case IMAGETYPE_BMP:
@ -633,7 +645,9 @@ class OC_Image {
$color[1] = $palette[ $color[1] + 1 ]; $color[1] = $palette[ $color[1] + 1 ];
break; break;
default: default:
trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING); trigger_error('imagecreatefrombmp: '
. $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!',
E_USER_WARNING);
return false; return false;
} }
imagesetpixel($im, $x, $y, $color[1]); imagesetpixel($im, $x, $y, $color[1]);
@ -739,7 +753,9 @@ class OC_Image {
} }
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height); imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height);
if ($process == false) { if ($process == false) {
OC_Log::write('core', 'OC_Image->centerCrop. Error resampling process image '.$width.'x'.$height, OC_Log::ERROR); OC_Log::write('core',
'OC_Image->centerCrop. Error resampling process image '.$width.'x'.$height,
OC_Log::ERROR);
imagedestroy($process); imagedestroy($process);
return false; return false;
} }

View File

@ -136,21 +136,29 @@ class OC_Installer{
// check if the app is compatible with this version of ownCloud // check if the app is compatible with this version of ownCloud
$version=OC_Util::getVersion(); $version=OC_Util::getVersion();
if(!isset($info['require']) or ($version[0]>$info['require'])) { if(!isset($info['require']) or ($version[0]>$info['require'])) {
OC_Log::write('core', 'App can\'t be installed because it is not compatible with this version of ownCloud', OC_Log::ERROR); OC_Log::write('core',
'App can\'t be installed because it is not compatible with this version of ownCloud',
OC_Log::ERROR);
OC_Helper::rmdirr($extractDir); OC_Helper::rmdirr($extractDir);
return false; return false;
} }
// check if shipped tag is set which is only allowed for apps that are shipped with ownCloud // check if shipped tag is set which is only allowed for apps that are shipped with ownCloud
if(isset($info['shipped']) and ($info['shipped']=='true')) { if(isset($info['shipped']) and ($info['shipped']=='true')) {
OC_Log::write('core', 'App can\'t be installed because it contains the <shipped>true</shippe> tag which is not allowed for non shipped apps', OC_Log::ERROR); OC_Log::write('core',
'App can\'t be installed because it contains the <shipped>true</shippe>'
.' tag which is not allowed for non shipped apps',
OC_Log::ERROR);
OC_Helper::rmdirr($extractDir); OC_Helper::rmdirr($extractDir);
return false; return false;
} }
// check if the ocs version is the same as the version in info.xml/version // check if the ocs version is the same as the version in info.xml/version
if(!isset($info['version']) or ($info['version']<>$data['appdata']['version'])) { if(!isset($info['version']) or ($info['version']<>$data['appdata']['version'])) {
OC_Log::write('core', 'App can\'t be installed because the version in info.xml/version is not the same as the version reported from the app store', OC_Log::ERROR); OC_Log::write('core',
'App can\'t be installed because the version in info.xml/version is not the same'
.' as the version reported from the app store',
OC_Log::ERROR);
OC_Helper::rmdirr($extractDir); OC_Helper::rmdirr($extractDir);
return false; return false;
} }
@ -251,7 +259,8 @@ class OC_Installer{
* -# including appinfo/upgrade.php * -# including appinfo/upgrade.php
* -# setting the installed version * -# setting the installed version
* *
* upgrade.php can determine the current installed version of the app using "OC_Appconfig::getValue($appid, 'installed_version')" * upgrade.php can determine the current installed version of the app using
* "OC_Appconfig::getValue($appid, 'installed_version')"
*/ */
public static function updateApp( $app ) { public static function updateApp( $app ) {
$ocsid=OC_Appconfig::getValue( $app, 'ocsid'); $ocsid=OC_Appconfig::getValue( $app, 'ocsid');
@ -270,12 +279,12 @@ class OC_Installer{
public static function isUpdateAvailable( $app ) { public static function isUpdateAvailable( $app ) {
$ocsid=OC_Appconfig::getValue( $app, 'ocsid', ''); $ocsid=OC_Appconfig::getValue( $app, 'ocsid', '');
if($ocsid<>''){ if($ocsid<>'') {
$ocsdata=OC_OCSClient::getApplication($ocsid); $ocsdata=OC_OCSClient::getApplication($ocsid);
$ocsversion= (string) $ocsdata['version']; $ocsversion= (string) $ocsdata['version'];
$currentversion=OC_App::getAppVersion($app); $currentversion=OC_App::getAppVersion($app);
if($ocsversion<>$currentversion){ if($ocsversion<>$currentversion) {
return($ocsversion); return($ocsversion);
}else{ }else{
@ -326,22 +335,22 @@ class OC_Installer{
*/ */
public static function removeApp( $name, $options = array()) { public static function removeApp( $name, $options = array()) {
if(isset($options['keeppreferences']) and $options['keeppreferences']==false ){ if(isset($options['keeppreferences']) and $options['keeppreferences']==false ) {
// todo // todo
// remove preferences // remove preferences
} }
if(isset($options['keepappconfig']) and $options['keepappconfig']==false ){ if(isset($options['keepappconfig']) and $options['keepappconfig']==false ) {
// todo // todo
// remove app config // remove app config
} }
if(isset($options['keeptables']) and $options['keeptables']==false ){ if(isset($options['keeptables']) and $options['keeptables']==false ) {
// todo // todo
// remove app database tables // remove app database tables
} }
if(isset($options['keepfiles']) and $options['keepfiles']==false ){ if(isset($options['keepfiles']) and $options['keepfiles']==false ) {
// todo // todo
// remove user files // remove user files
} }
@ -437,7 +446,9 @@ class OC_Installer{
// check if grep is installed // check if grep is installed
$grep = exec('which grep'); $grep = exec('which grep');
if($grep=='') { if($grep=='') {
OC_Log::write('core', 'grep not installed. So checking the code of the app "'.$appname.'" was not possible', OC_Log::ERROR); OC_Log::write('core',
'grep not installed. So checking the code of the app "'.$appname.'" was not possible',
OC_Log::ERROR);
return true; return true;
} }
@ -447,7 +458,9 @@ class OC_Installer{
$result = exec($cmd); $result = exec($cmd);
// bad pattern found // bad pattern found
if($result<>'') { if($result<>'') {
OC_Log::write('core', 'App "'.$appname.'" is using a not allowed call "'.$bl.'". Installation refused.', OC_Log::ERROR); OC_Log::write('core',
'App "'.$appname.'" is using a not allowed call "'.$bl.'". Installation refused.',
OC_Log::ERROR);
return false; return false;
} }
} }

View File

@ -53,7 +53,9 @@ class OC_Log {
// Uncaught exception handler // Uncaught exception handler
public static function onException($exception) { public static function onException($exception) {
self::write('PHP', $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(), self::FATAL); self::write('PHP',
$exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(),
self::FATAL);
} }
//Recoverable errors handler //Recoverable errors handler

View File

@ -81,7 +81,8 @@ class OC_Log_Owncloud {
$ch = fgetc($handle); $ch = fgetc($handle);
if ($ch == "\n" || $pos == 0) { if ($ch == "\n" || $pos == 0) {
if ($line != '') { if ($line != '') {
// Add the first character if at the start of the file, because it doesn't hit the else in the loop // Add the first character if at the start of the file,
// because it doesn't hit the else in the loop
if ($pos == 0) { if ($pos == 0) {
$line = $ch.$line; $line = $ch.$line;
} }

View File

@ -32,7 +32,8 @@ class OC_Mail {
* @param string $bcc * @param string $bcc
* @throws Exception * @throws Exception
*/ */
public static function send($toaddress,$toname,$subject,$mailtext,$fromaddress,$fromname,$html=0,$altbody='',$ccaddress='',$ccname='', $bcc='') { public static function send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
$html=0, $altbody='', $ccaddress='', $ccname='', $bcc='') {
$SMTPMODE = OC_Config::getValue( 'mail_smtpmode', 'sendmail' ); $SMTPMODE = OC_Config::getValue( 'mail_smtpmode', 'sendmail' );
$SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' ); $SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
@ -97,7 +98,9 @@ class OC_Mail {
$mailo->Send(); $mailo->Send();
unset($mailo); unset($mailo);
OC_Log::write('mail', 'Mail from '.$fromname.' ('.$fromaddress.')'.' to: '.$toname.'('.$toaddress.')'.' subject: '.$subject, OC_Log::DEBUG); OC_Log::write('mail',
'Mail from '.$fromname.' ('.$fromaddress.')'.' to: '.$toname.'('.$toaddress.')'.' subject: '.$subject,
OC_Log::DEBUG);
} catch (Exception $exception) { } catch (Exception $exception) {
OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR); OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR);
throw($exception); throw($exception);

View File

@ -167,7 +167,19 @@ class OC_Migrate{
self::$content = new OC_Migration_Content( self::$zip ); self::$content = new OC_Migration_Content( self::$zip );
// Creates a zip with the owncloud system files // Creates a zip with the owncloud system files
self::$content->addDir( OC::$SERVERROOT . '/', false, '/'); self::$content->addDir( OC::$SERVERROOT . '/', false, '/');
foreach (array(".git", "3rdparty", "apps", "core", "files", "l10n", "lib", "ocs", "search", "settings", "tests") as $dir) { foreach (array(
".git",
"3rdparty",
"apps",
"core",
"files",
"l10n",
"lib",
"ocs",
"search",
"settings",
"tests"
) as $dir) {
self::$content->addDir( OC::$SERVERROOT . '/' . $dir, true, "/"); self::$content->addDir( OC::$SERVERROOT . '/' . $dir, true, "/");
} }
break; break;
@ -245,7 +257,9 @@ class OC_Migrate{
} }
// Import user app data // Import user app data
if(file_exists($extractpath . $json->exporteduser . '/migration.db')) { if(file_exists($extractpath . $json->exporteduser . '/migration.db')) {
if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db', $json, self::$uid ) ) { if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db',
$json,
self::$uid ) ) {
return json_encode( array( 'success' => false ) ); return json_encode( array( 'success' => false ) );
} }
} }
@ -553,7 +567,9 @@ class OC_Migrate{
return false; return false;
} }
if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== true ) { if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== true ) {
OC_Log::write('migration', 'Failed to create the zip with error: '.self::$zip->getStatusString(), OC_Log::ERROR); OC_Log::write('migration',
'Failed to create the zip with error: '.self::$zip->getStatusString(),
OC_Log::ERROR);
return false; return false;
} else { } else {
return true; return true;
@ -610,7 +626,9 @@ class OC_Migrate{
if( isset( $info->apps->$id ) ) { if( isset( $info->apps->$id ) ) {
// Is the app installed // Is the app installed
if( !OC_App::isEnabled( $id ) ) { if( !OC_App::isEnabled( $id ) ) {
OC_Log::write( 'migration', 'App: ' . $id . ' is not installed, can\'t import data.', OC_Log::INFO ); OC_Log::write( 'migration',
'App: ' . $id . ' is not installed, can\'t import data.',
OC_Log::INFO );
$appsstatus[$id] = 'notsupported'; $appsstatus[$id] = 'notsupported';
} else { } else {
// Did it succeed on export? // Did it succeed on export?
@ -624,7 +642,9 @@ class OC_Migrate{
// Then do the import // Then do the import
if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) { if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) {
// Failed to import app // Failed to import app
OC_Log::write( 'migration', 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id, OC_Log::ERROR ); OC_Log::write( 'migration',
'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id,
OC_Log::ERROR );
} }
} else { } else {
// Add to failed list // Add to failed list

View File

@ -236,7 +236,9 @@ class OC_Migration_Content{
*/ */
public function finish() { public function finish() {
if( !$this->zip->close() ) { if( !$this->zip->close() ) {
OC_Log::write( 'migration', 'Failed to write the zip file with error: '.$this->zip->getStatusString(), OC_Log::ERROR ); OC_Log::write( 'migration',
'Failed to write the zip file with error: '.$this->zip->getStatusString(),
OC_Log::ERROR );
return false; return false;
} }
$this->cleanup(); $this->cleanup();

View File

@ -87,9 +87,10 @@ class OC_OCS {
} }
$format = self::readData($method, 'format', 'text', ''); $format = self::readData($method, 'format', 'text', '');
$txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n"; $txt='Invalid query, please check the syntax. API specifications are here:'
.' http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n";
$txt.=OC_OCS::getDebugOutput(); $txt.=OC_OCS::getDebugOutput();
echo(OC_OCS::generateXml($format,'failed',999,$txt)); echo(OC_OCS::generateXml($format, 'failed', 999, $txt));
} }
@ -122,7 +123,8 @@ class OC_OCS {
* @param int $itemsperpage * @param int $itemsperpage
* @return string xml/json * @return string xml/json
*/ */
private static function generateXml($format, $status, $statuscode, $message, $data=array(), $tag='', $tagattribute='', $dimension=-1, $itemscount='', $itemsperpage='') { private static function generateXml($format, $status, $statuscode,
$message, $data=array(), $tag='', $tagattribute='', $dimension=-1, $itemscount='', $itemsperpage='') {
if($format=='json') { if($format=='json') {
$json=array(); $json=array();
$json['status']=$status; $json['status']=$status;

View File

@ -31,7 +31,7 @@ class OC_OCS_Cloud {
foreach($apps as $app) { foreach($apps as $app) {
$info = OC_App::getAppInfo($app); $info = OC_App::getAppInfo($app);
if(isset($info['standalone'])) { if(isset($info['standalone'])) {
$newValue = array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>''); $newValue = array('name'=>$info['name'], 'url'=>OC_Helper::linkToAbsolute($app, ''), 'icon'=>'');
$values[] = $newValue; $values[] = $newValue;
} }
} }

View File

@ -29,7 +29,7 @@ class OC_OCS_Privatedata {
$user = OC_User::getUser(); $user = OC_User::getUser();
$app = addslashes(strip_tags($parameters['app'])); $app = addslashes(strip_tags($parameters['app']));
$key = addslashes(strip_tags($parameters['key'])); $key = addslashes(strip_tags($parameters['key']));
$result = OC_OCS::getData($user,$app,$key); $result = OC_OCS::getData($user, $app, $key);
$xml = array(); $xml = array();
foreach($result as $i=>$log) { foreach($result as $i=>$log) {
$xml[$i]['key']=$log['key']; $xml[$i]['key']=$log['key'];
@ -46,7 +46,7 @@ class OC_OCS_Privatedata {
$app = addslashes(strip_tags($parameters['app'])); $app = addslashes(strip_tags($parameters['app']));
$key = addslashes(strip_tags($parameters['key'])); $key = addslashes(strip_tags($parameters['key']));
$value = OC_OCS::readData('post', 'value', 'text'); $value = OC_OCS::readData('post', 'value', 'text');
if(OC_Preferences::setValue($user, $app, $key, $value)){ if(OC_Preferences::setValue($user, $app, $key, $value)) {
return new OC_OCS_Result(null, 100); return new OC_OCS_Result(null, 100);
} }
} }

View File

@ -32,7 +32,8 @@ class OC_OCSClient{
* @brief Get the url of the OCS AppStore server. * @brief Get the url of the OCS AppStore server.
* @returns string of the AppStore server * @returns string of the AppStore server
* *
* This function returns the url of the OCS AppStore server. It´s possible to set it in the config file or it will fallback to the default * This function returns the url of the OCS AppStore server. It´s possible
* to set it in the config file or it will fallback to the default
*/ */
private static function getAppStoreURL() { private static function getAppStoreURL() {
$url = OC_Config::getValue('appstoreurl', 'http://api.apps.owncloud.com/v1'); $url = OC_Config::getValue('appstoreurl', 'http://api.apps.owncloud.com/v1');
@ -42,7 +43,8 @@ class OC_OCSClient{
/** /**
* @brief Get the url of the OCS KB server. * @brief Get the url of the OCS KB server.
* @returns string of the KB server * @returns string of the KB server
* This function returns the url of the OCS knowledge base server. It´s possible to set it in the config file or it will fallback to the default * This function returns the url of the OCS knowledge base server. It´s
* possible to set it in the config file or it will fallback to the default
*/ */
private static function getKBURL() { private static function getKBURL() {
$url = OC_Config::getValue('knowledgebaseurl', 'http://api.apps.owncloud.com/v1'); $url = OC_Config::getValue('knowledgebaseurl', 'http://api.apps.owncloud.com/v1');
@ -109,7 +111,8 @@ class OC_OCSClient{
$version='&version='.implode('x', \OC_Util::getVersion()); $version='&version='.implode('x', \OC_Util::getVersion());
$filterurl='&filter='.urlencode($filter); $filterurl='&filter='.urlencode($filter);
$url=OC_OCSClient::getAppStoreURL().'/content/data?categories='.urlencode($categoriesstring).'&sortmode=new&page='.urlencode($page).'&pagesize=100'.$filterurl.$version; $url=OC_OCSClient::getAppStoreURL().'/content/data?categories='.urlencode($categoriesstring)
.'&sortmode=new&page='.urlencode($page).'&pagesize=100'.$filterurl.$version;
$apps=array(); $apps=array();
$xml=OC_OCSClient::getOCSresponse($url); $xml=OC_OCSClient::getOCSresponse($url);

View File

@ -114,7 +114,8 @@ class OC_Preferences{
*/ */
public static function getValue( $user, $app, $key, $default = null ) { public static function getValue( $user, $app, $key, $default = null ) {
// Try to fetch the value, return default if not exists. // Try to fetch the value, return default if not exists.
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' ); $query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
$result = $query->execute( array( $user, $app, $key )); $result = $query->execute( array( $user, $app, $key ));
$row = $result->fetchRow(); $row = $result->fetchRow();
@ -138,16 +139,19 @@ class OC_Preferences{
*/ */
public static function setValue( $user, $app, $key, $value ) { public static function setValue( $user, $app, $key, $value ) {
// Check if the key does exist // Check if the key does exist
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' ); $query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
$values=$query->execute(array($user, $app, $key))->fetchAll(); $values=$query->execute(array($user, $app, $key))->fetchAll();
$exists=(count($values)>0); $exists=(count($values)>0);
if( !$exists ) { if( !$exists ) {
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*preferences` ( `userid`, `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ?, ? )' ); $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*preferences`'
.' ( `userid`, `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ?, ? )' );
$query->execute( array( $user, $app, $key, $value )); $query->execute( array( $user, $app, $key, $value ));
} }
else{ else{
$query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' ); $query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ?'
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
$query->execute( array( $value, $user, $app, $key )); $query->execute( array( $value, $user, $app, $key ));
} }
return true; return true;
@ -164,7 +168,8 @@ class OC_Preferences{
*/ */
public static function deleteKey( $user, $app, $key ) { public static function deleteKey( $user, $app, $key ) {
// No need for more comments // No need for more comments
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' ); $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences`'
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
$query->execute( array( $user, $app, $key )); $query->execute( array( $user, $app, $key ));
return true; return true;

View File

@ -37,7 +37,8 @@ class API {
* @param array $defaults * @param array $defaults
* @param array $requirements * @param array $requirements
*/ */
public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH, $defaults = array(), $requirements = array()){ public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH,
$defaults = array(), $requirements = array()){
\OC_API::register($method, $url, $action, $app, $authLevel, $defaults, $requirements); \OC_API::register($method, $url, $action, $app, $authLevel, $defaults, $requirements);
} }

View File

@ -35,7 +35,8 @@
namespace OCP; namespace OCP;
/** /**
* This class provides functions to read and write configuration data. configuration can be on a system, application or user level * This class provides functions to read and write configuration data.
* configuration can be on a system, application or user level
*/ */
class Config { class Config {
/** /**

View File

@ -31,7 +31,8 @@
namespace OCP; namespace OCP;
/** /**
* This class provides access to the internal filesystem abstraction layer. Use this class exlusively if you want to access files * This class provides access to the internal filesystem abstraction layer. Use
* this class exlusively if you want to access files
*/ */
class Files { class Files {
/** /**

View File

@ -43,22 +43,22 @@ namespace OCP {
* @return array of contacts which are arrays of key-value-pairs * @return array of contacts which are arrays of key-value-pairs
*/ */
public function search($pattern, $searchProperties, $options); public function search($pattern, $searchProperties, $options);
// // dummy results // // dummy results
// return array( // return array(
// array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c', 'GEO' => '37.386013;-122.082932'), // array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c', 'GEO' => '37.386013;-122.082932'),
// array('id' => 5, 'FN' => 'Thomas Tanghus', 'EMAIL' => array('d@e.f', 'g@h.i')), // array('id' => 5, 'FN' => 'Thomas Tanghus', 'EMAIL' => array('d@e.f', 'g@h.i')),
// ); // );
/** /**
* @param array $properties this array if key-value-pairs defines a contact * @param array $properties this array if key-value-pairs defines a contact
* @return array representing the contact just created or updated * @return array representing the contact just created or updated
*/ */
public function createOrUpdate($properties); public function createOrUpdate($properties);
// // dummy // // dummy
// return array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c', // return array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c',
// 'PHOTO' => 'VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif', // 'PHOTO' => 'VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif',
// 'ADR' => ';;123 Main Street;Any Town;CA;91921-1234' // 'ADR' => ';;123 Main Street;Any Town;CA;91921-1234'
// ); // );
/** /**
* @return mixed * @return mixed

View File

@ -37,10 +37,17 @@ class Share {
const SHARE_TYPE_REMOTE = 6; const SHARE_TYPE_REMOTE = 6;
/** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask /** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask
* Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE * Construct permissions for share() and setPermissions with Or (|) e.g.
* Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE) * Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
* Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE *
* Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares * Check if permission is granted with And (&) e.g. Check if delete is
* granted: if ($permissions & PERMISSION_DELETE)
*
* Remove permissions with And (&) and Not (~) e.g. Remove the update
* permission: $permissions &= ~PERMISSION_UPDATE
*
* Apps are required to handle permissions on their own, this class only
* stores and manages the permissions of shares
* @see lib/public/constants.php * @see lib/public/constants.php
*/ */
@ -66,14 +73,21 @@ class Share {
public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) { public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
if (self::isEnabled()) { if (self::isEnabled()) {
if (!isset(self::$backendTypes[$itemType])) { if (!isset(self::$backendTypes[$itemType])) {
self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions); self::$backendTypes[$itemType] = array(
'class' => $class,
'collectionOf' => $collectionOf,
'supportedFileExtensions' => $supportedFileExtensions
);
if(count(self::$backendTypes) === 1) { if(count(self::$backendTypes) === 1) {
\OC_Util::addScript('core', 'share'); \OC_Util::addScript('core', 'share');
\OC_Util::addStyle('core', 'share'); \OC_Util::addStyle('core', 'share');
} }
return true; return true;
} }
\OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN); \OC_Log::write('OCP\Share',
'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class']
.' is already registered for '.$itemType,
\OC_Log::WARN);
} }
return false; return false;
} }
@ -99,8 +113,10 @@ class Share {
* @param int Number of items to return (optional) Returns all by default * @param int Number of items to return (optional) Returns all by default
* @return Return depends on format * @return Return depends on format
*/ */
public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE,
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections); $parameters = null, $limit = -1, $includeCollections = false) {
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
$parameters, $limit, $includeCollections);
} }
/** /**
@ -110,8 +126,10 @@ class Share {
* @param int Format (optional) Format type must be defined by the backend * @param int Format (optional) Format type must be defined by the backend
* @return Return depends on format * @return Return depends on format
*/ */
public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE,
return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections); $parameters = null, $includeCollections = false) {
return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
$parameters, 1, $includeCollections);
} }
/** /**
@ -121,8 +139,10 @@ class Share {
* @param int Format (optional) Format type must be defined by the backend * @param int Format (optional) Format type must be defined by the backend
* @return Return depends on format * @return Return depends on format
*/ */
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE,
return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true); $parameters = null, $includeCollections = false) {
return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
$parameters, 1, $includeCollections, true);
} }
/** /**
@ -133,7 +153,8 @@ class Share {
* @return Item * @return Item
*/ */
public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) { public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) {
return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1); return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE,
null, 1);
} }
/** /**
@ -142,7 +163,7 @@ class Share {
* @return Item * @return Item
*/ */
public static function getShareByToken($token) { public static function getShareByToken($token) {
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `token` = ?',1); $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `token` = ?', 1);
$result = $query->execute(array($token)); $result = $query->execute(array($token));
if (\OC_DB::isError($result)) { if (\OC_DB::isError($result)) {
\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', token=' . $token, \OC_Log::ERROR); \OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', token=' . $token, \OC_Log::ERROR);
@ -157,8 +178,10 @@ class Share {
* @param int Number of items to return (optional) Returns all by default * @param int Number of items to return (optional) Returns all by default
* @return Return depends on format * @return Return depends on format
*/ */
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) { public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null,
return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections); $limit = -1, $includeCollections = false) {
return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format,
$parameters, $limit, $includeCollections);
} }
/** /**
@ -168,8 +191,10 @@ class Share {
* @param int Format (optional) Format type must be defined by the backend * @param int Format (optional) Format type must be defined by the backend
* @return Return depends on format * @return Return depends on format
*/ */
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) { public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections); $parameters = null, $includeCollections = false) {
return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format,
$parameters, -1, $includeCollections);
} }
/** /**
@ -199,14 +224,18 @@ class Share {
if ($sharingPolicy == 'groups_only') { if ($sharingPolicy == 'groups_only') {
$inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith)); $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
if (empty($inGroup)) { if (empty($inGroup)) {
$message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of'; $message = 'Sharing '.$itemSource.' failed, because the user '
.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of';
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message); throw new \Exception($message);
} }
} }
// Check if the item source is already shared with the user, either from the same owner or a different user // Check if the item source is already shared with the user, either from the same owner or a different user
if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups,
// Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
// Only allow the same share to occur again if it is the same
// owner and is not a user share, this use case is for increasing
// permissions for a specific user
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
@ -220,14 +249,18 @@ class Share {
throw new \Exception($message); throw new \Exception($message);
} }
if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) { if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) {
$message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith; $message = 'Sharing '.$itemSource.' failed, because '
.$uidOwner.' is not a member of the group '.$shareWith;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message); throw new \Exception($message);
} }
// Check if the item source is already shared with the group, either from the same owner or a different user // Check if the item source is already shared with the group, either from the same owner or a different user
// The check for each user in the group is done inside the put() function // The check for each user in the group is done inside the put() function
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith,
// Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user null, self::FORMAT_NONE, null, 1, true, true)) {
// Only allow the same share to occur again if it is the same
// owner and is not a group share, this use case is for increasing
// permissions for a specific user
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith; $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
@ -242,7 +275,8 @@ class Share {
} else if ($shareType === self::SHARE_TYPE_LINK) { } else if ($shareType === self::SHARE_TYPE_LINK) {
if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') { if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
// when updating a link share // when updating a link share
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) { if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null,
$uidOwner, self::FORMAT_NONE, null, 1)) {
// remember old token // remember old token
$oldToken = $checkExists['token']; $oldToken = $checkExists['token'];
//delete the old share //delete the old share
@ -262,7 +296,8 @@ class Share {
} else { } else {
$token = \OC_Util::generate_random_bytes(self::TOKEN_LENGTH); $token = \OC_Util::generate_random_bytes(self::TOKEN_LENGTH);
} }
$result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token); $result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions,
null, $token);
if ($result) { if ($result) {
return $token; return $token;
} else { } else {
@ -341,7 +376,8 @@ class Share {
* @return Returns true on success or false on failure * @return Returns true on success or false on failure
*/ */
public static function unshare($itemType, $itemSource, $shareType, $shareWith) { public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) { if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(),
self::FORMAT_NONE, null, 1)) {
// Pass all the vars we have for now, they may be useful // Pass all the vars we have for now, they may be useful
\OC_Hook::emit('OCP\Share', 'pre_unshare', array( \OC_Hook::emit('OCP\Share', 'pre_unshare', array(
'itemType' => $itemType, 'itemType' => $itemType,
@ -389,9 +425,16 @@ class Share {
public static function unshareFromSelf($itemType, $itemTarget) { public static function unshareFromSelf($itemType, $itemTarget) {
if ($item = self::getItemSharedWith($itemType, $itemTarget)) { if ($item = self::getItemSharedWith($itemType, $itemTarget)) {
if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) { if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
// Insert an extra row for the group share and set permission to 0 to prevent it from showing up for the user // Insert an extra row for the group share and set permission
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); // to 0 to prevent it from showing up for the user
$query->execute(array($item['item_type'], $item['item_source'], $item['item_target'], $item['id'], self::$shareTypeGroupUserUnique, \OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'], $item['file_target'])); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share`'
.' (`item_type`, `item_source`, `item_target`, `parent`, `share_type`,'
.' `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`)'
.' VALUES (?,?,?,?,?,?,?,?,?,?,?)');
$query->execute(array($item['item_type'], $item['item_source'], $item['item_target'],
$item['id'], self::$shareTypeGroupUserUnique,
\OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'],
$item['file_target']));
\OC_DB::insertid('*PREFIX*share'); \OC_DB::insertid('*PREFIX*share');
// Delete all reshares by this user of the group share // Delete all reshares by this user of the group share
self::delete($item['id'], true, \OC_User::getUser()); self::delete($item['id'], true, \OC_User::getUser());
@ -418,13 +461,16 @@ class Share {
* @return Returns true on success or false on failure * @return Returns true on success or false on failure
*/ */
public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) { public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) { if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith,
// Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) {
// Check if this item is a reshare and verify that the permissions
// granted don't exceed the parent shared item
if (isset($item['parent'])) { if (isset($item['parent'])) {
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1); $query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1);
$result = $query->execute(array($item['parent']))->fetchRow(); $result = $query->execute(array($item['parent']))->fetchRow();
if (~(int)$result['permissions'] & $permissions) { if (~(int)$result['permissions'] & $permissions) {
$message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser(); $message = 'Setting permissions for '.$itemSource.' failed,'
.' because the permissions exceed permissions granted to '.\OC_User::getUser();
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message); throw new \Exception($message);
} }
@ -441,9 +487,11 @@ class Share {
$parents = array($item['id']); $parents = array($item['id']);
while (!empty($parents)) { while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'"; $parents = "'".implode("','", $parents)."'";
$query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share`'
.' WHERE `parent` IN ('.$parents.')');
$result = $query->execute(); $result = $query->execute();
// Reset parents array, only go through loop again if items are found that need permissions removed // Reset parents array, only go through loop again if
// items are found that need permissions removed
$parents = array(); $parents = array();
while ($item = $result->fetchRow()) { while ($item = $result->fetchRow()) {
// Check if permissions need to be removed // Check if permissions need to be removed
@ -457,7 +505,8 @@ class Share {
// Remove the permissions for all reshares of this item // Remove the permissions for all reshares of this item
if (!empty($ids)) { if (!empty($ids)) {
$ids = "'".implode("','", $ids)."'"; $ids = "'".implode("','", $ids)."'";
$query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')'); $query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ?'
.' WHERE `id` IN ('.$ids.')');
$query->execute(array($permissions)); $query->execute(array($permissions));
} }
} }
@ -470,7 +519,8 @@ class Share {
} }
public static function setExpirationDate($itemType, $itemSource, $date) { public static function setExpirationDate($itemType, $itemSource, $date) {
if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE, null, -1, false)) { if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(),
self::FORMAT_NONE, null, -1, false)) {
if (!empty($items)) { if (!empty($items)) {
if ($date == '') { if ($date == '') {
$date = null; $date = null;
@ -533,7 +583,8 @@ class Share {
if (!self::getBackend($itemType) instanceof Share_Backend_Collection || $itemType != 'folder') { if (!self::getBackend($itemType) instanceof Share_Backend_Collection || $itemType != 'folder') {
unset($collectionTypes[0]); unset($collectionTypes[0]);
} }
// Return array if collections were found or the item type is a collection itself - collections can be inside collections // Return array if collections were found or the item type is a
// collection itself - collections can be inside collections
if (count($collectionTypes) > 0) { if (count($collectionTypes) > 0) {
return $collectionTypes; return $collectionTypes;
} }
@ -556,7 +607,9 @@ class Share {
* See public functions getItem(s)... for parameter usage * See public functions getItem(s)... for parameter usage
* *
*/ */
private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) { private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null,
$uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1,
$includeCollections = false, $itemShareWithBySource = false) {
if (!self::isEnabled()) { if (!self::isEnabled()) {
if ($limit == 1 || (isset($uidOwner) && isset($item))) { if ($limit == 1 || (isset($uidOwner) && isset($item))) {
return false; return false;
@ -565,7 +618,8 @@ class Share {
} }
} }
$backend = self::getBackend($itemType); $backend = self::getBackend($itemType);
// Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache // Get filesystem root to add it to the file target and remove from the
// file source, match file_source with the file cache
if ($itemType == 'file' || $itemType == 'folder') { if ($itemType == 'file' || $itemType == 'folder') {
$root = \OC\Files\Filesystem::getRoot(); $root = \OC\Files\Filesystem::getRoot();
$where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`'; $where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`';
@ -668,7 +722,8 @@ class Share {
} }
if ($limit != -1 && !$includeCollections) { if ($limit != -1 && !$includeCollections) {
if ($shareType == self::$shareTypeUserAndGroups) { if ($shareType == self::$shareTypeUserAndGroups) {
// Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database // Make sure the unique user target is returned if it exists,
// unique targets should follow the group share in the database
// If the limit is not 1, the filtering can be done later // If the limit is not 1, the filtering can be done later
$where .= ' ORDER BY `*PREFIX*share`.`id` DESC'; $where .= ' ORDER BY `*PREFIX*share`.`id` DESC';
} }
@ -684,16 +739,20 @@ class Share {
// TODO Optimize selects // TODO Optimize selects
if ($format == self::FORMAT_STATUSES) { if ($format == self::FORMAT_STATUSES) {
if ($itemType == 'file' || $itemType == 'folder') { if ($itemType == 'file' || $itemType == 'folder') {
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `file_source`, `path`, `expiration`'; $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`,'
.' `share_type`, `file_source`, `path`, `expiration`';
} else { } else {
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`'; $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`';
} }
} else { } else {
if (isset($uidOwner)) { if (isset($uidOwner)) {
if ($itemType == 'file' || $itemType == 'folder') { if ($itemType == 'file' || $itemType == 'folder') {
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`, `token`'; $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`,'
.' `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`,'
.' `expiration`, `token`';
} else { } else {
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`, `stime`, `file_source`, `expiration`, `token`'; $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`,'
.' `stime`, `file_source`, `expiration`, `token`';
} }
} else { } else {
if ($fileDependent) { if ($fileDependent) {
@ -706,7 +765,9 @@ class Share {
.'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, ' .'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
.'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`'; .'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
} else { } else {
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`'; $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`,
`*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`,
`file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`';
} }
} else { } else {
$select = '*'; $select = '*';
@ -717,7 +778,9 @@ class Share {
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit); $query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
$result = $query->execute($queryArgs); $result = $query->execute($queryArgs);
if (\OC_DB::isError($result)) { if (\OC_DB::isError($result)) {
\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where, \OC_Log::ERROR); \OC_Log::write('OCP\Share',
\OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where,
\OC_Log::ERROR);
} }
$items = array(); $items = array();
$targets = array(); $targets = array();
@ -735,7 +798,8 @@ class Share {
} else if (!isset($uidOwner)) { } else if (!isset($uidOwner)) {
// Check if the same target already exists // Check if the same target already exists
if (isset($targets[$row[$column]])) { if (isset($targets[$row[$column]])) {
// Check if the same owner shared with the user twice through a group and user share - this is allowed // Check if the same owner shared with the user twice
// through a group and user share - this is allowed
$id = $targets[$row[$column]]; $id = $targets[$row[$column]];
if ($items[$id]['uid_owner'] == $row['uid_owner']) { if ($items[$id]['uid_owner'] == $row['uid_owner']) {
// Switch to group share type to ensure resharing conditions aren't bypassed // Switch to group share type to ensure resharing conditions aren't bypassed
@ -743,8 +807,10 @@ class Share {
$items[$id]['share_type'] = self::SHARE_TYPE_GROUP; $items[$id]['share_type'] = self::SHARE_TYPE_GROUP;
$items[$id]['share_with'] = $row['share_with']; $items[$id]['share_with'] = $row['share_with'];
} }
// Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing // Switch ids if sharing permission is granted on only
if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE && (int)$row['permissions'] & PERMISSION_SHARE) { // one share to ensure correct parent is used if resharing
if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE
&& (int)$row['permissions'] & PERMISSION_SHARE) {
$items[$row['id']] = $items[$id]; $items[$row['id']] = $items[$id];
$switchedItems[$id] = $row['id']; $switchedItems[$id] = $row['id'];
unset($items[$id]); unset($items[$id]);
@ -798,7 +864,8 @@ class Share {
} }
// Check if this is a collection of the requested item type // Check if this is a collection of the requested item type
if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) { if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) {
if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) { if (($collectionBackend = self::getBackend($row['item_type']))
&& $collectionBackend instanceof Share_Backend_Collection) {
// Collections can be inside collections, check if the item is a collection // Collections can be inside collections, check if the item is a collection
if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) { if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) {
$collectionItems[] = $row; $collectionItems[] = $row;
@ -825,7 +892,8 @@ class Share {
$meta = \OC\Files\Filesystem::getFileInfo($child['file_path']); $meta = \OC\Files\Filesystem::getFileInfo($child['file_path']);
$childItem['file_source'] = $meta['fileid']; $childItem['file_source'] = $meta['fileid'];
} }
$childItem['file_target'] = \OC\Files\Filesystem::normalizePath($child['file_path']); $childItem['file_target'] =
\OC\Files\Filesystem::normalizePath($child['file_path']);
} }
if (isset($item)) { if (isset($item)) {
if ($childItem[$column] == $item) { if ($childItem[$column] == $item) {
@ -898,7 +966,8 @@ class Share {
* @param bool|array Parent folder target (optional) * @param bool|array Parent folder target (optional)
* @return bool Returns true on success or false on failure * @return bool Returns true on success or false on failure
*/ */
private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null, $token = null) { private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
$permissions, $parentFolder = null, $token = null) {
$backend = self::getBackend($itemType); $backend = self::getBackend($itemType);
// Check if this is a reshare // Check if this is a reshare
if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) { if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) {
@ -911,7 +980,8 @@ class Share {
// Check if share permissions is granted // Check if share permissions is granted
if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) { if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) {
if (~(int)$checkReshare['permissions'] & $permissions) { if (~(int)$checkReshare['permissions'] & $permissions) {
$message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner; $message = 'Sharing '.$itemSource
.' failed, because the permissions exceed permissions granted to '.$uidOwner;
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message); throw new \Exception($message);
} else { } else {
@ -933,7 +1003,8 @@ class Share {
$suggestedItemTarget = null; $suggestedItemTarget = null;
$suggestedFileTarget = null; $suggestedFileTarget = null;
if (!$backend->isValidSource($itemSource, $uidOwner)) { if (!$backend->isValidSource($itemSource, $uidOwner)) {
$message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source'; $message = 'Sharing '.$itemSource.' failed, because the sharing backend for '
.$itemType.' could not find its source';
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR); \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
throw new \Exception($message); throw new \Exception($message);
} }
@ -956,14 +1027,18 @@ class Share {
$fileSource = null; $fileSource = null;
} }
} }
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`, `token`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`,'
.' `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`,'
.' `file_target`, `token`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
// Share with a group // Share with a group
if ($shareType == self::SHARE_TYPE_GROUP) { if ($shareType == self::SHARE_TYPE_GROUP) {
$groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner, $suggestedItemTarget); $groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'],
$uidOwner, $suggestedItemTarget);
if (isset($fileSource)) { if (isset($fileSource)) {
if ($parentFolder) { if ($parentFolder) {
if ($parentFolder === true) { if ($parentFolder === true) {
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); $groupFileTarget = self::generateTarget('file', $filePath, $shareType,
$shareWith['group'], $uidOwner, $suggestedFileTarget);
// Set group default file target for future use // Set group default file target for future use
$parentFolders[0]['folder'] = $groupFileTarget; $parentFolders[0]['folder'] = $groupFileTarget;
} else { } else {
@ -972,21 +1047,25 @@ class Share {
$parent = $parentFolder[0]['id']; $parent = $parentFolder[0]['id'];
} }
} else { } else {
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget); $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'],
$uidOwner, $suggestedFileTarget);
} }
} else { } else {
$groupFileTarget = null; $groupFileTarget = null;
} }
$query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget, $token)); $query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType,
$shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget, $token));
// Save this id, any extra rows for this group share will need to reference it // Save this id, any extra rows for this group share will need to reference it
$parent = \OC_DB::insertid('*PREFIX*share'); $parent = \OC_DB::insertid('*PREFIX*share');
// Loop through all users of this group in case we need to add an extra row // Loop through all users of this group in case we need to add an extra row
foreach ($shareWith['users'] as $uid) { foreach ($shareWith['users'] as $uid) {
$itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedItemTarget, $parent); $itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid,
$uidOwner, $suggestedItemTarget, $parent);
if (isset($fileSource)) { if (isset($fileSource)) {
if ($parentFolder) { if ($parentFolder) {
if ($parentFolder === true) { if ($parentFolder === true) {
$fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid,
$uidOwner, $suggestedFileTarget, $parent);
if ($fileTarget != $groupFileTarget) { if ($fileTarget != $groupFileTarget) {
$parentFolders[$uid]['folder'] = $fileTarget; $parentFolders[$uid]['folder'] = $fileTarget;
} }
@ -995,7 +1074,8 @@ class Share {
$parent = $parentFolder[$uid]['id']; $parent = $parentFolder[$uid]['id'];
} }
} else { } else {
$fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent); $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER,
$uid, $uidOwner, $suggestedFileTarget, $parent);
} }
} else { } else {
$fileTarget = null; $fileTarget = null;
@ -1016,7 +1096,9 @@ class Share {
)); ));
// Insert an extra row for the group share if the item or file target is unique for this user // Insert an extra row for the group share if the item or file target is unique for this user
if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) { if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) {
$query->execute(array($itemType, $itemSource, $itemTarget, $parent, self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token)); $query->execute(array($itemType, $itemSource, $itemTarget, $parent,
self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(),
$fileSource, $fileTarget, $token));
$id = \OC_DB::insertid('*PREFIX*share'); $id = \OC_DB::insertid('*PREFIX*share');
} }
} }
@ -1025,23 +1107,27 @@ class Share {
return $parentFolders; return $parentFolders;
} }
} else { } else {
$itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget); $itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
$suggestedItemTarget);
if (isset($fileSource)) { if (isset($fileSource)) {
if ($parentFolder) { if ($parentFolder) {
if ($parentFolder === true) { if ($parentFolder === true) {
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith,
$uidOwner, $suggestedFileTarget);
$parentFolders['folder'] = $fileTarget; $parentFolders['folder'] = $fileTarget;
} else { } else {
$fileTarget = $parentFolder['folder'].$itemSource; $fileTarget = $parentFolder['folder'].$itemSource;
$parent = $parentFolder['id']; $parent = $parentFolder['id'];
} }
} else { } else {
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget); $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner,
$suggestedFileTarget);
} }
} else { } else {
$fileTarget = null; $fileTarget = null;
} }
$query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token)); $query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner,
$permissions, time(), $fileSource, $fileTarget, $token));
$id = \OC_DB::insertid('*PREFIX*share'); $id = \OC_DB::insertid('*PREFIX*share');
\OC_Hook::emit('OCP\Share', 'post_shared', array( \OC_Hook::emit('OCP\Share', 'post_shared', array(
'itemType' => $itemType, 'itemType' => $itemType,
@ -1076,7 +1162,8 @@ class Share {
* @param int The id of the parent group share (optional) * @param int The id of the parent group share (optional)
* @return string Item target * @return string Item target
*/ */
private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) { private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
$suggestedTarget = null, $groupParent = null) {
$backend = self::getBackend($itemType); $backend = self::getBackend($itemType);
if ($shareType == self::SHARE_TYPE_LINK) { if ($shareType == self::SHARE_TYPE_LINK) {
if (isset($suggestedTarget)) { if (isset($suggestedTarget)) {
@ -1143,18 +1230,28 @@ class Share {
// Find similar targets to improve backend's chances to generate a unqiue target // Find similar targets to improve backend's chances to generate a unqiue target
if ($userAndGroups) { if ($userAndGroups) {
if ($column == 'file_target') { if ($column == 'file_target') {
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
$result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); .' WHERE `item_type` IN (\'file\', \'folder\')'
.' AND `share_type` IN (?,?,?)'
.' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
$result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP,
self::$shareTypeGroupUserUnique));
} else { } else {
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'); $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique)); .' WHERE `item_type` = ? AND `share_type` IN (?,?,?)'
.' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER,
self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
} }
} else { } else {
if ($column == 'file_target') { if ($column == 'file_target') {
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` = ? AND `share_with` = ?'); $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
.' WHERE `item_type` IN (\'file\', \'folder\')'
.' AND `share_type` = ? AND `share_with` = ?');
$result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith)); $result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith));
} else { } else {
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?'); $checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
.' WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?');
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith)); $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith));
} }
} }
@ -1182,21 +1279,33 @@ class Share {
$parents = array($parent); $parents = array($parent);
while (!empty($parents)) { while (!empty($parents)) {
$parents = "'".implode("','", $parents)."'"; $parents = "'".implode("','", $parents)."'";
// Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share // Check the owner on the first search of reshares, useful for
// finding and deleting the reshares by a single user of a group share
if (count($ids) == 1 && isset($uidOwner)) { if (count($ids) == 1 && isset($uidOwner)) {
$query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?'); $query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent`'
.' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?');
$result = $query->execute(array($uidOwner)); $result = $query->execute(array($uidOwner));
} else { } else {
$query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')'); $query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner`'
.' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
$result = $query->execute(); $result = $query->execute();
} }
// Reset parents array, only go through loop again if items are found // Reset parents array, only go through loop again if items are found
$parents = array(); $parents = array();
while ($item = $result->fetchRow()) { while ($item = $result->fetchRow()) {
// Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users // Search for a duplicate parent share, this occurs when an
// item is shared to the same user through a group and user or the
// same item is shared by different users
$userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner'])); $userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner']));
$query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `item_type` = ? AND `item_target` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\') AND `uid_owner` != ? AND `id` != ?'); $query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share`'
$duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow(); .' WHERE `item_type` = ?'
.' AND `item_target` = ?'
.' AND `share_type` IN (?,?,?)'
.' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'
.' AND `uid_owner` != ? AND `id` != ?');
$duplicateParent = $query->execute(array($item['item_type'], $item['item_target'],
self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique,
$item['uid_owner'], $item['parent']))->fetchRow();
if ($duplicateParent) { if ($duplicateParent) {
// Change the parent to the other item id if share permission is granted // Change the parent to the other item id if share permission is granted
if ($duplicateParent['permissions'] & PERMISSION_SHARE) { if ($duplicateParent['permissions'] & PERMISSION_SHARE) {
@ -1225,7 +1334,8 @@ class Share {
public static function post_deleteUser($arguments) { public static function post_deleteUser($arguments) {
// Delete any items shared with the deleted user // Delete any items shared with the deleted user
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?'); $query = \OC_DB::prepare('DELETE FROM `*PREFIX*share`'
.' WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?');
$result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique)); $result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique));
// Delete any items the deleted user shared // Delete any items the deleted user shared
$query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?'); $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?');
@ -1239,21 +1349,27 @@ class Share {
// Find the group shares and check if the user needs a unique target // Find the group shares and check if the user needs a unique target
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?'); $query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?');
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'])); $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid']));
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)'); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`,'
.' `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`,'
.' `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
while ($item = $result->fetchRow()) { while ($item = $result->fetchRow()) {
if ($item['item_type'] == 'file' || $item['item_type'] == 'file') { if ($item['item_type'] == 'file' || $item['item_type'] == 'file') {
$itemTarget = null; $itemTarget = null;
} else { } else {
$itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']); $itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER,
$arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']);
} }
if (isset($item['file_source'])) { if (isset($item['file_source'])) {
$fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']); $fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER,
$arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']);
} else { } else {
$fileTarget = null; $fileTarget = null;
} }
// Insert an extra row for the group share if the item or file target is unique for this user // Insert an extra row for the group share if the item or file target is unique for this user
if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) { if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) {
$query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'], self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'], $item['stime'], $item['file_source'], $fileTarget)); $query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'],
self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'],
$item['stime'], $item['file_source'], $fileTarget));
\OC_DB::insertid('*PREFIX*share'); \OC_DB::insertid('*PREFIX*share');
} }
} }
@ -1261,8 +1377,10 @@ class Share {
public static function post_removeFromGroup($arguments) { public static function post_removeFromGroup($arguments) {
// TODO Don't call if user deleted? // TODO Don't call if user deleted?
$query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share` WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)'); $query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share`'
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid'])); .' WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)');
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique,
$arguments['uid']));
while ($item = $result->fetchRow()) { while ($item = $result->fetchRow()) {
if ($item['share_type'] == self::SHARE_TYPE_GROUP) { if ($item['share_type'] == self::SHARE_TYPE_GROUP) {
// Delete all reshares by this user of the group share // Delete all reshares by this user of the group share
@ -1319,10 +1437,18 @@ interface Share_Backend {
* @param int Format * @param int Format
* @return ? * @return ?
* *
* The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info. * The items array is a 3-dimensional array with the item_source as the
* first key and the share id as the second key to an array with the share
* info.
*
* The key/value pairs included in the share info depend on the function originally called: * The key/value pairs included in the share info depend on the function originally called:
* If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source * If called by getItem(s)Shared: id, item_type, item, item_source,
* If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target * share_type, share_with, permissions, stime, file_source
*
* If called by getItem(s)SharedWith: id, item_type, item, item_source,
* item_target, share_type, share_with, permissions, stime, file_source,
* file_target
*
* This function allows the backend to control the output of shared items with custom formats. * This function allows the backend to control the output of shared items with custom formats.
* It is only called through calls to the public getItem(s)Shared(With) functions. * It is only called through calls to the public getItem(s)Shared(With) functions.
*/ */

View File

@ -99,7 +99,8 @@ function html_select_options($options, $selected, $params=array()) {
/** /**
* This class provides the template system for owncloud. You can use it to load specific templates, add data and generate the html code * This class provides the template system for owncloud. You can use it to load
* specific templates, add data and generate the html code
*/ */
class Template extends \OC_Template { class Template extends \OC_Template {

View File

@ -31,7 +31,8 @@
namespace OCP; namespace OCP;
/** /**
* This class provides access to the user management. You can get information about the currently logged in user and the permissions for example * This class provides access to the user management. You can get information
* about the currently logged in user and the permissions for example
*/ */
class User { class User {
/** /**

View File

@ -59,9 +59,11 @@ class Util {
* @param string $fromname * @param string $fromname
* @param bool $html * @param bool $html
*/ */
public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') { public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
$html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') {
// call the internal mail class // call the internal mail class
\OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html, $altbody, $ccaddress, $ccname, $bcc); \OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
$html, $altbody, $ccaddress, $ccname, $bcc);
} }
/** /**
@ -340,7 +342,8 @@ class Util {
/** /**
* @brief Used to sanitize HTML * @brief Used to sanitize HTML
* *
* This function is used to sanitize HTML and should be applied on any string or array of strings before displaying it on a web page. * This function is used to sanitize HTML and should be applied on any
* string or array of strings before displaying it on a web page.
* *
* @param string|array of strings * @param string|array of strings
* @return array with sanitized strings or a single sinitized string, depends on the input parameter. * @return array with sanitized strings or a single sinitized string, depends on the input parameter.

View File

@ -205,7 +205,8 @@ class OC_Setup {
} }
$oldUser=OC_Config::getValue('dbuser', false); $oldUser=OC_Config::getValue('dbuser', false);
$query="SELECT user FROM mysql.user WHERE user='$dbuser'"; //this should be enough to check for admin rights in mysql //this should be enough to check for admin rights in mysql
$query="SELECT user FROM mysql.user WHERE user='$dbuser'";
if(mysql_query($query, $connection)) { if(mysql_query($query, $connection)) {
//use the admin login data for the new database user //use the admin login data for the new database user
@ -235,7 +236,8 @@ class OC_Setup {
} }
//fill the database if needed //fill the database if needed
$query="select count(*) from information_schema.tables where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';"; $query="select count(*) from information_schema.tables'
.' where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';";
$result = mysql_query($query, $connection); $result = mysql_query($query, $connection);
if($result) { if($result) {
$row=mysql_fetch_row($result); $row=mysql_fetch_row($result);
@ -257,7 +259,8 @@ class OC_Setup {
echo($entry); echo($entry);
} }
$query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'"; $query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'";
$result = mysql_query($query, $connection); //this query will fail if there aren't the right permissons, ignore the error //this query will fail if there aren't the right permissons, ignore the error
$result = mysql_query($query, $connection);
} }
private static function createDBUser($name, $password, $connection) { private static function createDBUser($name, $password, $connection) {
@ -407,7 +410,8 @@ class OC_Setup {
} }
} }
private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username) { private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace,
$username) {
$l = self::getTrans(); $l = self::getTrans();
$e_host = addslashes($dbhost); $e_host = addslashes($dbhost);
$e_dbname = addslashes($dbname); $e_dbname = addslashes($dbname);
@ -424,7 +428,8 @@ class OC_Setup {
} }
//check for roles creation rights in oracle //check for roles creation rights in oracle
$query="SELECT count(*) FROM user_role_privs, role_sys_privs WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'"; $query="SELECT count(*) FROM user_role_privs, role_sys_privs'
.' WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'";
$stmt = oci_parse($connection, $query); $stmt = oci_parse($connection, $query);
if (!$stmt) { if (!$stmt) {
$entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />'; $entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
@ -641,8 +646,10 @@ class OC_Setup {
header("Location: ".OC::$WEBROOT.'/'); header("Location: ".OC::$WEBROOT.'/');
} else { } else {
$error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); $error = $l->t('Your web server is not yet properly setup to allow files'
$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); .' synchronization because the WebDAV interface seems to be broken.');
$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.',
'http://doc.owncloud.org/server/5.0/admin_manual/installation.html');
$tmpl = new OC_Template('', 'error', 'guest'); $tmpl = new OC_Template('', 'error', 'guest');
$tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false); $tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false);

View File

@ -192,7 +192,13 @@ class OC_Template{
// Content Security Policy // Content Security Policy
// If you change the standard policy, please also change it in config.sample.php // If you change the standard policy, please also change it in config.sample.php
$policy = OC_Config::getValue('custom_csp_policy', 'default-src \'self\'; script-src \'self\' \'unsafe-eval\'; style-src \'self\' \'unsafe-inline\'; frame-src *; img-src *; font-src \'self\' data:'); $policy = OC_Config::getValue('custom_csp_policy',
'default-src \'self\'; '
.'script-src \'self\' \'unsafe-eval\'; '
.'style-src \'self\' \'unsafe-inline\'; '
.'frame-src *; '
.'img-src *; '
.'font-src \'self\' data:');
header('Content-Security-Policy:'.$policy); // Standard header('Content-Security-Policy:'.$policy); // Standard
header('X-WebKit-CSP:'.$policy); // Older webkit browsers header('X-WebKit-CSP:'.$policy); // Older webkit browsers
@ -215,7 +221,8 @@ class OC_Template{
$mode='tablet'; $mode='tablet';
}elseif(stripos($_SERVER['HTTP_USER_AGENT'], 'iphone')>0) { }elseif(stripos($_SERVER['HTTP_USER_AGENT'], 'iphone')>0) {
$mode='mobile'; $mode='mobile';
}elseif((stripos($_SERVER['HTTP_USER_AGENT'], 'N9')>0) and (stripos($_SERVER['HTTP_USER_AGENT'], 'nokia')>0)) { }elseif((stripos($_SERVER['HTTP_USER_AGENT'], 'N9')>0)
and (stripos($_SERVER['HTTP_USER_AGENT'], 'nokia')>0)) {
$mode='mobile'; $mode='mobile';
}else{ }else{
$mode='default'; $mode='default';
@ -285,7 +292,8 @@ class OC_Template{
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/$app/templates/", $name, $fext)) { if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/$app/templates/", $name, $fext)) {
}elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/$app/templates/", $name, $fext)) { }elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/$app/templates/", $name, $fext)) {
}else{ }else{
echo('template not found: template:'.$name.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT); echo('template not found: template:'.$name.' formfactor:'.$fext
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
die(); die();
} }
@ -295,7 +303,8 @@ class OC_Template{
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/core/templates/", $name, $fext)) { if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/core/templates/", $name, $fext)) {
} elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/core/templates/", $name, $fext)) { } elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/core/templates/", $name, $fext)) {
}else{ }else{
echo('template not found: template:'.$name.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT); echo('template not found: template:'.$name.' formfactor:'.$fext
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
die(); die();
} }
} }

View File

@ -134,7 +134,8 @@ class OC_TemplateLayout extends OC_Template {
} }
} }
if(! $append) { if(! $append) {
echo('css file not found: style:'.$style.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT); echo('css file not found: style:'.$style.' formfactor:'.$fext
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
die(); die();
} }
} }
@ -202,7 +203,8 @@ class OC_TemplateLayout extends OC_Template {
} }
} }
if(! $append) { if(! $append) {
echo('js file not found: script:'.$script.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT); echo('js file not found: script:'.$script.' formfactor:'.$fext
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
die(); die();
} }
} }

View File

@ -30,7 +30,9 @@ class OC_Updater{
*/ */
public static function check() { public static function check() {
OC_Appconfig::setValue('core', 'lastupdatedat', microtime(true)); OC_Appconfig::setValue('core', 'lastupdatedat', microtime(true));
if(OC_Appconfig::getValue('core', 'installedat', '')=='') OC_Appconfig::setValue('core', 'installedat', microtime(true)); if(OC_Appconfig::getValue('core', 'installedat', '')=='') {
OC_Appconfig::setValue('core', 'installedat', microtime(true));
}
$updaterurl='http://apps.owncloud.com/updater.php'; $updaterurl='http://apps.owncloud.com/updater.php';
$version=OC_Util::getVersion(); $version=OC_Util::getVersion();
@ -72,7 +74,9 @@ class OC_Updater{
if(OC_Config::getValue('updatechecker', true)==true) { if(OC_Config::getValue('updatechecker', true)==true) {
$data=OC_Updater::check(); $data=OC_Updater::check();
if(isset($data['version']) and $data['version']<>'') { if(isset($data['version']) and $data['version']<>'') {
$txt='<span style="color:#AA0000; font-weight:bold;">'.$l->t('%s is available. Get <a href="%s">more information</a>', array($data['versionstring'], $data['web'])).'</span>'; $txt='<span style="color:#AA0000; font-weight:bold;">'
.$l->t('%s is available. Get <a href="%s">more information</a>',
array($data['versionstring'], $data['web'])).'</span>';
}else{ }else{
$txt=$l->t('up to date'); $txt=$l->t('up to date');
} }

View File

@ -160,7 +160,8 @@ class OC_User {
// Check the name for bad characters // Check the name for bad characters
// Allowed are: "a-z", "A-Z", "0-9" and "_.@-" // Allowed are: "a-z", "A-Z", "0-9" and "_.@-"
if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $uid )) { if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $uid )) {
throw new Exception('Only the following characters are allowed in a username: "a-z", "A-Z", "0-9", and "_.@-"'); throw new Exception('Only the following characters are allowed in a username:'
.' "a-z", "A-Z", "0-9", and "_.@-"');
} }
// No empty username // No empty username
if(trim($uid) == '') { if(trim($uid) == '') {
@ -541,7 +542,7 @@ class OC_User {
*/ */
public static function userExists($uid, $excludingBackend=null) { public static function userExists($uid, $excludingBackend=null) {
foreach(self::$_usedBackends as $backend) { foreach(self::$_usedBackends as $backend) {
if (!is_null($excludingBackend) && !strcmp(get_class($backend),$excludingBackend)) { if (!is_null($excludingBackend) && !strcmp(get_class($backend), $excludingBackend)) {
OC_Log::write('OC_User', $excludingBackend . 'excluded from user existance check.', OC_Log::DEBUG); OC_Log::write('OC_User', $excludingBackend . 'excluded from user existance check.', OC_Log::DEBUG);
continue; continue;
} }
@ -588,7 +589,8 @@ class OC_User {
* @param string $userid * @param string $userid
*/ */
public static function enableUser($userid) { public static function enableUser($userid) {
$sql = "DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?"; $sql = "DELETE FROM `*PREFIX*preferences`'
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
$stmt = OC_DB::prepare($sql); $stmt = OC_DB::prepare($sql);
if ( ! OC_DB::isError($stmt) ) { if ( ! OC_DB::isError($stmt) ) {
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false')); $result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
@ -606,14 +608,17 @@ class OC_User {
* @return bool * @return bool
*/ */
public static function isEnabled($userid) { public static function isEnabled($userid) {
$sql = "SELECT `userid` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?"; $sql = "SELECT `userid` FROM `*PREFIX*preferences`'
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
$stmt = OC_DB::prepare($sql); $stmt = OC_DB::prepare($sql);
if ( ! OC_DB::isError($stmt) ) { if ( ! OC_DB::isError($stmt) ) {
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false')); $result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
if ( ! OC_DB::isError($result) ) { if ( ! OC_DB::isError($result) ) {
return $result->numRows() ? false : true; return $result->numRows() ? false : true;
} else { } else {
OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($result), OC_Log::ERROR); OC_Log::write('OC_User',
'could not check if enabled: '. OC_DB::getErrorMessage($result),
OC_Log::ERROR);
} }
} else { } else {
OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR); OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR);

View File

@ -155,7 +155,8 @@ class OC_User_Database extends OC_User_Backend {
*/ */
public function getDisplayNames($search = '', $limit = null, $offset = null) { public function getDisplayNames($search = '', $limit = null, $offset = null) {
$displayNames = array(); $displayNames = array();
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset); $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users`'
.' WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset);
$result = $query->execute(array($search.'%')); $result = $query->execute(array($search.'%'));
$users = array(); $users = array();
while ($row = $result->fetchRow()) { while ($row = $result->fetchRow()) {
@ -163,7 +164,8 @@ class OC_User_Database extends OC_User_Backend {
} }
// let's see if we can also find some users who don't have a display name yet // let's see if we can also find some users who don't have a display name yet
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset); $query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users`'
.' WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset);
$result = $query->execute(array($search.'%')); $result = $query->execute(array($search.'%'));
while ($row = $result->fetchRow()) { while ($row = $result->fetchRow()) {
$displayName = trim($row['displayname'], ' '); $displayName = trim($row['displayname'], ' ');

View File

@ -73,7 +73,8 @@ class OC_Util {
* @return array * @return array
*/ */
public static function getVersion() { public static function getVersion() {
// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user // hint: We only can count up. So the internal version number
// of ownCloud 4.5 will be 4.90.0. This is not visible to the user
return array(4, 92, 10); return array(4, 92, 10);
} }
@ -86,7 +87,9 @@ class OC_Util {
} }
/** /**
* get the current installed edition of ownCloud. There is the community edition that just returns an empty string and the enterprise edition that returns "Enterprise". * get the current installed edition of ownCloud. There is the community
* edition that just returns an empty string and the enterprise edition
* that returns "Enterprise".
* @return string * @return string
*/ */
public static function getEditionString() { public static function getEditionString() {
@ -166,24 +169,33 @@ class OC_Util {
$web_server_restart= false; $web_server_restart= false;
//check for database drivers //check for database drivers
if(!(is_callable('sqlite_open') or class_exists('SQLite3')) and !is_callable('mysql_connect') and !is_callable('pg_connect')) { if(!(is_callable('sqlite_open') or class_exists('SQLite3'))
$errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.<br/>', 'hint'=>'');//TODO: sane hint and !is_callable('mysql_connect')
and !is_callable('pg_connect')) {
$errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.<br/>',
'hint'=>'');//TODO: sane hint
$web_server_restart= true; $web_server_restart= true;
} }
//common hint for all file permissons error messages //common hint for all file permissons error messages
$permissionsHint="Permissions can usually be fixed by giving the webserver write access to the ownCloud directory"; $permissionsHint="Permissions can usually be fixed by giving the webserver write access'
.' to the ownCloud directory";
// Check if config folder is writable. // Check if config folder is writable.
if(!is_writable(OC::$SERVERROOT."/config/") or !is_readable(OC::$SERVERROOT."/config/")) { if(!is_writable(OC::$SERVERROOT."/config/") or !is_readable(OC::$SERVERROOT."/config/")) {
$errors[]=array('error'=>"Can't write into config directory 'config'", 'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud"); $errors[]=array('error'=>"Can't write into config directory 'config'",
'hint'=>"You can usually fix this by giving the webserver user write access'
.' to the config directory in owncloud");
} }
// Check if there is a writable install folder. // Check if there is a writable install folder.
if(OC_Config::getValue('appstoreenabled', true)) { if(OC_Config::getValue('appstoreenabled', true)) {
if( OC_App::getInstallPath() === null || !is_writable(OC_App::getInstallPath()) || !is_readable(OC_App::getInstallPath()) ) { if( OC_App::getInstallPath() === null
$errors[]=array('error'=>"Can't write into apps directory", 'hint'=>"You can usually fix this by giving the webserver user write access to the apps directory || !is_writable(OC_App::getInstallPath())
in owncloud or disabling the appstore in the config file."); || !is_readable(OC_App::getInstallPath()) ) {
$errors[]=array('error'=>"Can't write into apps directory",
'hint'=>"You can usually fix this by giving the webserver user write access'
.' to the apps directory in owncloud or disabling the appstore in the config file.");
} }
} }
$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
@ -193,69 +205,87 @@ class OC_Util {
if ($success) { if ($success) {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY)); $errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
} else { } else {
$errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")", 'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' (in a terminal, use the command 'chown -R www-data:www-data /path/to/your/owncloud/install/data' "); $errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")",
'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '"
.OC::$SERVERROOT."' (in a terminal, use the command "
."'chown -R www-data:www-data /path/to/your/owncloud/install/data' ");
} }
} else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) { } else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>', 'hint'=>$permissionsHint); $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>',
'hint'=>$permissionsHint);
} else { } else {
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY)); $errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
} }
// check if all required php modules are present // check if all required php modules are present
if(!class_exists('ZipArchive')) { if(!class_exists('ZipArchive')) {
$errors[]=array('error'=>'PHP module zip not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module zip not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('mb_detect_encoding')) { if(!function_exists('mb_detect_encoding')) {
$errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('ctype_digit')) { if(!function_exists('ctype_digit')) {
$errors[]=array('error'=>'PHP module ctype is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module ctype is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('json_encode')) { if(!function_exists('json_encode')) {
$errors[]=array('error'=>'PHP module JSON is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module JSON is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('imagepng')) { if(!function_exists('imagepng')) {
$errors[]=array('error'=>'PHP module GD is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module GD is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('gzencode')) { if(!function_exists('gzencode')) {
$errors[]=array('error'=>'PHP module zlib is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module zlib is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('iconv')) { if(!function_exists('iconv')) {
$errors[]=array('error'=>'PHP module iconv is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module iconv is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!function_exists('simplexml_load_string')) { if(!function_exists('simplexml_load_string')) {
$errors[]=array('error'=>'PHP module SimpleXML is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP module SimpleXML is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
if(floatval(phpversion())<5.3) { if(floatval(phpversion())<5.3) {
$errors[]=array('error'=>'PHP 5.3 is required.<br/>', 'hint'=>'Please ask your server administrator to update PHP to version 5.3 or higher. PHP 5.2 is no longer supported by ownCloud and the PHP community.'); $errors[]=array('error'=>'PHP 5.3 is required.<br/>',
'hint'=>'Please ask your server administrator to update PHP to version 5.3 or higher.'
.' PHP 5.2 is no longer supported by ownCloud and the PHP community.');
$web_server_restart= false; $web_server_restart= false;
} }
if(!defined('PDO::ATTR_DRIVER_NAME')) { if(!defined('PDO::ATTR_DRIVER_NAME')) {
$errors[]=array('error'=>'PHP PDO module is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.'); $errors[]=array('error'=>'PHP PDO module is not installed.<br/>',
'hint'=>'Please ask your server administrator to install the module.');
$web_server_restart= false; $web_server_restart= false;
} }
$handler = ini_get("session.save_handler"); $handler = ini_get("session.save_handler");
if($handler == "files") { if($handler == "files") {
$tmpDir = session_save_path(); $tmpDir = session_save_path();
if($tmpDir != ""){ if($tmpDir != "") {
if(!@is_writable($tmpDir)){ if(!@is_writable($tmpDir)) {
$errors[]=array('error' => 'The temporary folder used by PHP to save the session data is either incorrect or not writable! Please check : '.session_save_path().'<br/>', $errors[]=array('error' => 'The temporary folder used by PHP to save the session data'
'hint'=>'Please ask your server administrator to grant write access or define another temporary folder.'); .' is either incorrect or not writable! Please check : '.session_save_path().'<br/>',
'hint'=>'Please ask your server administrator to grant write access'
.' or define another temporary folder.');
} }
} }
} }
if($web_server_restart) { if($web_server_restart) {
$errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>', 'hint'=>'Please ask your server administrator to restart the web server.'); $errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>',
'hint'=>'Please ask your server administrator to restart the web server.');
} }
return $errors; return $errors;
@ -270,14 +300,16 @@ class OC_Util {
if (stristr(PHP_OS, 'WIN')) { if (stristr(PHP_OS, 'WIN')) {
//TODO: permissions checks for windows hosts //TODO: permissions checks for windows hosts
} else { } else {
$permissionsModHint = 'Please change the permissions to 0770 so that the directory cannot be listed by other users.'; $permissionsModHint = 'Please change the permissions to 0770 so that the directory'
.' cannot be listed by other users.';
$prems = substr(decoct(@fileperms($dataDirectory)), -3); $prems = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($prems, -1) != '0') { if (substr($prems, -1) != '0') {
OC_Helper::chmodr($dataDirectory, 0770); OC_Helper::chmodr($dataDirectory, 0770);
clearstatcache(); clearstatcache();
$prems = substr(decoct(@fileperms($dataDirectory)), -3); $prems = substr(decoct(@fileperms($dataDirectory)), -3);
if (substr($prems, 2, 1) != '0') { if (substr($prems, 2, 1) != '0') {
$errors[] = array('error' => 'Data directory ('.$dataDirectory.') is readable for other users<br/>', 'hint' => $permissionsModHint); $errors[] = array('error' => 'Data directory ('.$dataDirectory.') is readable for other users<br/>',
'hint' => $permissionsModHint);
} }
} }
} }
@ -323,7 +355,8 @@ class OC_Util {
public static function checkLoggedIn() { public static function checkLoggedIn() {
// Check if we are a user // Check if we are a user
if( !OC_User::isLoggedIn()) { if( !OC_User::isLoggedIn()) {
header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => OC_Request::requestUri()))); header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php',
array('redirect_url' => OC_Request::requestUri())));
exit(); exit();
} }
} }
@ -552,7 +585,8 @@ class OC_Util {
} }
/** /**
* Check if the setlocal call doesn't work. This can happen if the right local packages are not available on the server. * Check if the setlocal call doesn't work. This can happen if the right
* local packages are not available on the server.
*/ */
public static function issetlocaleworking() { public static function issetlocaleworking() {
// setlocale test is pointless on Windows // setlocale test is pointless on Windows
@ -691,10 +725,10 @@ class OC_Util {
curl_setopt($curl, CURLOPT_MAXREDIRS, 10); curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_USERAGENT, "ownCloud Server Crawler"); curl_setopt($curl, CURLOPT_USERAGENT, "ownCloud Server Crawler");
if(OC_Config::getValue('proxy','')<>'') { if(OC_Config::getValue('proxy', '')<>'') {
curl_setopt($curl, CURLOPT_PROXY, OC_Config::getValue('proxy')); curl_setopt($curl, CURLOPT_PROXY, OC_Config::getValue('proxy'));
} }
if(OC_Config::getValue('proxyuserpwd','')<>'') { if(OC_Config::getValue('proxyuserpwd', '')<>'') {
curl_setopt($curl, CURLOPT_PROXYUSERPWD, OC_Config::getValue('proxyuserpwd')); curl_setopt($curl, CURLOPT_PROXYUSERPWD, OC_Config::getValue('proxyuserpwd'));
} }
$data = curl_exec($curl); $data = curl_exec($curl);
@ -703,7 +737,7 @@ class OC_Util {
} else { } else {
$contextArray = null; $contextArray = null;
if(OC_Config::getValue('proxy','')<>'') { if(OC_Config::getValue('proxy', '')<>'') {
$contextArray = array( $contextArray = array(
'http' => array( 'http' => array(
'timeout' => 10, 'timeout' => 10,

View File

@ -689,7 +689,9 @@ class OC_VCategories {
$stmt = OCP\DB::prepare($sql); $stmt = OCP\DB::prepare($sql);
$result = $stmt->execute(array($id)); $result = $stmt->execute(array($id));
if (OC_DB::isError($result)) { if (OC_DB::isError($result)) {
OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR); OC_Log::write('core',
__METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result),
OC_Log::ERROR);
} }
} catch(Exception $e) { } catch(Exception $e) {
OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),

View File

@ -15,7 +15,7 @@ switch($operation){
case 'register': case 'register':
// Here external apps can register with an ownCloud // Here external apps can register with an ownCloud
if(empty($_GET['name']) || empty($_GET['url'])){ if(empty($_GET['name']) || empty($_GET['url'])) {
// Invalid request // Invalid request
echo 401; echo 401;
} else { } else {
@ -54,13 +54,13 @@ switch($operation){
foreach($consumer['scopes'] as $requiredapp){ foreach($consumer['scopes'] as $requiredapp){
// App scopes are in this format: app_$appname // App scopes are in this format: app_$appname
$requiredapp = end(explode('_', $requiredapp)); $requiredapp = end(explode('_', $requiredapp));
if(!in_array($requiredapp, $apps)){ if(!in_array($requiredapp, $apps)) {
$notfound[] = $requiredapp; $notfound[] = $requiredapp;
} }
} }
if(!empty($notfound)){ if(!empty($notfound)) {
// We need more apps :( Show error // We need more apps :( Show error
if(count($notfound)==1){ if(count($notfound)==1) {
$message = 'requires that you have an extra app installed on your ownCloud. Please contact your ownCloud administrator and ask them to install the app below.'; $message = 'requires that you have an extra app installed on your ownCloud. Please contact your ownCloud administrator and ask them to install the app below.';
} else { } else {
$message = 'requires that you have some extra apps installed on your ownCloud. Please contract your ownCloud administrator and ask them to install the apps below.'; $message = 'requires that you have some extra apps installed on your ownCloud. Please contract your ownCloud administrator and ask them to install the apps below.';