commit
9058d398a7
78 changed files with 864 additions and 437 deletions
|
@ -1,7 +1,7 @@
|
|||
<?php if(count($_["breadcrumb"])):?>
|
||||
<div class="crumb">
|
||||
<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>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
|
|
@ -12,7 +12,7 @@ OC_FileProxy::register( new OCA\Encryption\Proxy() );
|
|||
|
||||
// User-related hooks
|
||||
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
|
||||
OCP\Util::connectHook( 'OCP\Share', 'post_shared', 'OCA\Encryption\Hooks', 'postShared' );
|
||||
|
|
|
@ -692,4 +692,4 @@ class Crypt {
|
|||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ fclose($fh);
|
|||
$filename = $_FILES['rootcert_import']['name'];
|
||||
|
||||
$view = new \OC\Files\View('/'.\OCP\User::getUser().'/files_external/uploads');
|
||||
if (!$view->file_exists('')){
|
||||
if (!$view->file_exists('')) {
|
||||
$view->mkdir('');
|
||||
}
|
||||
|
||||
|
|
|
@ -310,7 +310,7 @@ class OC_Mount_Config {
|
|||
foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
|
||||
$content .= "\t\t'".$group."' => array (\n";
|
||||
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";
|
||||
|
@ -322,7 +322,7 @@ class OC_Mount_Config {
|
|||
foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) {
|
||||
$content .= "\t\t'".$user."' => array (\n";
|
||||
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";
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
|
|||
case 'ab':
|
||||
//these are supported by the wrapper
|
||||
$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 'w+':
|
||||
case 'wb+':
|
||||
|
@ -89,7 +89,7 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
|
|||
$this->getFile($path, $tmpFile);
|
||||
}
|
||||
self::$tempFiles[$tmpFile]=$path;
|
||||
return fopen('close://'.$tmpFile,$mode);
|
||||
return fopen('close://'.$tmpFile, $mode);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
|
|||
$this->share='/'.$this->share;
|
||||
}
|
||||
if(substr($this->share, -1, 1)=='/') {
|
||||
$this->share = substr($this->share,0,-1);
|
||||
$this->share = substr($this->share, 0, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
|||
private $ready = false;
|
||||
|
||||
protected function init(){
|
||||
if($this->ready){
|
||||
if($this->ready) {
|
||||
return;
|
||||
}
|
||||
$this->ready = true;
|
||||
|
@ -71,39 +71,39 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
|
|||
return $succes;
|
||||
}
|
||||
|
||||
public function fopen($path,$mode) {
|
||||
public function fopen($path, $mode) {
|
||||
$this->init();
|
||||
return fopen($this->constructUrl($path),$mode);
|
||||
return fopen($this->constructUrl($path), $mode);
|
||||
}
|
||||
|
||||
public function free_space($path) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public function touch($path,$mtime=null) {
|
||||
public function touch($path, $mtime=null) {
|
||||
$this->init();
|
||||
if(is_null($mtime)) {
|
||||
$fh = $this->fopen($path,'a');
|
||||
fwrite($fh,'');
|
||||
$fh = $this->fopen($path, 'a');
|
||||
fwrite($fh, '');
|
||||
fclose($fh);
|
||||
} else {
|
||||
return false;//not supported
|
||||
}
|
||||
}
|
||||
|
||||
public function getFile($path,$target) {
|
||||
public function getFile($path, $target) {
|
||||
$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();
|
||||
return copy($path,$this->constructUrl($target));
|
||||
return copy($path, $this->constructUrl($target));
|
||||
}
|
||||
|
||||
public function rename($path1,$path2) {
|
||||
public function rename($path1, $path2) {
|
||||
$this->init();
|
||||
return rename($this->constructUrl($path1),$this->constructUrl($path2));
|
||||
return rename($this->constructUrl($path1), $this->constructUrl($path2));
|
||||
}
|
||||
|
||||
public function stat($path) {
|
||||
|
|
|
@ -210,7 +210,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
return false;
|
||||
} else {
|
||||
$fh=fopen($tmpFile, 'a');
|
||||
fwrite($fh,$name . "\n");
|
||||
fwrite($fh, $name . "\n");
|
||||
}
|
||||
} catch(\Exception $e) {
|
||||
file_put_contents($tmpFile, $name . "\n");
|
||||
|
@ -290,7 +290,7 @@ class SWIFT extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
private function init(){
|
||||
if($this->ready){
|
||||
if($this->ready) {
|
||||
return;
|
||||
}
|
||||
$this->ready = true;
|
||||
|
|
|
@ -49,7 +49,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
}
|
||||
|
||||
private function init(){
|
||||
if($this->ready){
|
||||
if($this->ready) {
|
||||
return;
|
||||
}
|
||||
$this->ready = true;
|
||||
|
@ -153,10 +153,10 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
|
||||
public function unlink($path) {
|
||||
$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();
|
||||
$path=$this->cleanPath($path);
|
||||
switch($mode) {
|
||||
|
@ -235,13 +235,13 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
$this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime));
|
||||
}
|
||||
|
||||
public function getFile($path,$target) {
|
||||
public function getFile($path, $target) {
|
||||
$this->init();
|
||||
$source=$this->fopen($path,'r');
|
||||
file_put_contents($target,$source);
|
||||
$source=$this->fopen($path, 'r');
|
||||
file_put_contents($target, $source);
|
||||
}
|
||||
|
||||
public function uploadFile($path,$target) {
|
||||
public function uploadFile($path, $target) {
|
||||
$this->init();
|
||||
$source=fopen($path, 'r');
|
||||
|
||||
|
@ -256,7 +256,7 @@ class DAV extends \OC\Files\Storage\Common{
|
|||
curl_close ($curl);
|
||||
}
|
||||
|
||||
public function rename($path1,$path2) {
|
||||
public function rename($path1, $path2) {
|
||||
$this->init();
|
||||
$path1=$this->cleanPath($path1);
|
||||
$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();
|
||||
$path1=$this->cleanPath($path1);
|
||||
$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);
|
||||
try {
|
||||
$response=$this->client->request($method, $path, $body);
|
||||
|
|
|
@ -38,7 +38,7 @@ if ( $error ) {
|
|||
$filelist .= $e.', ';
|
||||
}
|
||||
$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,
|
||||
"success" => $success, "error" => $error)));
|
||||
} else {
|
||||
|
|
|
@ -27,7 +27,7 @@ if ($dir) {
|
|||
$pos = strpos($dir.'/', '/', 1);
|
||||
$tmp = substr($dir, 0, $pos);
|
||||
$pos = strrpos($tmp, '.d');
|
||||
$timestamp = substr($tmp,$pos+2);
|
||||
$timestamp = substr($tmp, $pos+2);
|
||||
$result[] = array(
|
||||
'id' => $entryName,
|
||||
'timestamp' => $timestamp,
|
||||
|
|
|
@ -80,7 +80,7 @@ class Trashbin {
|
|||
}
|
||||
}
|
||||
} 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
|
||||
|
@ -188,7 +188,7 @@ class Trashbin {
|
|||
\OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
|
||||
return true;
|
||||
} 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;
|
||||
|
@ -349,7 +349,7 @@ class Trashbin {
|
|||
$versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename);
|
||||
$versions = array();
|
||||
if ($timestamp ) {
|
||||
// fetch for old versions
|
||||
// fetch for old versions
|
||||
$matches = glob( $versionsName.'.v*.d'.$timestamp );
|
||||
$offset = -strlen($timestamp)-2;
|
||||
} else {
|
||||
|
|
|
@ -94,7 +94,7 @@ class Storage {
|
|||
// expire old revisions if necessary
|
||||
$newSize = self::expire($filename, $versionsSize);
|
||||
|
||||
if ( $newSize != $versionsSize ) {
|
||||
if ( $newSize != $versionsSize ) {
|
||||
\OCP\Config::setAppValue('files_versions', 'size', $versionsSize);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,9 +27,9 @@ OCP\JSON::checkAppEnabled('user_ldap');
|
|||
OCP\JSON::callCheck();
|
||||
|
||||
$prefix = $_POST['ldap_serverconfig_chooser'];
|
||||
if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)){
|
||||
if(\OCA\user_ldap\lib\Helper::deleteServerConfiguration($prefix)) {
|
||||
OCP\JSON::success();
|
||||
} else {
|
||||
$l=OC_L10N::get('user_ldap');
|
||||
OCP\JSON::error(array('message' => $l->t('Failed to delete the server configuration')));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -192,7 +192,7 @@ class Connection {
|
|||
|
||||
private function getValue($varname) {
|
||||
static $defaults;
|
||||
if(is_null($defaults)){
|
||||
if(is_null($defaults)) {
|
||||
$defaults = $this->getDefaults();
|
||||
}
|
||||
return \OCP\Config::getAppValue($this->configID,
|
||||
|
@ -235,7 +235,7 @@ class Connection {
|
|||
$this->config['turnOffCertCheck']
|
||||
= $this->$v('ldap_turn_off_cert_check');
|
||||
$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->$v('ldap_userlist_filter');
|
||||
$this->config['ldapGroupFilter'] = $this->$v('ldap_group_filter');
|
||||
|
@ -336,7 +336,7 @@ class Connection {
|
|||
case 'ldapBaseGroups':
|
||||
case 'ldapAttributesForUserSearch':
|
||||
case 'ldapAttributesForGroupSearch':
|
||||
if(is_array($value)){
|
||||
if(is_array($value)) {
|
||||
$value = implode("\n", $value);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -20,11 +20,11 @@
|
|||
echo 'Request Method: ' . $_['sysinfo']['requestmethod'] . "\n";
|
||||
echo 'Database: ' . $_['sysinfo']['database'] . "\n";
|
||||
echo '</textarea>';
|
||||
}else{
|
||||
} else {
|
||||
echo 'Your administrator has disabled systeminformations.';
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
</details>
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
|
|
@ -82,7 +82,7 @@ class OC_API {
|
|||
// Prepare the request variables
|
||||
if($_SERVER['REQUEST_METHOD'] == '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']);
|
||||
}
|
||||
$name = $parameters['_route'];
|
||||
|
|
132
lib/app.php
132
lib/app.php
|
@ -76,14 +76,14 @@ class OC_App{
|
|||
&& empty(OC_Util::$core_scripts)
|
||||
&& empty(OC_Util::$core_styles)) {
|
||||
OC_Util::$core_scripts = OC_Util::$scripts;
|
||||
OC_Util::$scripts = array();
|
||||
OC_Util::$core_styles = OC_Util::$styles;
|
||||
OC_Util::$styles = array();
|
||||
OC_Util::$scripts = array();
|
||||
OC_Util::$core_styles = OC_Util::$styles;
|
||||
OC_Util::$styles = array();
|
||||
}
|
||||
}
|
||||
}
|
||||
// return
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* load a single app
|
||||
|
@ -157,7 +157,7 @@ class OC_App{
|
|||
*/
|
||||
public static function isShipped($appid){
|
||||
$info = self::getAppInfo($appid);
|
||||
if(isset($info['shipped']) && $info['shipped']=='true'){
|
||||
if(isset($info['shipped']) && $info['shipped']=='true') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -168,10 +168,12 @@ class OC_App{
|
|||
* get all enabled apps
|
||||
*/
|
||||
public static function getEnabledApps() {
|
||||
if(!OC_Config::getValue('installed', false))
|
||||
if(!OC_Config::getValue('installed', false)) {
|
||||
return array();
|
||||
}
|
||||
$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();
|
||||
while($row=$result->fetchRow()) {
|
||||
if(array_search($row['appid'], $apps)===false) {
|
||||
|
@ -212,7 +214,8 @@ class OC_App{
|
|||
$appdata=OC_OCSClient::getApplication($app);
|
||||
$download=OC_OCSClient::getApplicationDownload($app, 1);
|
||||
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);
|
||||
$version=OC_Util::getVersion();
|
||||
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;
|
||||
}else{
|
||||
OC_Appconfig::setValue( $app, 'enabled', 'yes' );
|
||||
|
@ -247,7 +253,7 @@ class OC_App{
|
|||
OC_Appconfig::setValue( $app, 'enabled', 'no' );
|
||||
|
||||
// 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 );
|
||||
}
|
||||
}
|
||||
|
@ -336,33 +342,70 @@ class OC_App{
|
|||
// by default, settings only contain the help menu
|
||||
if(OC_Config::getValue('knowledgebaseenabled', true)==true) {
|
||||
$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 (OC_User::isLoggedIn()) {
|
||||
// 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(!empty(self::$settingsForms))
|
||||
if(!empty(self::$settingsForms)) {
|
||||
// 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
|
||||
if(OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
|
||||
// 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(OC_User::isAdminUser(OC_User::getUser())) {
|
||||
// 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,8 +438,9 @@ class OC_App{
|
|||
}
|
||||
|
||||
foreach(OC::$APPSROOTS as $dir) {
|
||||
if(isset($dir['writable']) && $dir['writable']===true)
|
||||
if(isset($dir['writable']) && $dir['writable']===true) {
|
||||
return $dir['path'];
|
||||
}
|
||||
}
|
||||
|
||||
OC_Log::write('core', 'No application directories are marked as writable.', OC_Log::ERROR);
|
||||
|
@ -557,16 +601,16 @@ class OC_App{
|
|||
$forms=array();
|
||||
switch($type) {
|
||||
case 'settings':
|
||||
$source=self::$settingsForms;
|
||||
break;
|
||||
$source=self::$settingsForms;
|
||||
break;
|
||||
case 'admin':
|
||||
$source=self::$adminForms;
|
||||
break;
|
||||
$source=self::$adminForms;
|
||||
break;
|
||||
case 'personal':
|
||||
$source=self::$personalForms;
|
||||
break;
|
||||
$source=self::$personalForms;
|
||||
break;
|
||||
default:
|
||||
return array();
|
||||
return array();
|
||||
}
|
||||
foreach($source as $form) {
|
||||
$forms[]=include $form;
|
||||
|
@ -641,7 +685,8 @@ class OC_App{
|
|||
public static function listAllApps() {
|
||||
$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
|
||||
$appList = array();
|
||||
|
@ -694,19 +739,20 @@ class OC_App{
|
|||
// OR $app['ocs_id'] == $remote['ocs_id']
|
||||
) {
|
||||
unset( $remoteApps[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$combinedApps = array_merge( $appList, $remoteApps );
|
||||
} else {
|
||||
$combinedApps = $appList;
|
||||
}
|
||||
$combinedApps = array_merge( $appList, $remoteApps );
|
||||
} else {
|
||||
$combinedApps = $appList;
|
||||
}
|
||||
return $combinedApps;
|
||||
}
|
||||
return $combinedApps;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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' ) {
|
||||
$categoryNames = OC_OCSClient::getCategories();
|
||||
|
@ -726,7 +772,7 @@ class OC_App{
|
|||
$app1[$i]['ocs_id'] = $app['id'];
|
||||
$app1[$i]['internal'] = $app1[$i]['active'] = 0;
|
||||
$app1[$i]['update'] = false;
|
||||
if($app['label']=='recommended'){
|
||||
if($app['label']=='recommended') {
|
||||
$app1[$i]['internallabel'] = 'Recommended';
|
||||
$app1[$i]['internalclass'] = 'recommendedapp';
|
||||
}else{
|
||||
|
@ -774,7 +820,9 @@ class OC_App{
|
|||
$installedVersion = $versions[$app];
|
||||
if (version_compare($currentVersion, $installedVersion, '>')) {
|
||||
$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 {
|
||||
OC_App::updateApp($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
|
||||
$info = OC_App::getAppInfo($app);
|
||||
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_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
|
||||
}
|
||||
$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();
|
||||
while($row = $result->fetchRow()) {
|
||||
$versions[$row['appid']]=$row['configvalue'];
|
||||
|
|
|
@ -91,7 +91,8 @@ class OC_Appconfig{
|
|||
*/
|
||||
public static function getValue( $app, $key, $default = null ) {
|
||||
// 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 ));
|
||||
$row = $result->fetchRow();
|
||||
if($row) {
|
||||
|
@ -124,11 +125,13 @@ class OC_Appconfig{
|
|||
public static function setValue( $app, $key, $value ) {
|
||||
// Does the key exist? yes: update. No: insert
|
||||
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 ));
|
||||
}
|
||||
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 ));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,7 +82,8 @@ class OC_BackgroundJob_QueuedTask{
|
|||
* @return id of task
|
||||
*/
|
||||
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 ));
|
||||
|
||||
return OC_DB::insertid();
|
||||
|
|
41
lib/base.php
41
lib/base.php
|
@ -162,7 +162,9 @@ class OC {
|
|||
OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/');
|
||||
OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/');
|
||||
} 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;
|
||||
}
|
||||
// search the apps folder
|
||||
|
@ -178,11 +180,16 @@ class OC {
|
|||
} elseif (file_exists(OC::$SERVERROOT . '/apps')) {
|
||||
OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true);
|
||||
} 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)) {
|
||||
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;
|
||||
}
|
||||
$paths = array();
|
||||
|
@ -202,9 +209,14 @@ class OC {
|
|||
}
|
||||
|
||||
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->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();
|
||||
exit();
|
||||
}
|
||||
|
@ -262,7 +274,9 @@ class OC {
|
|||
if (version_compare($currentVersion, $installedVersion, '>')) {
|
||||
if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
|
||||
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');
|
||||
$tmpl = new OC_Template('', 'update', 'guest');
|
||||
$tmpl->assign('version', OC_Util::getVersionString());
|
||||
|
@ -393,14 +407,16 @@ class OC {
|
|||
}
|
||||
|
||||
//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);
|
||||
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
|
||||
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
|
||||
}
|
||||
|
||||
//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);
|
||||
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
|
||||
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
|
||||
|
@ -447,7 +463,8 @@ class OC {
|
|||
OC_User::useBackend(new OC_User_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();
|
||||
}
|
||||
|
||||
|
@ -504,7 +521,9 @@ class OC {
|
|||
|
||||
// write error into log if locale can't be set
|
||||
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_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
|
||||
|
@ -556,7 +575,7 @@ class OC {
|
|||
}
|
||||
|
||||
$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::checkUpgrade();
|
||||
}
|
||||
|
|
|
@ -166,7 +166,8 @@ class OC_Config{
|
|||
$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")));
|
||||
'hint'=>"You can usually fix this by giving the webserver user write access'
|
||||
.' to the config directory in owncloud")));
|
||||
$tmpl->printPage();
|
||||
exit;
|
||||
}
|
||||
|
|
|
@ -160,7 +160,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
|
|||
$chunks = array_chunk($paths, 200, false);
|
||||
foreach ($chunks as $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
|
||||
$result = $query->execute( $pack );
|
||||
while($row = $result->fetchRow()) {
|
||||
|
|
|
@ -84,7 +84,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
|
|||
*/
|
||||
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
|
||||
*
|
||||
* An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change.
|
||||
* The ETag is an arbritrary string, but MUST be surrounded by double-quotes.
|
||||
* An ETag is a unique identifier representing the current version of the
|
||||
* 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
|
||||
*
|
||||
|
|
|
@ -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
|
||||
// but otherwise reading locks from SQLite Databases will return
|
||||
// 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);
|
||||
|
||||
// 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) {
|
||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*locks` 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));
|
||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*locks`'
|
||||
.' 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 {
|
||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*locks` (`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));
|
||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*locks`'
|
||||
.' (`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;
|
||||
|
|
|
@ -84,12 +84,13 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
$newPath = $parentPath . '/' . $newName;
|
||||
$oldPath = $this->path;
|
||||
|
||||
\OC\Files\Filesystem::rename($this->path,$newPath);
|
||||
\OC\Files\Filesystem::rename($this->path, $newPath);
|
||||
|
||||
$this->path = $newPath;
|
||||
|
||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?' );
|
||||
$query->execute( array( $newPath,OC_User::getUser(), $oldPath ));
|
||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ?'
|
||||
.' 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 (is_null($propertyValue)) {
|
||||
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 ));
|
||||
}
|
||||
}
|
||||
|
@ -160,10 +162,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
|||
$this->touch($propertyValue);
|
||||
} else {
|
||||
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 ));
|
||||
} 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 ));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ class OC_Connector_Sabre_Request extends Sabre_HTTP_Request {
|
|||
* @return string
|
||||
*/
|
||||
public function getRawServerValue($field) {
|
||||
if($field == 'REQUEST_URI'){
|
||||
if($field == 'REQUEST_URI') {
|
||||
return $this->getUri();
|
||||
}
|
||||
else{
|
||||
|
|
23
lib/db.php
23
lib/db.php
|
@ -228,11 +228,12 @@ class OC_DB {
|
|||
|
||||
// Prepare options array
|
||||
$options = array(
|
||||
'portability' => MDB2_PORTABILITY_ALL - MDB2_PORTABILITY_FIX_CASE,
|
||||
'log_line_break' => '<br>',
|
||||
'idxname_format' => '%s',
|
||||
'debug' => true,
|
||||
'quote_identifier' => true );
|
||||
'portability' => MDB2_PORTABILITY_ALL - MDB2_PORTABILITY_FIX_CASE,
|
||||
'log_line_break' => '<br>',
|
||||
'idxname_format' => '%s',
|
||||
'debug' => true,
|
||||
'quote_identifier' => true
|
||||
);
|
||||
|
||||
// Add the dsn according to the database type
|
||||
switch($type) {
|
||||
|
@ -474,7 +475,8 @@ class OC_DB {
|
|||
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
|
||||
*/
|
||||
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 );
|
||||
|
@ -499,7 +501,8 @@ class OC_DB {
|
|||
|
||||
// Die in case something went wrong
|
||||
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;
|
||||
|
@ -541,7 +544,8 @@ class OC_DB {
|
|||
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
|
||||
*/
|
||||
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 );
|
||||
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
|
||||
|
@ -679,7 +683,8 @@ class OC_DB {
|
|||
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'strftime(\'%s\',\'now\')', $query );
|
||||
}elseif( $type == 'pgsql' ) {
|
||||
$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' ) {
|
||||
$query = str_replace( '`', '"', $query );
|
||||
$query = str_ireplace( 'NOW()', 'CURRENT_TIMESTAMP', $query );
|
||||
|
|
|
@ -62,7 +62,8 @@ class OC_EventSource{
|
|||
$type=null;
|
||||
}
|
||||
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;
|
||||
}else{
|
||||
if($type) {
|
||||
|
|
|
@ -97,7 +97,8 @@ class OC_FileChunking {
|
|||
$absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path));
|
||||
$data = '';
|
||||
// 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);
|
||||
$exists = \OC\Files\Filesystem::file_exists($path);
|
||||
$run = true;
|
||||
|
|
|
@ -28,7 +28,7 @@ class OC_FileProxy_FileOperations extends OC_FileProxy{
|
|||
static $rootView;
|
||||
|
||||
public function premkdir($path) {
|
||||
if(!self::$rootView){
|
||||
if(!self::$rootView) {
|
||||
self::$rootView = new \OC\Files\View('');
|
||||
}
|
||||
return !self::$rootView->file_exists($path);
|
||||
|
|
|
@ -95,7 +95,7 @@ class OC_FileProxy_Quota extends OC_FileProxy{
|
|||
}
|
||||
|
||||
public function preCopy($path1, $path2) {
|
||||
if(!self::$rootView){
|
||||
if(!self::$rootView) {
|
||||
self::$rootView = new \OC\Files\View('');
|
||||
}
|
||||
return (self::$rootView->filesize($path1)<$this->getFreeSpace($path2) or $this->getFreeSpace($path2)==-1);
|
||||
|
|
|
@ -200,7 +200,8 @@ class OC_Files {
|
|||
$errors = array(
|
||||
array(
|
||||
'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);
|
||||
|
@ -225,7 +226,9 @@ class OC_Files {
|
|||
$errors = array(
|
||||
array(
|
||||
'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);
|
||||
|
@ -287,7 +290,9 @@ class OC_Files {
|
|||
file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess);
|
||||
return OC_Helper::computerFileSize($size);
|
||||
} 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;
|
||||
}
|
||||
|
|
12
lib/files/cache/cache.php
vendored
12
lib/files/cache/cache.php
vendored
|
@ -198,7 +198,8 @@ class Cache {
|
|||
$params[] = $this->numericId;
|
||||
$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);
|
||||
|
||||
return (int)\OC_DB::insertid('*PREFIX*filecache');
|
||||
|
@ -215,7 +216,8 @@ class Cache {
|
|||
list($queryParts, $params) = $this->buildParts($data);
|
||||
$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);
|
||||
}
|
||||
|
||||
|
@ -332,7 +334,8 @@ class Cache {
|
|||
$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));
|
||||
}
|
||||
|
||||
|
@ -492,7 +495,8 @@ class Cache {
|
|||
* @return string|bool the path of the folder or false when no folder matched
|
||||
*/
|
||||
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));
|
||||
if ($row = $query->fetchRow()) {
|
||||
return $row['path'];
|
||||
|
|
11
lib/files/cache/permissions.php
vendored
11
lib/files/cache/permissions.php
vendored
|
@ -18,7 +18,7 @@ class Permissions {
|
|||
* @param \OC\Files\Storage\Storage|string $storage
|
||||
*/
|
||||
public function __construct($storage){
|
||||
if($storage instanceof \OC\Files\Storage\Storage){
|
||||
if($storage instanceof \OC\Files\Storage\Storage) {
|
||||
$this->storageId = $storage->getId();
|
||||
}else{
|
||||
$this->storageId = $storage;
|
||||
|
@ -51,9 +51,11 @@ class Permissions {
|
|||
*/
|
||||
public function set($fileId, $user, $permissions) {
|
||||
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 {
|
||||
$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));
|
||||
}
|
||||
|
@ -73,7 +75,8 @@ class Permissions {
|
|||
$params[] = $user;
|
||||
$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);
|
||||
$filePermissions = array();
|
||||
while ($row = $result->fetchRow()) {
|
||||
|
|
3
lib/files/cache/upgrade.php
vendored
3
lib/files/cache/upgrade.php
vendored
|
@ -69,7 +69,8 @@ class Upgrade {
|
|||
( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` )
|
||||
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']));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -135,7 +135,9 @@ class Filesystem {
|
|||
|
||||
/**
|
||||
* 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
|
||||
* @return string
|
||||
|
@ -318,7 +320,8 @@ class Filesystem {
|
|||
|
||||
/**
|
||||
* 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
|
||||
* @return string
|
||||
|
|
|
@ -107,7 +107,7 @@ class Mapper
|
|||
|
||||
private function stripLast($path) {
|
||||
if (substr($path, -1) == '/') {
|
||||
$path = substr_replace($path ,'',-1);
|
||||
$path = substr_replace($path, '', -1);
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
|
|
@ -51,19 +51,19 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
}
|
||||
public function getPermissions($path){
|
||||
$permissions = 0;
|
||||
if($this->isCreatable($path)){
|
||||
if($this->isCreatable($path)) {
|
||||
$permissions |= \OCP\PERMISSION_CREATE;
|
||||
}
|
||||
if($this->isReadable($path)){
|
||||
if($this->isReadable($path)) {
|
||||
$permissions |= \OCP\PERMISSION_READ;
|
||||
}
|
||||
if($this->isUpdatable($path)){
|
||||
if($this->isUpdatable($path)) {
|
||||
$permissions |= \OCP\PERMISSION_UPDATE;
|
||||
}
|
||||
if($this->isDeletable($path)){
|
||||
if($this->isDeletable($path)) {
|
||||
$permissions |= \OCP\PERMISSION_DELETE;
|
||||
}
|
||||
if($this->isSharable($path)){
|
||||
if($this->isSharable($path)) {
|
||||
$permissions |= \OCP\PERMISSION_SHARE;
|
||||
}
|
||||
return $permissions;
|
||||
|
@ -83,21 +83,21 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
}
|
||||
return fread($handle, $size);
|
||||
}
|
||||
public function file_put_contents($path,$data) {
|
||||
public function file_put_contents($path, $data) {
|
||||
$handle = $this->fopen($path, "w");
|
||||
return fwrite($handle, $data);
|
||||
}
|
||||
public function rename($path1,$path2) {
|
||||
if($this->copy($path1,$path2)) {
|
||||
public function rename($path1, $path2) {
|
||||
if($this->copy($path1, $path2)) {
|
||||
return $this->unlink($path1);
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public function copy($path1,$path2) {
|
||||
$source=$this->fopen($path1,'r');
|
||||
$target=$this->fopen($path2,'w');
|
||||
$count=\OC_Helper::streamCopy($source,$target);
|
||||
public function copy($path1, $path2) {
|
||||
$source=$this->fopen($path1, 'r');
|
||||
$target=$this->fopen($path2, 'w');
|
||||
$count=\OC_Helper::streamCopy($source, $target);
|
||||
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
|
||||
*/
|
||||
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;
|
||||
} elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) {
|
||||
return false;
|
||||
|
@ -132,7 +133,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
//$this->closedir( $directoryHandle ); // TODO: implement closedir in OC_FSV
|
||||
if ( $empty == false ) {
|
||||
if ( !$this->rmdir( $directory ) ) {
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -146,25 +147,25 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
if($this->is_dir($path)) {
|
||||
return 'httpd/unix-directory';
|
||||
}
|
||||
$source=$this->fopen($path,'r');
|
||||
$source=$this->fopen($path, 'r');
|
||||
if(!$source) {
|
||||
return false;
|
||||
}
|
||||
$head=fread($source,8192);//8kb should suffice to determine a mimetype
|
||||
if($pos=strrpos($path,'.')) {
|
||||
$extension=substr($path,$pos);
|
||||
$head=fread($source, 8192);//8kb should suffice to determine a mimetype
|
||||
if($pos=strrpos($path, '.')) {
|
||||
$extension=substr($path, $pos);
|
||||
}else{
|
||||
$extension='';
|
||||
}
|
||||
$tmpFile=\OC_Helper::tmpFile($extension);
|
||||
file_put_contents($tmpFile,$head);
|
||||
file_put_contents($tmpFile, $head);
|
||||
$mime=\OC_Helper::getMimeType($tmpFile);
|
||||
unlink($tmpFile);
|
||||
return $mime;
|
||||
}
|
||||
public function hash($type,$path,$raw = false) {
|
||||
public function hash($type, $path, $raw = false) {
|
||||
$tmpFile=$this->getLocalFile($path);
|
||||
$hash=hash($type,$tmpFile,$raw);
|
||||
$hash=hash($type, $tmpFile, $raw);
|
||||
unlink($tmpFile);
|
||||
return $hash;
|
||||
}
|
||||
|
@ -175,42 +176,42 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
return $this->toTmpFile($path);
|
||||
}
|
||||
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) {
|
||||
return false;
|
||||
}
|
||||
if($pos=strrpos($path,'.')) {
|
||||
$extension=substr($path,$pos);
|
||||
if($pos=strrpos($path, '.')) {
|
||||
$extension=substr($path, $pos);
|
||||
}else{
|
||||
$extension='';
|
||||
}
|
||||
$tmpFile=\OC_Helper::tmpFile($extension);
|
||||
$target=fopen($tmpFile,'w');
|
||||
\OC_Helper::streamCopy($source,$target);
|
||||
$target=fopen($tmpFile, 'w');
|
||||
\OC_Helper::streamCopy($source, $target);
|
||||
return $tmpFile;
|
||||
}
|
||||
public function getLocalFolder($path) {
|
||||
$baseDir=\OC_Helper::tmpFolder();
|
||||
$this->addLocalFolder($path,$baseDir);
|
||||
$this->addLocalFolder($path, $baseDir);
|
||||
return $baseDir;
|
||||
}
|
||||
private function addLocalFolder($path,$target) {
|
||||
private function addLocalFolder($path, $target) {
|
||||
if($dh=$this->opendir($path)) {
|
||||
while($file=readdir($dh)) {
|
||||
if($file!=='.' and $file!=='..') {
|
||||
if($this->is_dir($path.'/'.$file)) {
|
||||
mkdir($target.'/'.$file);
|
||||
$this->addLocalFolder($path.'/'.$file,$target.'/'.$file);
|
||||
$this->addLocalFolder($path.'/'.$file, $target.'/'.$file);
|
||||
}else{
|
||||
$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();
|
||||
$dh=$this->opendir($dir);
|
||||
if($dh) {
|
||||
|
@ -220,7 +221,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
|||
$files[]=$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
|
||||
* @return bool
|
||||
*/
|
||||
public function hasUpdated($path,$time) {
|
||||
public function hasUpdated($path, $time) {
|
||||
return $this->filemtime($path)>$time;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ class Local extends \OC\Files\Storage\Common{
|
|||
return opendir($this->datadir.$path);
|
||||
}
|
||||
public function is_dir($path) {
|
||||
if(substr($path,-1)=='/') {
|
||||
if(substr($path, -1)=='/') {
|
||||
$path=substr($path, 0, -1);
|
||||
}
|
||||
return is_dir($this->datadir.$path);
|
||||
|
@ -117,11 +117,11 @@ class Local extends \OC\Files\Storage\Common{
|
|||
}
|
||||
public function rename($path1, $path2) {
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -205,7 +205,9 @@ class Local extends \OC\Files\Storage\Common{
|
|||
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
|
||||
}
|
||||
} 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;
|
||||
|
|
|
@ -61,7 +61,7 @@ class MappedLocal extends \OC\Files\Storage\Common{
|
|||
return opendir('fakedir://local-win32'.$path);
|
||||
}
|
||||
public function is_dir($path) {
|
||||
if(substr($path,-1)=='/') {
|
||||
if(substr($path, -1)=='/') {
|
||||
$path=substr($path, 0, -1);
|
||||
}
|
||||
return is_dir($this->buildPath($path));
|
||||
|
@ -138,11 +138,11 @@ class MappedLocal extends \OC\Files\Storage\Common{
|
|||
}
|
||||
public function rename($path1, $path2) {
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -248,7 +248,9 @@ class MappedLocal extends \OC\Files\Storage\Common{
|
|||
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
|
||||
}
|
||||
} 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;
|
||||
|
|
|
@ -92,7 +92,9 @@ class View {
|
|||
|
||||
/**
|
||||
* 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
|
||||
* @return string
|
||||
|
@ -113,7 +115,8 @@ class View {
|
|||
|
||||
/**
|
||||
* 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
|
||||
* @return string
|
||||
|
@ -252,7 +255,8 @@ class View {
|
|||
public function file_put_contents($path, $data) {
|
||||
if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier
|
||||
$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);
|
||||
$exists = $this->file_exists($path);
|
||||
$run = true;
|
||||
|
@ -324,7 +328,8 @@ class View {
|
|||
$postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
|
||||
$absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
|
||||
$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);
|
||||
$path2 = $this->getRelativePath($absolutePath2);
|
||||
|
||||
|
@ -776,7 +781,8 @@ class View {
|
|||
$rootEntry = $subCache->get('');
|
||||
if ($rootEntry) {
|
||||
$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);
|
||||
foreach ($files as &$entry) {
|
||||
if ($entry['name'] === $entryName) {
|
||||
|
|
|
@ -34,7 +34,9 @@
|
|||
class OC_Filesystem {
|
||||
/**
|
||||
* 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
|
||||
* @param string $path
|
||||
|
@ -115,7 +117,8 @@ class OC_Filesystem {
|
|||
|
||||
/**
|
||||
* 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
|
||||
* @param string $path
|
||||
|
|
|
@ -311,7 +311,12 @@ class OC_Group {
|
|||
$displayNames = array();
|
||||
foreach ($gids as $gid) {
|
||||
// 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;
|
||||
}
|
||||
|
|
|
@ -200,7 +200,9 @@ class OC_Group_Database extends OC_Group_Backend {
|
|||
* @return array with user ids
|
||||
*/
|
||||
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.'%'));
|
||||
$users = array();
|
||||
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) {
|
||||
$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.'%'));
|
||||
$users = array();
|
||||
while ($row = $result->fetchRow()) {
|
||||
|
|
|
@ -132,7 +132,8 @@ class OC_Helper {
|
|||
* Returns a absolute url to the given service.
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
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';
|
||||
}
|
||||
|
||||
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));
|
||||
if($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 $v Value of current radio-button element
|
||||
* @param string $d Value of default radio-button element
|
||||
|
|
|
@ -33,8 +33,9 @@ class OC_Hook{
|
|||
|
||||
// Connect the hook handler to the requested emitter
|
||||
self::$registered[$signalclass][$signalname][] = array(
|
||||
"class" => $slotclass,
|
||||
"name" => $slotname );
|
||||
"class" => $slotclass,
|
||||
"name" => $slotname
|
||||
);
|
||||
|
||||
// No chance for failure ;-)
|
||||
return true;
|
||||
|
@ -70,7 +71,9 @@ class OC_Hook{
|
|||
try {
|
||||
call_user_func( array( $i["class"], $i["name"] ), $params );
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -169,7 +169,9 @@ class OC_Image {
|
|||
if (!file_exists(dirname($filepath)))
|
||||
mkdir(dirname($filepath), 0777, true);
|
||||
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;
|
||||
} elseif(is_writable(dirname($filepath)) && file_exists($filepath) && !is_writable($filepath)) {
|
||||
OC_Log::write('core', __METHOD__.'(): File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
|
||||
|
@ -394,35 +396,45 @@ class OC_Image {
|
|||
if (imagetypes() & IMG_GIF) {
|
||||
$this->resource = imagecreatefromgif($imagepath);
|
||||
} 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;
|
||||
case IMAGETYPE_JPEG:
|
||||
if (imagetypes() & IMG_JPG) {
|
||||
$this->resource = imagecreatefromjpeg($imagepath);
|
||||
} 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;
|
||||
case IMAGETYPE_PNG:
|
||||
if (imagetypes() & IMG_PNG) {
|
||||
$this->resource = imagecreatefrompng($imagepath);
|
||||
} 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;
|
||||
case IMAGETYPE_XBM:
|
||||
if (imagetypes() & IMG_XPM) {
|
||||
$this->resource = imagecreatefromxbm($imagepath);
|
||||
} 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;
|
||||
case IMAGETYPE_WBMP:
|
||||
if (imagetypes() & IMG_WBMP) {
|
||||
$this->resource = imagecreatefromwbmp($imagepath);
|
||||
} 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;
|
||||
case IMAGETYPE_BMP:
|
||||
|
@ -633,7 +645,9 @@ class OC_Image {
|
|||
$color[1] = $palette[ $color[1] + 1 ];
|
||||
break;
|
||||
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;
|
||||
}
|
||||
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);
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -136,21 +136,29 @@ class OC_Installer{
|
|||
// check if the app is compatible with this version of ownCloud
|
||||
$version=OC_Util::getVersion();
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 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')) {
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 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'])) {
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
@ -251,7 +259,8 @@ class OC_Installer{
|
|||
* -# including appinfo/upgrade.php
|
||||
* -# 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 ) {
|
||||
$ocsid=OC_Appconfig::getValue( $app, 'ocsid');
|
||||
|
@ -270,12 +279,12 @@ class OC_Installer{
|
|||
public static function isUpdateAvailable( $app ) {
|
||||
$ocsid=OC_Appconfig::getValue( $app, 'ocsid', '');
|
||||
|
||||
if($ocsid<>''){
|
||||
if($ocsid<>'') {
|
||||
|
||||
$ocsdata=OC_OCSClient::getApplication($ocsid);
|
||||
$ocsversion= (string) $ocsdata['version'];
|
||||
$currentversion=OC_App::getAppVersion($app);
|
||||
if($ocsversion<>$currentversion){
|
||||
if($ocsversion<>$currentversion) {
|
||||
return($ocsversion);
|
||||
|
||||
}else{
|
||||
|
@ -326,22 +335,22 @@ class OC_Installer{
|
|||
*/
|
||||
public static function removeApp( $name, $options = array()) {
|
||||
|
||||
if(isset($options['keeppreferences']) and $options['keeppreferences']==false ){
|
||||
if(isset($options['keeppreferences']) and $options['keeppreferences']==false ) {
|
||||
// todo
|
||||
// remove preferences
|
||||
}
|
||||
|
||||
if(isset($options['keepappconfig']) and $options['keepappconfig']==false ){
|
||||
if(isset($options['keepappconfig']) and $options['keepappconfig']==false ) {
|
||||
// todo
|
||||
// remove app config
|
||||
}
|
||||
|
||||
if(isset($options['keeptables']) and $options['keeptables']==false ){
|
||||
if(isset($options['keeptables']) and $options['keeptables']==false ) {
|
||||
// todo
|
||||
// remove app database tables
|
||||
}
|
||||
|
||||
if(isset($options['keepfiles']) and $options['keepfiles']==false ){
|
||||
if(isset($options['keepfiles']) and $options['keepfiles']==false ) {
|
||||
// todo
|
||||
// remove user files
|
||||
}
|
||||
|
@ -437,7 +446,9 @@ class OC_Installer{
|
|||
// check if grep is installed
|
||||
$grep = exec('which 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;
|
||||
}
|
||||
|
||||
|
@ -447,7 +458,9 @@ class OC_Installer{
|
|||
$result = exec($cmd);
|
||||
// bad pattern found
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,7 +53,9 @@ class OC_Log {
|
|||
|
||||
// Uncaught exception handler
|
||||
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
|
||||
|
|
|
@ -81,7 +81,8 @@ class OC_Log_Owncloud {
|
|||
$ch = fgetc($handle);
|
||||
if ($ch == "\n" || $pos == 0) {
|
||||
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) {
|
||||
$line = $ch.$line;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,8 @@ class OC_Mail {
|
|||
* @param string $bcc
|
||||
* @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' );
|
||||
$SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
|
||||
|
@ -97,7 +98,9 @@ class OC_Mail {
|
|||
|
||||
$mailo->Send();
|
||||
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) {
|
||||
OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR);
|
||||
throw($exception);
|
||||
|
|
|
@ -167,7 +167,19 @@ class OC_Migrate{
|
|||
self::$content = new OC_Migration_Content( self::$zip );
|
||||
// Creates a zip with the owncloud system files
|
||||
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, "/");
|
||||
}
|
||||
break;
|
||||
|
@ -181,7 +193,7 @@ class OC_Migrate{
|
|||
return json_encode( array( 'success' => false ) );
|
||||
}
|
||||
return json_encode( array( 'success' => true, 'data' => self::$zippath ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief imports a user, or owncloud instance
|
||||
|
@ -245,7 +257,9 @@ class OC_Migrate{
|
|||
}
|
||||
// Import user app data
|
||||
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 ) );
|
||||
}
|
||||
}
|
||||
|
@ -553,7 +567,9 @@ class OC_Migrate{
|
|||
return false;
|
||||
}
|
||||
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;
|
||||
} else {
|
||||
return true;
|
||||
|
@ -610,7 +626,9 @@ class OC_Migrate{
|
|||
if( isset( $info->apps->$id ) ) {
|
||||
// Is the app installed
|
||||
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';
|
||||
} else {
|
||||
// Did it succeed on export?
|
||||
|
@ -624,7 +642,9 @@ class OC_Migrate{
|
|||
// Then do the import
|
||||
if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) {
|
||||
// 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 {
|
||||
// Add to failed list
|
||||
|
|
|
@ -185,13 +185,13 @@ class OC_Migration_Content{
|
|||
* @return bool
|
||||
*/
|
||||
public function addDir( $dir, $recursive=true, $internaldir='' ) {
|
||||
$dirname = basename($dir);
|
||||
$this->zip->addEmptyDir($internaldir . $dirname);
|
||||
$internaldir.=$dirname.='/';
|
||||
$dirname = basename($dir);
|
||||
$this->zip->addEmptyDir($internaldir . $dirname);
|
||||
$internaldir.=$dirname.='/';
|
||||
if( !file_exists( $dir ) ) {
|
||||
return false;
|
||||
}
|
||||
if ($dirhandle = opendir($dir)) {
|
||||
if ($dirhandle = opendir($dir)) {
|
||||
while (false !== ( $file = readdir($dirhandle))) {
|
||||
|
||||
if (( $file != '.' ) && ( $file != '..' )) {
|
||||
|
@ -204,11 +204,11 @@ class OC_Migration_Content{
|
|||
}
|
||||
}
|
||||
closedir($dirhandle);
|
||||
} else {
|
||||
} else {
|
||||
OC_Log::write('admin_export', "Was not able to open directory: " . $dir, OC_Log::ERROR);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -236,7 +236,9 @@ class OC_Migration_Content{
|
|||
*/
|
||||
public function finish() {
|
||||
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;
|
||||
}
|
||||
$this->cleanup();
|
||||
|
|
10
lib/ocs.php
10
lib/ocs.php
|
@ -87,9 +87,10 @@ class OC_OCS {
|
|||
}
|
||||
|
||||
$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();
|
||||
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
|
||||
* @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') {
|
||||
$json=array();
|
||||
$json['status']=$status;
|
||||
|
@ -173,7 +175,7 @@ class OC_OCS {
|
|||
}
|
||||
}
|
||||
xmlwriter_end_element($writer);
|
||||
}
|
||||
}
|
||||
xmlwriter_end_element($writer);
|
||||
|
||||
}elseif($dimension=='3') {
|
||||
|
|
|
@ -31,7 +31,7 @@ class OC_OCS_Cloud {
|
|||
foreach($apps as $app) {
|
||||
$info = OC_App::getAppInfo($app);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class OC_OCS_Privatedata {
|
|||
$user = OC_User::getUser();
|
||||
$app = addslashes(strip_tags($parameters['app']));
|
||||
$key = addslashes(strip_tags($parameters['key']));
|
||||
$result = OC_OCS::getData($user,$app,$key);
|
||||
$result = OC_OCS::getData($user, $app, $key);
|
||||
$xml = array();
|
||||
foreach($result as $i=>$log) {
|
||||
$xml[$i]['key']=$log['key'];
|
||||
|
@ -46,7 +46,7 @@ class OC_OCS_Privatedata {
|
|||
$app = addslashes(strip_tags($parameters['app']));
|
||||
$key = addslashes(strip_tags($parameters['key']));
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,8 @@ class OC_OCSClient{
|
|||
* @brief Get the url of the OCS 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() {
|
||||
$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.
|
||||
* @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() {
|
||||
$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());
|
||||
$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();
|
||||
$xml=OC_OCSClient::getOCSresponse($url);
|
||||
|
||||
|
|
|
@ -114,7 +114,8 @@ class OC_Preferences{
|
|||
*/
|
||||
public static function getValue( $user, $app, $key, $default = null ) {
|
||||
// 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 ));
|
||||
|
||||
$row = $result->fetchRow();
|
||||
|
@ -138,16 +139,19 @@ class OC_Preferences{
|
|||
*/
|
||||
public static function setValue( $user, $app, $key, $value ) {
|
||||
// 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();
|
||||
$exists=(count($values)>0);
|
||||
|
||||
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 ));
|
||||
}
|
||||
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 ));
|
||||
}
|
||||
return true;
|
||||
|
@ -164,7 +168,8 @@ class OC_Preferences{
|
|||
*/
|
||||
public static function deleteKey( $user, $app, $key ) {
|
||||
// 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 ));
|
||||
|
||||
return true;
|
||||
|
|
|
@ -37,7 +37,8 @@ class API {
|
|||
* @param array $defaults
|
||||
* @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);
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,8 @@
|
|||
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 {
|
||||
/**
|
||||
|
|
|
@ -31,7 +31,8 @@
|
|||
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 {
|
||||
/**
|
||||
|
|
|
@ -43,22 +43,22 @@ namespace OCP {
|
|||
* @return array of contacts which are arrays of key-value-pairs
|
||||
*/
|
||||
public function search($pattern, $searchProperties, $options);
|
||||
// // dummy results
|
||||
// return array(
|
||||
// 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')),
|
||||
// );
|
||||
// // dummy results
|
||||
// return array(
|
||||
// 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')),
|
||||
// );
|
||||
|
||||
/**
|
||||
* @param array $properties this array if key-value-pairs defines a contact
|
||||
* @return array representing the contact just created or updated
|
||||
*/
|
||||
public function createOrUpdate($properties);
|
||||
// // dummy
|
||||
// return array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c',
|
||||
// 'PHOTO' => 'VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif',
|
||||
// 'ADR' => ';;123 Main Street;Any Town;CA;91921-1234'
|
||||
// );
|
||||
// // dummy
|
||||
// return array('id' => 0, 'FN' => 'Thomas Müller', 'EMAIL' => 'a@b.c',
|
||||
// 'PHOTO' => 'VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif',
|
||||
// 'ADR' => ';;123 Main Street;Any Town;CA;91921-1234'
|
||||
// );
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
|
|
|
@ -37,10 +37,17 @@ class Share {
|
|||
const SHARE_TYPE_REMOTE = 6;
|
||||
|
||||
/** 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
|
||||
* 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
|
||||
* Construct permissions for share() and setPermissions with Or (|) e.g.
|
||||
* Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
@ -66,14 +73,21 @@ class Share {
|
|||
public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
|
||||
if (self::isEnabled()) {
|
||||
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) {
|
||||
\OC_Util::addScript('core', 'share');
|
||||
\OC_Util::addStyle('core', 'share');
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -99,8 +113,10 @@ class Share {
|
|||
* @param int Number of items to return (optional) Returns all by default
|
||||
* @return Return depends on format
|
||||
*/
|
||||
public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
|
||||
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections);
|
||||
public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE,
|
||||
$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
|
||||
* @return Return depends on format
|
||||
*/
|
||||
public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
|
||||
return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections);
|
||||
public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE,
|
||||
$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
|
||||
* @return Return depends on format
|
||||
*/
|
||||
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
|
||||
return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true);
|
||||
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE,
|
||||
$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
|
||||
*/
|
||||
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
|
||||
*/
|
||||
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));
|
||||
if (\OC_DB::isError($result)) {
|
||||
\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
|
||||
* @return Return depends on format
|
||||
*/
|
||||
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
|
||||
return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections);
|
||||
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null,
|
||||
$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
|
||||
* @return Return depends on format
|
||||
*/
|
||||
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
|
||||
return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections);
|
||||
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
|
||||
$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') {
|
||||
$inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
|
||||
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);
|
||||
throw new \Exception($message);
|
||||
}
|
||||
}
|
||||
// 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)) {
|
||||
// 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 = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups,
|
||||
$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) {
|
||||
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
|
||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||
|
@ -220,14 +249,18 @@ class Share {
|
|||
throw new \Exception($message);
|
||||
}
|
||||
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);
|
||||
throw new \Exception($message);
|
||||
}
|
||||
// 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
|
||||
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $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 group share, this use case is for increasing permissions for a specific user
|
||||
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $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 group share, this use case is for increasing
|
||||
// permissions for a specific user
|
||||
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
|
||||
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
|
||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||
|
@ -242,7 +275,8 @@ class Share {
|
|||
} else if ($shareType === self::SHARE_TYPE_LINK) {
|
||||
if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
|
||||
// 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
|
||||
$oldToken = $checkExists['token'];
|
||||
//delete the old share
|
||||
|
@ -262,7 +296,8 @@ class Share {
|
|||
} else {
|
||||
$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) {
|
||||
return $token;
|
||||
} else {
|
||||
|
@ -341,7 +376,8 @@ class Share {
|
|||
* @return Returns true on success or false on failure
|
||||
*/
|
||||
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
|
||||
\OC_Hook::emit('OCP\Share', 'pre_unshare', array(
|
||||
'itemType' => $itemType,
|
||||
|
@ -389,9 +425,16 @@ class Share {
|
|||
public static function unshareFromSelf($itemType, $itemTarget) {
|
||||
if ($item = self::getItemSharedWith($itemType, $itemTarget)) {
|
||||
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
|
||||
$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']));
|
||||
// Insert an extra row for the group share and set permission
|
||||
// to 0 to prevent it from showing up for the user
|
||||
$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');
|
||||
// Delete all reshares by this user of the group share
|
||||
self::delete($item['id'], true, \OC_User::getUser());
|
||||
|
@ -418,13 +461,16 @@ class Share {
|
|||
* @return Returns true on success or false on failure
|
||||
*/
|
||||
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)) {
|
||||
// Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item
|
||||
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith,
|
||||
\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'])) {
|
||||
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1);
|
||||
$result = $query->execute(array($item['parent']))->fetchRow();
|
||||
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);
|
||||
throw new \Exception($message);
|
||||
}
|
||||
|
@ -441,9 +487,11 @@ class Share {
|
|||
$parents = array($item['id']);
|
||||
while (!empty($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();
|
||||
// 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();
|
||||
while ($item = $result->fetchRow()) {
|
||||
// Check if permissions need to be removed
|
||||
|
@ -457,7 +505,8 @@ class Share {
|
|||
// Remove the permissions for all reshares of this item
|
||||
if (!empty($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));
|
||||
}
|
||||
}
|
||||
|
@ -470,7 +519,8 @@ class Share {
|
|||
}
|
||||
|
||||
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 ($date == '') {
|
||||
$date = null;
|
||||
|
@ -533,7 +583,8 @@ class Share {
|
|||
if (!self::getBackend($itemType) instanceof Share_Backend_Collection || $itemType != 'folder') {
|
||||
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) {
|
||||
return $collectionTypes;
|
||||
}
|
||||
|
@ -556,7 +607,9 @@ class Share {
|
|||
* 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 ($limit == 1 || (isset($uidOwner) && isset($item))) {
|
||||
return false;
|
||||
|
@ -565,7 +618,8 @@ class Share {
|
|||
}
|
||||
}
|
||||
$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') {
|
||||
$root = \OC\Files\Filesystem::getRoot();
|
||||
$where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`';
|
||||
|
@ -668,7 +722,8 @@ class Share {
|
|||
}
|
||||
if ($limit != -1 && !$includeCollections) {
|
||||
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
|
||||
$where .= ' ORDER BY `*PREFIX*share`.`id` DESC';
|
||||
}
|
||||
|
@ -684,16 +739,20 @@ class Share {
|
|||
// TODO Optimize selects
|
||||
if ($format == self::FORMAT_STATUSES) {
|
||||
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 {
|
||||
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`';
|
||||
}
|
||||
} else {
|
||||
if (isset($uidOwner)) {
|
||||
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 {
|
||||
$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 {
|
||||
if ($fileDependent) {
|
||||
|
@ -702,11 +761,13 @@ class Share {
|
|||
|| $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT
|
||||
) {
|
||||
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `uid_owner`, '
|
||||
.'`share_type`, `share_with`, `file_source`, `path`, `file_target`, '
|
||||
.'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
|
||||
.'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
|
||||
.'`share_type`, `share_with`, `file_source`, `path`, `file_target`, '
|
||||
.'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
|
||||
.'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
|
||||
} 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 {
|
||||
$select = '*';
|
||||
|
@ -717,7 +778,9 @@ class Share {
|
|||
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
|
||||
$result = $query->execute($queryArgs);
|
||||
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();
|
||||
$targets = array();
|
||||
|
@ -735,7 +798,8 @@ class Share {
|
|||
} else if (!isset($uidOwner)) {
|
||||
// Check if the same target already exists
|
||||
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]];
|
||||
if ($items[$id]['uid_owner'] == $row['uid_owner']) {
|
||||
// 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_with'] = $row['share_with'];
|
||||
}
|
||||
// Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing
|
||||
if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE && (int)$row['permissions'] & PERMISSION_SHARE) {
|
||||
// Switch ids if sharing permission is granted on only
|
||||
// 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];
|
||||
$switchedItems[$id] = $row['id'];
|
||||
unset($items[$id]);
|
||||
|
@ -798,7 +864,8 @@ class Share {
|
|||
}
|
||||
// Check if this is a collection of the requested item type
|
||||
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
|
||||
if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) {
|
||||
$collectionItems[] = $row;
|
||||
|
@ -825,7 +892,8 @@ class Share {
|
|||
$meta = \OC\Files\Filesystem::getFileInfo($child['file_path']);
|
||||
$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 ($childItem[$column] == $item) {
|
||||
|
@ -898,7 +966,8 @@ class Share {
|
|||
* @param bool|array Parent folder target (optional)
|
||||
* @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);
|
||||
// Check if this is a reshare
|
||||
if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) {
|
||||
|
@ -911,7 +980,8 @@ class Share {
|
|||
// Check if share permissions is granted
|
||||
if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) {
|
||||
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);
|
||||
throw new \Exception($message);
|
||||
} else {
|
||||
|
@ -933,7 +1003,8 @@ class Share {
|
|||
$suggestedItemTarget = null;
|
||||
$suggestedFileTarget = null;
|
||||
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);
|
||||
throw new \Exception($message);
|
||||
}
|
||||
|
@ -956,14 +1027,18 @@ class Share {
|
|||
$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
|
||||
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 ($parentFolder) {
|
||||
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
|
||||
$parentFolders[0]['folder'] = $groupFileTarget;
|
||||
} else {
|
||||
|
@ -972,21 +1047,25 @@ class Share {
|
|||
$parent = $parentFolder[0]['id'];
|
||||
}
|
||||
} else {
|
||||
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget);
|
||||
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'],
|
||||
$uidOwner, $suggestedFileTarget);
|
||||
}
|
||||
} else {
|
||||
$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
|
||||
$parent = \OC_DB::insertid('*PREFIX*share');
|
||||
// Loop through all users of this group in case we need to add an extra row
|
||||
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 ($parentFolder) {
|
||||
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) {
|
||||
$parentFolders[$uid]['folder'] = $fileTarget;
|
||||
}
|
||||
|
@ -995,7 +1074,8 @@ class Share {
|
|||
$parent = $parentFolder[$uid]['id'];
|
||||
}
|
||||
} 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 {
|
||||
$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
|
||||
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');
|
||||
}
|
||||
}
|
||||
|
@ -1025,23 +1107,27 @@ class Share {
|
|||
return $parentFolders;
|
||||
}
|
||||
} else {
|
||||
$itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget);
|
||||
$itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
|
||||
$suggestedItemTarget);
|
||||
if (isset($fileSource)) {
|
||||
if ($parentFolder) {
|
||||
if ($parentFolder === true) {
|
||||
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget);
|
||||
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith,
|
||||
$uidOwner, $suggestedFileTarget);
|
||||
$parentFolders['folder'] = $fileTarget;
|
||||
} else {
|
||||
$fileTarget = $parentFolder['folder'].$itemSource;
|
||||
$parent = $parentFolder['id'];
|
||||
}
|
||||
} else {
|
||||
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget);
|
||||
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner,
|
||||
$suggestedFileTarget);
|
||||
}
|
||||
} else {
|
||||
$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');
|
||||
\OC_Hook::emit('OCP\Share', 'post_shared', array(
|
||||
'itemType' => $itemType,
|
||||
|
@ -1076,7 +1162,8 @@ class Share {
|
|||
* @param int The id of the parent group share (optional)
|
||||
* @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);
|
||||
if ($shareType == self::SHARE_TYPE_LINK) {
|
||||
if (isset($suggestedTarget)) {
|
||||
|
@ -1143,18 +1230,28 @@ class Share {
|
|||
// Find similar targets to improve backend's chances to generate a unqiue target
|
||||
if ($userAndGroups) {
|
||||
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).'\')');
|
||||
$result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
|
||||
$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).'\')');
|
||||
$result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP,
|
||||
self::$shareTypeGroupUserUnique));
|
||||
} else {
|
||||
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` 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));
|
||||
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
|
||||
.' 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 {
|
||||
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));
|
||||
} 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));
|
||||
}
|
||||
}
|
||||
|
@ -1182,21 +1279,33 @@ class Share {
|
|||
$parents = array($parent);
|
||||
while (!empty($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)) {
|
||||
$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));
|
||||
} 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();
|
||||
}
|
||||
// Reset parents array, only go through loop again if items are found
|
||||
$parents = array();
|
||||
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']));
|
||||
$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` != ?');
|
||||
$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();
|
||||
$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` != ?');
|
||||
$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) {
|
||||
// Change the parent to the other item id if share permission is granted
|
||||
if ($duplicateParent['permissions'] & PERMISSION_SHARE) {
|
||||
|
@ -1225,7 +1334,8 @@ class Share {
|
|||
|
||||
public static function post_deleteUser($arguments) {
|
||||
// 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));
|
||||
// Delete any items the deleted user shared
|
||||
$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
|
||||
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?');
|
||||
$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()) {
|
||||
if ($item['item_type'] == 'file' || $item['item_type'] == 'file') {
|
||||
$itemTarget = null;
|
||||
} 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'])) {
|
||||
$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 {
|
||||
$fileTarget = null;
|
||||
}
|
||||
// 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']) {
|
||||
$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');
|
||||
}
|
||||
}
|
||||
|
@ -1261,8 +1377,10 @@ class Share {
|
|||
|
||||
public static function post_removeFromGroup($arguments) {
|
||||
// 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` = ?)');
|
||||
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid']));
|
||||
$query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share`'
|
||||
.' 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()) {
|
||||
if ($item['share_type'] == self::SHARE_TYPE_GROUP) {
|
||||
// Delete all reshares by this user of the group share
|
||||
|
@ -1319,10 +1437,18 @@ interface Share_Backend {
|
|||
* @param int Format
|
||||
* @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:
|
||||
* 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)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target
|
||||
* 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)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.
|
||||
* It is only called through calls to the public getItem(s)Shared(With) functions.
|
||||
*/
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -31,7 +31,8 @@
|
|||
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 {
|
||||
/**
|
||||
|
|
|
@ -59,9 +59,11 @@ class Util {
|
|||
* @param string $fromname
|
||||
* @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
|
||||
\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
|
||||
*
|
||||
* 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
|
||||
* @return array with sanitized strings or a single sinitized string, depends on the input parameter.
|
||||
|
|
|
@ -114,8 +114,8 @@ class OC_Request {
|
|||
|
||||
switch($encoding) {
|
||||
|
||||
case 'ISO-8859-1' :
|
||||
$path_info = utf8_encode($path_info);
|
||||
case 'ISO-8859-1' :
|
||||
$path_info = utf8_encode($path_info);
|
||||
|
||||
}
|
||||
// end copy
|
||||
|
|
|
@ -205,7 +205,8 @@ class OC_Setup {
|
|||
}
|
||||
$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)) {
|
||||
//use the admin login data for the new database user
|
||||
|
||||
|
@ -235,7 +236,8 @@ class OC_Setup {
|
|||
}
|
||||
|
||||
//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);
|
||||
if($result) {
|
||||
$row=mysql_fetch_row($result);
|
||||
|
@ -257,7 +259,8 @@ class OC_Setup {
|
|||
echo($entry);
|
||||
}
|
||||
$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) {
|
||||
|
@ -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();
|
||||
$e_host = addslashes($dbhost);
|
||||
$e_dbname = addslashes($dbname);
|
||||
|
@ -424,7 +428,8 @@ class OC_Setup {
|
|||
}
|
||||
//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);
|
||||
if (!$stmt) {
|
||||
$entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
|
||||
|
@ -641,8 +646,10 @@ class OC_Setup {
|
|||
header("Location: ".OC::$WEBROOT.'/');
|
||||
} else {
|
||||
|
||||
$error = $l->t('Your web server is not yet properly setup to allow files 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');
|
||||
$error = $l->t('Your web server is not yet properly setup to allow files'
|
||||
.' 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->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false);
|
||||
|
|
|
@ -192,7 +192,13 @@ class OC_Template{
|
|||
|
||||
// Content Security Policy
|
||||
// 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('X-WebKit-CSP:'.$policy); // Older webkit browsers
|
||||
|
||||
|
@ -215,7 +221,8 @@ class OC_Template{
|
|||
$mode='tablet';
|
||||
}elseif(stripos($_SERVER['HTTP_USER_AGENT'], 'iphone')>0) {
|
||||
$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';
|
||||
}else{
|
||||
$mode='default';
|
||||
|
@ -285,7 +292,8 @@ class OC_Template{
|
|||
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/$app/templates/", $name, $fext)) {
|
||||
}elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/$app/templates/", $name, $fext)) {
|
||||
}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();
|
||||
}
|
||||
|
||||
|
@ -295,7 +303,8 @@ class OC_Template{
|
|||
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/core/templates/", $name, $fext)) {
|
||||
} elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/core/templates/", $name, $fext)) {
|
||||
}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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,7 +134,8 @@ class OC_TemplateLayout extends OC_Template {
|
|||
}
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
@ -202,7 +203,8 @@ class OC_TemplateLayout extends OC_Template {
|
|||
}
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,9 @@ class OC_Updater{
|
|||
*/
|
||||
public static function check() {
|
||||
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';
|
||||
$version=OC_Util::getVersion();
|
||||
|
@ -72,7 +74,9 @@ class OC_Updater{
|
|||
if(OC_Config::getValue('updatechecker', true)==true) {
|
||||
$data=OC_Updater::check();
|
||||
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{
|
||||
$txt=$l->t('up to date');
|
||||
}
|
||||
|
|
19
lib/user.php
19
lib/user.php
|
@ -160,7 +160,8 @@ class OC_User {
|
|||
// Check the name for bad characters
|
||||
// Allowed are: "a-z", "A-Z", "0-9" and "_.@-"
|
||||
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
|
||||
if(trim($uid) == '') {
|
||||
|
@ -541,9 +542,9 @@ class OC_User {
|
|||
*/
|
||||
public static function userExists($uid, $excludingBackend=null) {
|
||||
foreach(self::$_usedBackends as $backend) {
|
||||
if (!is_null($excludingBackend) && !strcmp(get_class($backend),$excludingBackend)) {
|
||||
OC_Log::write('OC_User', $excludingBackend . 'excluded from user existance check.', OC_Log::DEBUG);
|
||||
continue;
|
||||
if (!is_null($excludingBackend) && !strcmp(get_class($backend), $excludingBackend)) {
|
||||
OC_Log::write('OC_User', $excludingBackend . 'excluded from user existance check.', OC_Log::DEBUG);
|
||||
continue;
|
||||
}
|
||||
$result=$backend->userExists($uid);
|
||||
if($result===true) {
|
||||
|
@ -588,7 +589,8 @@ class OC_User {
|
|||
* @param string $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);
|
||||
if ( ! OC_DB::isError($stmt) ) {
|
||||
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
|
||||
|
@ -606,14 +608,17 @@ class OC_User {
|
|||
* @return bool
|
||||
*/
|
||||
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);
|
||||
if ( ! OC_DB::isError($stmt) ) {
|
||||
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
|
||||
if ( ! OC_DB::isError($result) ) {
|
||||
return $result->numRows() ? false : true;
|
||||
} 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 {
|
||||
OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR);
|
||||
|
|
|
@ -155,7 +155,8 @@ class OC_User_Database extends OC_User_Backend {
|
|||
*/
|
||||
public function getDisplayNames($search = '', $limit = null, $offset = null) {
|
||||
$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.'%'));
|
||||
$users = array();
|
||||
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
|
||||
$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.'%'));
|
||||
while ($row = $result->fetchRow()) {
|
||||
$displayName = trim($row['displayname'], ' ');
|
||||
|
|
106
lib/util.php
106
lib/util.php
|
@ -73,7 +73,8 @@ class OC_Util {
|
|||
* @return array
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
public static function getEditionString() {
|
||||
|
@ -166,24 +169,33 @@ class OC_Util {
|
|||
|
||||
$web_server_restart= false;
|
||||
//check for database drivers
|
||||
if(!(is_callable('sqlite_open') or class_exists('SQLite3')) 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
|
||||
if(!(is_callable('sqlite_open') or class_exists('SQLite3'))
|
||||
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;
|
||||
}
|
||||
|
||||
//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.
|
||||
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.
|
||||
if(OC_Config::getValue('appstoreenabled', true)) {
|
||||
if( OC_App::getInstallPath() === null || !is_writable(OC_App::getInstallPath()) || !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.");
|
||||
if( OC_App::getInstallPath() === null
|
||||
|| !is_writable(OC_App::getInstallPath())
|
||||
|| !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" );
|
||||
|
@ -193,69 +205,87 @@ class OC_Util {
|
|||
if ($success) {
|
||||
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
|
||||
} 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)) {
|
||||
$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 {
|
||||
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
|
||||
}
|
||||
// check if all required php modules are present
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
$handler = ini_get("session.save_handler");
|
||||
if($handler == "files") {
|
||||
$tmpDir = session_save_path();
|
||||
if($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/>',
|
||||
'hint'=>'Please ask your server administrator to grant write access or define another temporary folder.');
|
||||
if($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/>',
|
||||
'hint'=>'Please ask your server administrator to grant write access'
|
||||
.' or define another temporary folder.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -270,14 +300,16 @@ class OC_Util {
|
|||
if (stristr(PHP_OS, 'WIN')) {
|
||||
//TODO: permissions checks for windows hosts
|
||||
} 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);
|
||||
if (substr($prems, -1) != '0') {
|
||||
OC_Helper::chmodr($dataDirectory, 0770);
|
||||
clearstatcache();
|
||||
$prems = substr(decoct(@fileperms($dataDirectory)), -3);
|
||||
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() {
|
||||
// Check if we are a user
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
@ -528,9 +561,9 @@ class OC_Util {
|
|||
*
|
||||
*/
|
||||
public static function isWebDAVWorking() {
|
||||
if (!function_exists('curl_init')) {
|
||||
return;
|
||||
}
|
||||
if (!function_exists('curl_init')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$settings = array(
|
||||
'baseUri' => OC_Helper::linkToRemote('webdav'),
|
||||
|
@ -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() {
|
||||
// setlocale test is pointless on Windows
|
||||
|
@ -691,10 +725,10 @@ class OC_Util {
|
|||
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
|
||||
|
||||
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'));
|
||||
}
|
||||
if(OC_Config::getValue('proxyuserpwd','')<>'') {
|
||||
if(OC_Config::getValue('proxyuserpwd', '')<>'') {
|
||||
curl_setopt($curl, CURLOPT_PROXYUSERPWD, OC_Config::getValue('proxyuserpwd'));
|
||||
}
|
||||
$data = curl_exec($curl);
|
||||
|
@ -703,7 +737,7 @@ class OC_Util {
|
|||
} else {
|
||||
$contextArray = null;
|
||||
|
||||
if(OC_Config::getValue('proxy','')<>'') {
|
||||
if(OC_Config::getValue('proxy', '')<>'') {
|
||||
$contextArray = array(
|
||||
'http' => array(
|
||||
'timeout' => 10,
|
||||
|
|
|
@ -689,7 +689,9 @@ class OC_VCategories {
|
|||
$stmt = OCP\DB::prepare($sql);
|
||||
$result = $stmt->execute(array($id));
|
||||
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) {
|
||||
OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
|
||||
|
|
|
@ -15,7 +15,7 @@ switch($operation){
|
|||
case 'register':
|
||||
|
||||
// Here external apps can register with an ownCloud
|
||||
if(empty($_GET['name']) || empty($_GET['url'])){
|
||||
if(empty($_GET['name']) || empty($_GET['url'])) {
|
||||
// Invalid request
|
||||
echo 401;
|
||||
} else {
|
||||
|
@ -54,13 +54,13 @@ switch($operation){
|
|||
foreach($consumer['scopes'] as $requiredapp){
|
||||
// App scopes are in this format: app_$appname
|
||||
$requiredapp = end(explode('_', $requiredapp));
|
||||
if(!in_array($requiredapp, $apps)){
|
||||
if(!in_array($requiredapp, $apps)) {
|
||||
$notfound[] = $requiredapp;
|
||||
}
|
||||
}
|
||||
if(!empty($notfound)){
|
||||
if(!empty($notfound)) {
|
||||
// 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.';
|
||||
} 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.';
|
||||
|
|
Loading…
Reference in a new issue