commit
9058d398a7
86
lib/app.php
86
lib/app.php
|
@ -168,10 +168,12 @@ class OC_App{
|
||||||
* get all enabled apps
|
* get all enabled apps
|
||||||
*/
|
*/
|
||||||
public static function getEnabledApps() {
|
public static function getEnabledApps() {
|
||||||
if(!OC_Config::getValue('installed', false))
|
if(!OC_Config::getValue('installed', false)) {
|
||||||
return array();
|
return array();
|
||||||
|
}
|
||||||
$apps=array('files');
|
$apps=array('files');
|
||||||
$query = OC_DB::prepare( 'SELECT `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\'' );
|
$query = OC_DB::prepare( 'SELECT `appid` FROM `*PREFIX*appconfig`'
|
||||||
|
.' WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\'' );
|
||||||
$result=$query->execute();
|
$result=$query->execute();
|
||||||
while($row=$result->fetchRow()) {
|
while($row=$result->fetchRow()) {
|
||||||
if(array_search($row['appid'], $apps)===false) {
|
if(array_search($row['appid'], $apps)===false) {
|
||||||
|
@ -212,7 +214,8 @@ class OC_App{
|
||||||
$appdata=OC_OCSClient::getApplication($app);
|
$appdata=OC_OCSClient::getApplication($app);
|
||||||
$download=OC_OCSClient::getApplicationDownload($app, 1);
|
$download=OC_OCSClient::getApplicationDownload($app, 1);
|
||||||
if(isset($download['downloadlink']) and $download['downloadlink']!='') {
|
if(isset($download['downloadlink']) and $download['downloadlink']!='') {
|
||||||
$app=OC_Installer::installApp(array('source'=>'http', 'href'=>$download['downloadlink'],'appdata'=>$appdata));
|
$info = array('source'=>'http', 'href'=>$download['downloadlink'], 'appdata'=>$appdata);
|
||||||
|
$app=OC_Installer::installApp($info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,7 +224,10 @@ class OC_App{
|
||||||
$info=OC_App::getAppInfo($app);
|
$info=OC_App::getAppInfo($app);
|
||||||
$version=OC_Util::getVersion();
|
$version=OC_Util::getVersion();
|
||||||
if(!isset($info['require']) or ($version[0]>$info['require'])) {
|
if(!isset($info['require']) or ($version[0]>$info['require'])) {
|
||||||
OC_Log::write('core', 'App "'.$info['name'].'" can\'t be installed because it is not compatible with this version of ownCloud', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'App "'.$info['name'].'" can\'t be installed because it is'
|
||||||
|
.' not compatible with this version of ownCloud',
|
||||||
|
OC_Log::ERROR);
|
||||||
return false;
|
return false;
|
||||||
}else{
|
}else{
|
||||||
OC_Appconfig::setValue( $app, 'enabled', 'yes' );
|
OC_Appconfig::setValue( $app, 'enabled', 'yes' );
|
||||||
|
@ -336,33 +342,70 @@ class OC_App{
|
||||||
// by default, settings only contain the help menu
|
// by default, settings only contain the help menu
|
||||||
if(OC_Config::getValue('knowledgebaseenabled', true)==true) {
|
if(OC_Config::getValue('knowledgebaseenabled', true)==true) {
|
||||||
$settings = array(
|
$settings = array(
|
||||||
array( "id" => "help", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_help" ), "name" => $l->t("Help"), "icon" => OC_Helper::imagePath( "settings", "help.svg" ))
|
array(
|
||||||
|
"id" => "help",
|
||||||
|
"order" => 1000,
|
||||||
|
"href" => OC_Helper::linkToRoute( "settings_help" ),
|
||||||
|
"name" => $l->t("Help"),
|
||||||
|
"icon" => OC_Helper::imagePath( "settings", "help.svg" )
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the user is logged-in
|
// if the user is logged-in
|
||||||
if (OC_User::isLoggedIn()) {
|
if (OC_User::isLoggedIn()) {
|
||||||
// personal menu
|
// personal menu
|
||||||
$settings[] = array( "id" => "personal", "order" => 1, "href" => OC_Helper::linkToRoute( "settings_personal" ), "name" => $l->t("Personal"), "icon" => OC_Helper::imagePath( "settings", "personal.svg" ));
|
$settings[] = array(
|
||||||
|
"id" => "personal",
|
||||||
|
"order" => 1,
|
||||||
|
"href" => OC_Helper::linkToRoute( "settings_personal" ),
|
||||||
|
"name" => $l->t("Personal"),
|
||||||
|
"icon" => OC_Helper::imagePath( "settings", "personal.svg" )
|
||||||
|
);
|
||||||
|
|
||||||
// if there are some settings forms
|
// if there are some settings forms
|
||||||
if(!empty(self::$settingsForms))
|
if(!empty(self::$settingsForms)) {
|
||||||
// settings menu
|
// settings menu
|
||||||
$settings[]=array( "id" => "settings", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_settings" ), "name" => $l->t("Settings"), "icon" => OC_Helper::imagePath( "settings", "settings.svg" ));
|
$settings[]=array(
|
||||||
|
"id" => "settings",
|
||||||
|
"order" => 1000,
|
||||||
|
"href" => OC_Helper::linkToRoute( "settings_settings" ),
|
||||||
|
"name" => $l->t("Settings"),
|
||||||
|
"icon" => OC_Helper::imagePath( "settings", "settings.svg" )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//SubAdmins are also allowed to access user management
|
//SubAdmins are also allowed to access user management
|
||||||
if(OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
|
if(OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
|
||||||
// admin users menu
|
// admin users menu
|
||||||
$settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkToRoute( "settings_users" ), "name" => $l->t("Users"), "icon" => OC_Helper::imagePath( "settings", "users.svg" ));
|
$settings[] = array(
|
||||||
|
"id" => "core_users",
|
||||||
|
"order" => 2,
|
||||||
|
"href" => OC_Helper::linkToRoute( "settings_users" ),
|
||||||
|
"name" => $l->t("Users"),
|
||||||
|
"icon" => OC_Helper::imagePath( "settings", "users.svg" )
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// if the user is an admin
|
// if the user is an admin
|
||||||
if(OC_User::isAdminUser(OC_User::getUser())) {
|
if(OC_User::isAdminUser(OC_User::getUser())) {
|
||||||
// admin apps menu
|
// admin apps menu
|
||||||
$settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkToRoute( "settings_apps" ).'?installed', "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" ));
|
$settings[] = array(
|
||||||
|
"id" => "core_apps",
|
||||||
|
"order" => 3,
|
||||||
|
"href" => OC_Helper::linkToRoute( "settings_apps" ).'?installed',
|
||||||
|
"name" => $l->t("Apps"),
|
||||||
|
"icon" => OC_Helper::imagePath( "settings", "apps.svg" )
|
||||||
|
);
|
||||||
|
|
||||||
$settings[]=array( "id" => "admin", "order" => 1000, "href" => OC_Helper::linkToRoute( "settings_admin" ), "name" => $l->t("Admin"), "icon" => OC_Helper::imagePath( "settings", "admin.svg" ));
|
$settings[]=array(
|
||||||
|
"id" => "admin",
|
||||||
|
"order" => 1000,
|
||||||
|
"href" => OC_Helper::linkToRoute( "settings_admin" ),
|
||||||
|
"name" => $l->t("Admin"),
|
||||||
|
"icon" => OC_Helper::imagePath( "settings", "admin.svg" )
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,9 +438,10 @@ class OC_App{
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(OC::$APPSROOTS as $dir) {
|
foreach(OC::$APPSROOTS as $dir) {
|
||||||
if(isset($dir['writable']) && $dir['writable']===true)
|
if(isset($dir['writable']) && $dir['writable']===true) {
|
||||||
return $dir['path'];
|
return $dir['path'];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OC_Log::write('core', 'No application directories are marked as writable.', OC_Log::ERROR);
|
OC_Log::write('core', 'No application directories are marked as writable.', OC_Log::ERROR);
|
||||||
return null;
|
return null;
|
||||||
|
@ -641,7 +685,8 @@ class OC_App{
|
||||||
public static function listAllApps() {
|
public static function listAllApps() {
|
||||||
$installedApps = OC_App::getAllApps();
|
$installedApps = OC_App::getAllApps();
|
||||||
|
|
||||||
//TODO which apps do we want to blacklist and how do we integrate blacklisting with the multi apps folder feature?
|
//TODO which apps do we want to blacklist and how do we integrate
|
||||||
|
// blacklisting with the multi apps folder feature?
|
||||||
|
|
||||||
$blacklist = array('files');//we dont want to show configuration for these
|
$blacklist = array('files');//we dont want to show configuration for these
|
||||||
$appList = array();
|
$appList = array();
|
||||||
|
@ -706,7 +751,8 @@ class OC_App{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief: get a list of all apps on apps.owncloud.com
|
* @brief: get a list of all apps on apps.owncloud.com
|
||||||
* @return array, multi-dimensional array of apps. Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
|
* @return array, multi-dimensional array of apps.
|
||||||
|
* Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
|
||||||
*/
|
*/
|
||||||
public static function getAppstoreApps( $filter = 'approved' ) {
|
public static function getAppstoreApps( $filter = 'approved' ) {
|
||||||
$categoryNames = OC_OCSClient::getCategories();
|
$categoryNames = OC_OCSClient::getCategories();
|
||||||
|
@ -774,7 +820,9 @@ class OC_App{
|
||||||
$installedVersion = $versions[$app];
|
$installedVersion = $versions[$app];
|
||||||
if (version_compare($currentVersion, $installedVersion, '>')) {
|
if (version_compare($currentVersion, $installedVersion, '>')) {
|
||||||
$info = self::getAppInfo($app);
|
$info = self::getAppInfo($app);
|
||||||
OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion, OC_Log::DEBUG);
|
OC_Log::write($app,
|
||||||
|
'starting app upgrade from '.$installedVersion.' to '.$currentVersion,
|
||||||
|
OC_Log::DEBUG);
|
||||||
try {
|
try {
|
||||||
OC_App::updateApp($app);
|
OC_App::updateApp($app);
|
||||||
OC_Hook::emit('update', 'success', 'Updated '.$info['name'].' app');
|
OC_Hook::emit('update', 'success', 'Updated '.$info['name'].' app');
|
||||||
|
@ -804,7 +852,10 @@ class OC_App{
|
||||||
// check if the app is compatible with this version of ownCloud
|
// check if the app is compatible with this version of ownCloud
|
||||||
$info = OC_App::getAppInfo($app);
|
$info = OC_App::getAppInfo($app);
|
||||||
if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) {
|
if(!isset($info['require']) or (($version[0].'.'.$version[1])>$info['require'])) {
|
||||||
OC_Log::write('core', 'App "'.$info['name'].'" ('.$app.') can\'t be used because it is not compatible with this version of ownCloud', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'App "'.$info['name'].'" ('.$app.') can\'t be used because it is'
|
||||||
|
.' not compatible with this version of ownCloud',
|
||||||
|
OC_Log::ERROR);
|
||||||
OC_App::disable( $app );
|
OC_App::disable( $app );
|
||||||
OC_Hook::emit('update', 'success', 'Disabled '.$info['name'].' app because it is not compatible');
|
OC_Hook::emit('update', 'success', 'Disabled '.$info['name'].' app because it is not compatible');
|
||||||
}
|
}
|
||||||
|
@ -820,7 +871,8 @@ class OC_App{
|
||||||
return $versions; // when function is used besides in checkUpgrade
|
return $versions; // when function is used besides in checkUpgrade
|
||||||
}
|
}
|
||||||
$versions=array();
|
$versions=array();
|
||||||
$query = OC_DB::prepare( 'SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig` WHERE `configkey` = \'installed_version\'' );
|
$query = OC_DB::prepare( 'SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig`'
|
||||||
|
.' WHERE `configkey` = \'installed_version\'' );
|
||||||
$result = $query->execute();
|
$result = $query->execute();
|
||||||
while($row = $result->fetchRow()) {
|
while($row = $result->fetchRow()) {
|
||||||
$versions[$row['appid']]=$row['configvalue'];
|
$versions[$row['appid']]=$row['configvalue'];
|
||||||
|
|
|
@ -91,7 +91,8 @@ class OC_Appconfig{
|
||||||
*/
|
*/
|
||||||
public static function getValue( $app, $key, $default = null ) {
|
public static function getValue( $app, $key, $default = null ) {
|
||||||
// At least some magic in here :-)
|
// At least some magic in here :-)
|
||||||
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*appconfig` WHERE `appid` = ? AND `configkey` = ?' );
|
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*appconfig`'
|
||||||
|
.' WHERE `appid` = ? AND `configkey` = ?' );
|
||||||
$result = $query->execute( array( $app, $key ));
|
$result = $query->execute( array( $app, $key ));
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
if($row) {
|
if($row) {
|
||||||
|
@ -124,11 +125,13 @@ class OC_Appconfig{
|
||||||
public static function setValue( $app, $key, $value ) {
|
public static function setValue( $app, $key, $value ) {
|
||||||
// Does the key exist? yes: update. No: insert
|
// Does the key exist? yes: update. No: insert
|
||||||
if(! self::hasKey($app, $key)) {
|
if(! self::hasKey($app, $key)) {
|
||||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*appconfig` ( `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ? )' );
|
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*appconfig` ( `appid`, `configkey`, `configvalue` )'
|
||||||
|
.' VALUES( ?, ?, ? )' );
|
||||||
$query->execute( array( $app, $key, $value ));
|
$query->execute( array( $app, $key, $value ));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*appconfig` SET `configvalue` = ? WHERE `appid` = ? AND `configkey` = ?' );
|
$query = OC_DB::prepare( 'UPDATE `*PREFIX*appconfig` SET `configvalue` = ?'
|
||||||
|
.' WHERE `appid` = ? AND `configkey` = ?' );
|
||||||
$query->execute( array( $value, $app, $key ));
|
$query->execute( array( $value, $app, $key ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,8 @@ class OC_BackgroundJob_QueuedTask{
|
||||||
* @return id of task
|
* @return id of task
|
||||||
*/
|
*/
|
||||||
public static function add( $app, $klass, $method, $parameters ) {
|
public static function add( $app, $klass, $method, $parameters ) {
|
||||||
$stmt = OC_DB::prepare( 'INSERT INTO `*PREFIX*queuedtasks` (`app`, `klass`, `method`, `parameters`) VALUES(?,?,?,?)' );
|
$stmt = OC_DB::prepare( 'INSERT INTO `*PREFIX*queuedtasks` (`app`, `klass`, `method`, `parameters`)'
|
||||||
|
.' VALUES(?,?,?,?)' );
|
||||||
$result = $stmt->execute(array($app, $klass, $method, $parameters ));
|
$result = $stmt->execute(array($app, $klass, $method, $parameters ));
|
||||||
|
|
||||||
return OC_DB::insertid();
|
return OC_DB::insertid();
|
||||||
|
|
39
lib/base.php
39
lib/base.php
|
@ -162,7 +162,9 @@ class OC {
|
||||||
OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/');
|
OC::$THIRDPARTYWEBROOT = rtrim(dirname(OC::$WEBROOT), '/');
|
||||||
OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/');
|
OC::$THIRDPARTYROOT = rtrim(dirname(OC::$SERVERROOT), '/');
|
||||||
} else {
|
} else {
|
||||||
echo("3rdparty directory not found! Please put the ownCloud 3rdparty folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
|
echo("3rdparty directory not found! Please put the ownCloud 3rdparty'
|
||||||
|
.' folder in the ownCloud folder or the folder above.'
|
||||||
|
.' You can also configure the location in the config.php file.");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
// search the apps folder
|
// search the apps folder
|
||||||
|
@ -178,11 +180,16 @@ class OC {
|
||||||
} elseif (file_exists(OC::$SERVERROOT . '/apps')) {
|
} elseif (file_exists(OC::$SERVERROOT . '/apps')) {
|
||||||
OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true);
|
OC::$APPSROOTS[] = array('path' => OC::$SERVERROOT . '/apps', 'url' => '/apps', 'writable' => true);
|
||||||
} elseif (file_exists(OC::$SERVERROOT . '/../apps')) {
|
} elseif (file_exists(OC::$SERVERROOT . '/../apps')) {
|
||||||
OC::$APPSROOTS[] = array('path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps', 'url' => '/apps', 'writable' => true);
|
OC::$APPSROOTS[] = array(
|
||||||
|
'path' => rtrim(dirname(OC::$SERVERROOT), '/') . '/apps',
|
||||||
|
'url' => '/apps',
|
||||||
|
'writable' => true
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty(OC::$APPSROOTS)) {
|
if (empty(OC::$APPSROOTS)) {
|
||||||
echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder or the folder above. You can also configure the location in the config.php file.");
|
echo("apps directory not found! Please put the ownCloud apps folder in the ownCloud folder'
|
||||||
|
.' or the folder above. You can also configure the location in the config.php file.");
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
$paths = array();
|
$paths = array();
|
||||||
|
@ -202,9 +209,14 @@ class OC {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function checkConfig() {
|
public static function checkConfig() {
|
||||||
if (file_exists(OC::$SERVERROOT . "/config/config.php") and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
|
if (file_exists(OC::$SERVERROOT . "/config/config.php")
|
||||||
|
and !is_writable(OC::$SERVERROOT . "/config/config.php")) {
|
||||||
$tmpl = new OC_Template('', 'error', 'guest');
|
$tmpl = new OC_Template('', 'error', 'guest');
|
||||||
$tmpl->assign('errors', array(1 => array('error' => "Can't write into config directory 'config'", 'hint' => "You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
|
$tmpl->assign('errors', array(1 => array(
|
||||||
|
'error' => "Can't write into config directory 'config'",
|
||||||
|
'hint' => "You can usually fix this by giving the webserver user write access'
|
||||||
|
.' to the config directory in owncloud"
|
||||||
|
)));
|
||||||
$tmpl->printPage();
|
$tmpl->printPage();
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
@ -262,7 +274,9 @@ class OC {
|
||||||
if (version_compare($currentVersion, $installedVersion, '>')) {
|
if (version_compare($currentVersion, $installedVersion, '>')) {
|
||||||
if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
|
if ($showTemplate && !OC_Config::getValue('maintenance', false)) {
|
||||||
OC_Config::setValue('maintenance', true);
|
OC_Config::setValue('maintenance', true);
|
||||||
OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::DEBUG);
|
OC_Log::write('core',
|
||||||
|
'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion,
|
||||||
|
OC_Log::DEBUG);
|
||||||
OC_Util::addscript('update');
|
OC_Util::addscript('update');
|
||||||
$tmpl = new OC_Template('', 'update', 'guest');
|
$tmpl = new OC_Template('', 'update', 'guest');
|
||||||
$tmpl->assign('version', OC_Util::getVersionString());
|
$tmpl->assign('version', OC_Util::getVersionString());
|
||||||
|
@ -393,14 +407,16 @@ class OC {
|
||||||
}
|
}
|
||||||
|
|
||||||
//set http auth headers for apache+php-cgi work around
|
//set http auth headers for apache+php-cgi work around
|
||||||
if (isset($_SERVER['HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
|
if (isset($_SERVER['HTTP_AUTHORIZATION'])
|
||||||
|
&& preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
|
||||||
list($name, $password) = explode(':', base64_decode($matches[1]), 2);
|
list($name, $password) = explode(':', base64_decode($matches[1]), 2);
|
||||||
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
|
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
|
||||||
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
|
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
|
||||||
}
|
}
|
||||||
|
|
||||||
//set http auth headers for apache+php-cgi work around if variable gets renamed by apache
|
//set http auth headers for apache+php-cgi work around if variable gets renamed by apache
|
||||||
if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION']) && preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) {
|
if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])
|
||||||
|
&& preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)) {
|
||||||
list($name, $password) = explode(':', base64_decode($matches[1]), 2);
|
list($name, $password) = explode(':', base64_decode($matches[1]), 2);
|
||||||
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
|
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
|
||||||
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
|
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
|
||||||
|
@ -447,7 +463,8 @@ class OC {
|
||||||
OC_User::useBackend(new OC_User_Database());
|
OC_User::useBackend(new OC_User_Database());
|
||||||
OC_Group::useBackend(new OC_Group_Database());
|
OC_Group::useBackend(new OC_Group_Database());
|
||||||
|
|
||||||
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id']) && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) {
|
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id'])
|
||||||
|
&& $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']) {
|
||||||
OC_User::logout();
|
OC_User::logout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -504,7 +521,9 @@ class OC {
|
||||||
|
|
||||||
// write error into log if locale can't be set
|
// write error into log if locale can't be set
|
||||||
if (OC_Util::issetlocaleworking() == false) {
|
if (OC_Util::issetlocaleworking() == false) {
|
||||||
OC_Log::write('core', 'setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system',
|
||||||
|
OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
if (OC_Config::getValue('installed', false)) {
|
if (OC_Config::getValue('installed', false)) {
|
||||||
if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
|
if (OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax') == 'ajax') {
|
||||||
|
|
|
@ -166,7 +166,8 @@ class OC_Config{
|
||||||
$tmpl = new OC_Template( '', 'error', 'guest' );
|
$tmpl = new OC_Template( '', 'error', 'guest' );
|
||||||
$tmpl->assign('errors', array(1=>array(
|
$tmpl->assign('errors', array(1=>array(
|
||||||
'error'=>"Can't write into config directory 'config'",
|
'error'=>"Can't write into config directory 'config'",
|
||||||
'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
|
'hint'=>"You can usually fix this by giving the webserver user write access'
|
||||||
|
.' to the config directory in owncloud")));
|
||||||
$tmpl->printPage();
|
$tmpl->printPage();
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,7 +160,8 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
|
||||||
$chunks = array_chunk($paths, 200, false);
|
$chunks = array_chunk($paths, 200, false);
|
||||||
foreach ($chunks as $pack) {
|
foreach ($chunks as $pack) {
|
||||||
$placeholders = join(',', array_fill(0, count($pack), '?'));
|
$placeholders = join(',', array_fill(0, count($pack), '?'));
|
||||||
$query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' );
|
$query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties`'
|
||||||
|
.' WHERE `userid` = ?' . ' AND `propertypath` IN ('.$placeholders.')' );
|
||||||
array_unshift($pack, OC_User::getUser()); // prepend userid
|
array_unshift($pack, OC_User::getUser()); // prepend userid
|
||||||
$result = $query->execute( $pack );
|
$result = $query->execute( $pack );
|
||||||
while($row = $result->fetchRow()) {
|
while($row = $result->fetchRow()) {
|
||||||
|
|
|
@ -113,8 +113,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
|
||||||
/**
|
/**
|
||||||
* Returns the ETag for a file
|
* Returns the ETag for a file
|
||||||
*
|
*
|
||||||
* An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change.
|
* An ETag is a unique identifier representing the current version of the
|
||||||
* The ETag is an arbritrary string, but MUST be surrounded by double-quotes.
|
* file. If the file changes, the ETag MUST change. The ETag is an
|
||||||
|
* arbritrary string, but MUST be surrounded by double-quotes.
|
||||||
*
|
*
|
||||||
* Return null if the ETag can not effectively be determined
|
* Return null if the ETag can not effectively be determined
|
||||||
*
|
*
|
||||||
|
|
|
@ -44,7 +44,8 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
|
||||||
// NOTE: SQLite requires time() to be inserted directly. That's ugly
|
// NOTE: SQLite requires time() to be inserted directly. That's ugly
|
||||||
// but otherwise reading locks from SQLite Databases will return
|
// but otherwise reading locks from SQLite Databases will return
|
||||||
// nothing
|
// nothing
|
||||||
$query = 'SELECT * FROM `*PREFIX*locks` WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
|
$query = 'SELECT * FROM `*PREFIX*locks`'
|
||||||
|
.' WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
|
||||||
$params = array(OC_User::getUser(), $uri);
|
$params = array(OC_User::getUser(), $uri);
|
||||||
|
|
||||||
// We need to check locks for every part in the uri.
|
// We need to check locks for every part in the uri.
|
||||||
|
@ -116,11 +117,33 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($exists) {
|
if ($exists) {
|
||||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*locks` SET `owner` = ?, `timeout` = ?, `scope` = ?, `depth` = ?, `uri` = ?, `created` = ? WHERE `userid` = ? AND `token` = ?' );
|
$query = OC_DB::prepare( 'UPDATE `*PREFIX*locks`'
|
||||||
$result = $query->execute( array($lockInfo->owner,$lockInfo->timeout,$lockInfo->scope,$lockInfo->depth,$uri,$lockInfo->created,OC_User::getUser(),$lockInfo->token));
|
.' SET `owner` = ?, `timeout` = ?, `scope` = ?, `depth` = ?, `uri` = ?, `created` = ?'
|
||||||
|
.' WHERE `userid` = ? AND `token` = ?' );
|
||||||
|
$result = $query->execute( array(
|
||||||
|
$lockInfo->owner,
|
||||||
|
$lockInfo->timeout,
|
||||||
|
$lockInfo->scope,
|
||||||
|
$lockInfo->depth,
|
||||||
|
$uri,
|
||||||
|
$lockInfo->created,
|
||||||
|
OC_User::getUser(),
|
||||||
|
$lockInfo->token)
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*locks` (`userid`,`owner`,`timeout`,`scope`,`depth`,`uri`,`created`,`token`) VALUES (?,?,?,?,?,?,?,?)' );
|
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*locks`'
|
||||||
$result = $query->execute( array(OC_User::getUser(),$lockInfo->owner,$lockInfo->timeout,$lockInfo->scope,$lockInfo->depth,$uri,$lockInfo->created,$lockInfo->token));
|
.' (`userid`,`owner`,`timeout`,`scope`,`depth`,`uri`,`created`,`token`)'
|
||||||
|
.' VALUES (?,?,?,?,?,?,?,?)' );
|
||||||
|
$result = $query->execute( array(
|
||||||
|
OC_User::getUser(),
|
||||||
|
$lockInfo->owner,
|
||||||
|
$lockInfo->timeout,
|
||||||
|
$lockInfo->scope,
|
||||||
|
$lockInfo->depth,
|
||||||
|
$uri,
|
||||||
|
$lockInfo->created,
|
||||||
|
$lockInfo->token)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -88,7 +88,8 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
||||||
|
|
||||||
$this->path = $newPath;
|
$this->path = $newPath;
|
||||||
|
|
||||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?' );
|
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertypath` = ?'
|
||||||
|
.' WHERE `userid` = ? AND `propertypath` = ?' );
|
||||||
$query->execute( array( $newPath, OC_User::getUser(), $oldPath ));
|
$query->execute( array( $newPath, OC_User::getUser(), $oldPath ));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -149,7 +150,8 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
||||||
// If it was null, we need to delete the property
|
// If it was null, we need to delete the property
|
||||||
if (is_null($propertyValue)) {
|
if (is_null($propertyValue)) {
|
||||||
if(array_key_exists( $propertyName, $existing )) {
|
if(array_key_exists( $propertyName, $existing )) {
|
||||||
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
|
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`'
|
||||||
|
.' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
|
||||||
$query->execute( array( OC_User::getUser(), $this->path, $propertyName ));
|
$query->execute( array( OC_User::getUser(), $this->path, $propertyName ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,10 +162,12 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
|
||||||
$this->touch($propertyValue);
|
$this->touch($propertyValue);
|
||||||
} else {
|
} else {
|
||||||
if(!array_key_exists( $propertyName, $existing )) {
|
if(!array_key_exists( $propertyName, $existing )) {
|
||||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
|
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties`'
|
||||||
|
.' (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
|
||||||
$query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue ));
|
$query->execute( array( OC_User::getUser(), $this->path, $propertyName,$propertyValue ));
|
||||||
} else {
|
} else {
|
||||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ? WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
|
$query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyvalue` = ?'
|
||||||
|
.' WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` = ?' );
|
||||||
$query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName ));
|
$query->execute( array( $propertyValue,OC_User::getUser(), $this->path, $propertyName ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
15
lib/db.php
15
lib/db.php
|
@ -232,7 +232,8 @@ class OC_DB {
|
||||||
'log_line_break' => '<br>',
|
'log_line_break' => '<br>',
|
||||||
'idxname_format' => '%s',
|
'idxname_format' => '%s',
|
||||||
'debug' => true,
|
'debug' => true,
|
||||||
'quote_identifier' => true );
|
'quote_identifier' => true
|
||||||
|
);
|
||||||
|
|
||||||
// Add the dsn according to the database type
|
// Add the dsn according to the database type
|
||||||
switch($type) {
|
switch($type) {
|
||||||
|
@ -474,7 +475,8 @@ class OC_DB {
|
||||||
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
|
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
|
||||||
*/
|
*/
|
||||||
if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't
|
if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't
|
||||||
$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
|
$content = str_replace( '<default>0000-00-00 00:00:00</default>',
|
||||||
|
'<default>CURRENT_TIMESTAMP</default>', $content );
|
||||||
}
|
}
|
||||||
|
|
||||||
file_put_contents( $file2, $content );
|
file_put_contents( $file2, $content );
|
||||||
|
@ -499,7 +501,8 @@ class OC_DB {
|
||||||
|
|
||||||
// Die in case something went wrong
|
// Die in case something went wrong
|
||||||
if( $ret instanceof MDB2_Error ) {
|
if( $ret instanceof MDB2_Error ) {
|
||||||
OC_Template::printErrorPage( self::$MDB2->getDebugOutput().' '.$ret->getMessage() . ': ' . $ret->getUserInfo() );
|
OC_Template::printErrorPage( self::$MDB2->getDebugOutput().' '.$ret->getMessage() . ': '
|
||||||
|
. $ret->getUserInfo() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -541,7 +544,8 @@ class OC_DB {
|
||||||
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
|
* http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
|
||||||
*/
|
*/
|
||||||
if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't
|
if( $CONFIG_DBTYPE == 'pgsql' ) { //mysql support it too but sqlite doesn't
|
||||||
$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
|
$content = str_replace( '<default>0000-00-00 00:00:00</default>',
|
||||||
|
'<default>CURRENT_TIMESTAMP</default>', $content );
|
||||||
}
|
}
|
||||||
file_put_contents( $file2, $content );
|
file_put_contents( $file2, $content );
|
||||||
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
|
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
|
||||||
|
@ -679,7 +683,8 @@ class OC_DB {
|
||||||
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'strftime(\'%s\',\'now\')', $query );
|
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'strftime(\'%s\',\'now\')', $query );
|
||||||
}elseif( $type == 'pgsql' ) {
|
}elseif( $type == 'pgsql' ) {
|
||||||
$query = str_replace( '`', '"', $query );
|
$query = str_replace( '`', '"', $query );
|
||||||
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'cast(extract(epoch from current_timestamp) as integer)', $query );
|
$query = str_ireplace( 'UNIX_TIMESTAMP()', 'cast(extract(epoch from current_timestamp) as integer)',
|
||||||
|
$query );
|
||||||
}elseif( $type == 'oci' ) {
|
}elseif( $type == 'oci' ) {
|
||||||
$query = str_replace( '`', '"', $query );
|
$query = str_replace( '`', '"', $query );
|
||||||
$query = str_ireplace( 'NOW()', 'CURRENT_TIMESTAMP', $query );
|
$query = str_ireplace( 'NOW()', 'CURRENT_TIMESTAMP', $query );
|
||||||
|
|
|
@ -62,7 +62,8 @@ class OC_EventSource{
|
||||||
$type=null;
|
$type=null;
|
||||||
}
|
}
|
||||||
if($this->fallback) {
|
if($this->fallback) {
|
||||||
$response='<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack('.$this->fallBackId.',"'.$type.'",'.json_encode($data).')</script>'.PHP_EOL;
|
$response='<script type="text/javascript">window.parent.OC.EventSource.fallBackCallBack('
|
||||||
|
.$this->fallBackId.',"'.$type.'",'.json_encode($data).')</script>'.PHP_EOL;
|
||||||
echo $response;
|
echo $response;
|
||||||
}else{
|
}else{
|
||||||
if($type) {
|
if($type) {
|
||||||
|
|
|
@ -97,7 +97,8 @@ class OC_FileChunking {
|
||||||
$absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path));
|
$absolutePath = \OC\Files\Filesystem::normalizePath(\OC\Files\Filesystem::getView()->getAbsolutePath($path));
|
||||||
$data = '';
|
$data = '';
|
||||||
// use file_put_contents as method because that best matches what this function does
|
// use file_put_contents as method because that best matches what this function does
|
||||||
if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && \OC\Files\Filesystem::isValidPath($path)) {
|
if (OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data)
|
||||||
|
&& \OC\Files\Filesystem::isValidPath($path)) {
|
||||||
$path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath);
|
$path = \OC\Files\Filesystem::getView()->getRelativePath($absolutePath);
|
||||||
$exists = \OC\Files\Filesystem::file_exists($path);
|
$exists = \OC\Files\Filesystem::file_exists($path);
|
||||||
$run = true;
|
$run = true;
|
||||||
|
|
|
@ -200,7 +200,8 @@ class OC_Files {
|
||||||
$errors = array(
|
$errors = array(
|
||||||
array(
|
array(
|
||||||
'error' => $l->t('ZIP download is turned off.'),
|
'error' => $l->t('ZIP download is turned off.'),
|
||||||
'hint' => $l->t('Files need to be downloaded one by one.') . '<br/><a href="javascript:history.back()">' . $l->t('Back to Files') . '</a>',
|
'hint' => $l->t('Files need to be downloaded one by one.')
|
||||||
|
. '<br/><a href="javascript:history.back()">' . $l->t('Back to Files') . '</a>',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$tmpl->assign('errors', $errors);
|
$tmpl->assign('errors', $errors);
|
||||||
|
@ -225,7 +226,9 @@ class OC_Files {
|
||||||
$errors = array(
|
$errors = array(
|
||||||
array(
|
array(
|
||||||
'error' => $l->t('Selected files too large to generate zip file.'),
|
'error' => $l->t('Selected files too large to generate zip file.'),
|
||||||
'hint' => 'Download the files in smaller chunks, seperately or kindly ask your administrator.<br/><a href="javascript:history.back()">' . $l->t('Back to Files') . '</a>',
|
'hint' => 'Download the files in smaller chunks, seperately'
|
||||||
|
.' or kindly ask your administrator.<br/><a href="javascript:history.back()">'
|
||||||
|
. $l->t('Back to Files') . '</a>',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$tmpl->assign('errors', $errors);
|
$tmpl->assign('errors', $errors);
|
||||||
|
@ -287,7 +290,9 @@ class OC_Files {
|
||||||
file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess);
|
file_put_contents(OC::$SERVERROOT . '/.htaccess', $htaccess);
|
||||||
return OC_Helper::computerFileSize($size);
|
return OC_Helper::computerFileSize($size);
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('files', 'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions', OC_Log::WARN);
|
OC_Log::write('files',
|
||||||
|
'Can\'t write upload limit to ' . OC::$SERVERROOT . '/.htaccess. Please check the file permissions',
|
||||||
|
OC_Log::WARN);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,7 +198,8 @@ class Cache {
|
||||||
$params[] = $this->numericId;
|
$params[] = $this->numericId;
|
||||||
$valuesPlaceholder = array_fill(0, count($queryParts), '?');
|
$valuesPlaceholder = array_fill(0, count($queryParts), '?');
|
||||||
|
|
||||||
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ') VALUES(' . implode(', ', $valuesPlaceholder) . ')');
|
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*filecache`(' . implode(', ', $queryParts) . ')'
|
||||||
|
.' VALUES(' . implode(', ', $valuesPlaceholder) . ')');
|
||||||
$query->execute($params);
|
$query->execute($params);
|
||||||
|
|
||||||
return (int)\OC_DB::insertid('*PREFIX*filecache');
|
return (int)\OC_DB::insertid('*PREFIX*filecache');
|
||||||
|
@ -215,7 +216,8 @@ class Cache {
|
||||||
list($queryParts, $params) = $this->buildParts($data);
|
list($queryParts, $params) = $this->buildParts($data);
|
||||||
$params[] = $id;
|
$params[] = $id;
|
||||||
|
|
||||||
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=? WHERE fileid = ?');
|
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET ' . implode(' = ?, ', $queryParts) . '=?'
|
||||||
|
.' WHERE fileid = ?');
|
||||||
$query->execute($params);
|
$query->execute($params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,7 +334,8 @@ class Cache {
|
||||||
$query->execute(array($targetPath, md5($targetPath), $child['fileid']));
|
$query->execute(array($targetPath, md5($targetPath), $child['fileid']));
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =? WHERE `fileid` = ?');
|
$query = \OC_DB::prepare('UPDATE `*PREFIX*filecache` SET `path` = ?, `path_hash` = ?, `parent` =?'
|
||||||
|
.' WHERE `fileid` = ?');
|
||||||
$query->execute(array($target, md5($target), $newParentId, $sourceId));
|
$query->execute(array($target, md5($target), $newParentId, $sourceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -492,7 +495,8 @@ class Cache {
|
||||||
* @return string|bool the path of the folder or false when no folder matched
|
* @return string|bool the path of the folder or false when no folder matched
|
||||||
*/
|
*/
|
||||||
public function getIncomplete() {
|
public function getIncomplete() {
|
||||||
$query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache` WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1');
|
$query = \OC_DB::prepare('SELECT `path` FROM `*PREFIX*filecache`'
|
||||||
|
.' WHERE `storage` = ? AND `size` = -1 ORDER BY `fileid` DESC LIMIT 1');
|
||||||
$query->execute(array($this->numericId));
|
$query->execute(array($this->numericId));
|
||||||
if ($row = $query->fetchRow()) {
|
if ($row = $query->fetchRow()) {
|
||||||
return $row['path'];
|
return $row['path'];
|
||||||
|
|
|
@ -51,9 +51,11 @@ class Permissions {
|
||||||
*/
|
*/
|
||||||
public function set($fileId, $user, $permissions) {
|
public function set($fileId, $user, $permissions) {
|
||||||
if (self::get($fileId, $user) !== -1) {
|
if (self::get($fileId, $user) !== -1) {
|
||||||
$query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?');
|
$query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ?'
|
||||||
|
.' WHERE `user` = ? AND `fileid` = ?');
|
||||||
} else {
|
} else {
|
||||||
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )');
|
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`)'
|
||||||
|
.' VALUES(?, ?,? )');
|
||||||
}
|
}
|
||||||
$query->execute(array($permissions, $user, $fileId));
|
$query->execute(array($permissions, $user, $fileId));
|
||||||
}
|
}
|
||||||
|
@ -73,7 +75,8 @@ class Permissions {
|
||||||
$params[] = $user;
|
$params[] = $user;
|
||||||
$inPart = implode(', ', array_fill(0, count($fileIds), '?'));
|
$inPart = implode(', ', array_fill(0, count($fileIds), '?'));
|
||||||
|
|
||||||
$query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
|
$query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions`'
|
||||||
|
.' WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
|
||||||
$result = $query->execute($params);
|
$result = $query->execute($params);
|
||||||
$filePermissions = array();
|
$filePermissions = array();
|
||||||
while ($row = $result->fetchRow()) {
|
while ($row = $result->fetchRow()) {
|
||||||
|
|
|
@ -69,7 +69,8 @@ class Upgrade {
|
||||||
( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` )
|
( `fileid`, `storage`, `path`, `path_hash`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted` )
|
||||||
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
|
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
|
||||||
|
|
||||||
$insertQuery->execute(array($data['id'], $data['storage'], $data['path'], $data['path_hash'], $data['parent'], $data['name'],
|
$insertQuery->execute(array($data['id'], $data['storage'],
|
||||||
|
$data['path'], $data['path_hash'], $data['parent'], $data['name'],
|
||||||
$data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted']));
|
$data['mimetype'], $data['mimepart'], $data['size'], $data['mtime'], $data['encrypted']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,9 @@ class Filesystem {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the mountpoint of the storage object for a path
|
* get the mountpoint of the storage object for a path
|
||||||
( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
|
* ( note: because a storage is not always mounted inside the fakeroot, the
|
||||||
|
* returned mountpoint is relative to the absolute root of the filesystem
|
||||||
|
* and doesn't take the chroot into account )
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return string
|
* @return string
|
||||||
|
@ -318,7 +320,8 @@ class Filesystem {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return the path to a local version of the file
|
* return the path to a local version of the file
|
||||||
* we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
|
* we need this because we can't know if a file is stored local or not from
|
||||||
|
* outside the filestorage and for some purposes a local file is needed
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return string
|
* @return string
|
||||||
|
|
|
@ -113,7 +113,8 @@ abstract class Common implements \OC\Files\Storage\Storage {
|
||||||
public function deleteAll( $directory, $empty = false ) {
|
public function deleteAll( $directory, $empty = false ) {
|
||||||
$directory = trim($directory, '/');
|
$directory = trim($directory, '/');
|
||||||
|
|
||||||
if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory ) || !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) {
|
if ( !$this->file_exists( \OCP\USER::getUser() . '/' . $directory )
|
||||||
|
|| !$this->is_dir( \OCP\USER::getUser() . '/' . $directory ) ) {
|
||||||
return false;
|
return false;
|
||||||
} elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) {
|
} elseif( !$this->isReadable( \OCP\USER::getUser() . '/' . $directory ) ) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -205,7 +205,9 @@ class Local extends \OC\Files\Storage\Common{
|
||||||
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
|
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
\OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR);
|
\OC_Log::write('core',
|
||||||
|
'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name,
|
||||||
|
\OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -248,7 +248,9 @@ class MappedLocal extends \OC\Files\Storage\Common{
|
||||||
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
|
return (float)exec('stat -c %s ' . escapeshellarg($fullPath));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
\OC_Log::write('core', 'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name, \OC_Log::ERROR);
|
\OC_Log::write('core',
|
||||||
|
'Unable to determine file size of "'.$fullPath.'". Unknown OS: '.$name,
|
||||||
|
\OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -92,7 +92,9 @@ class View {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the mountpoint of the storage object for a path
|
* get the mountpoint of the storage object for a path
|
||||||
( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
|
* ( note: because a storage is not always mounted inside the fakeroot, the
|
||||||
|
* returned mountpoint is relative to the absolute root of the filesystem
|
||||||
|
* and doesn't take the chroot into account )
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return string
|
* @return string
|
||||||
|
@ -113,7 +115,8 @@ class View {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return the path to a local version of the file
|
* return the path to a local version of the file
|
||||||
* we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
|
* we need this because we can't know if a file is stored local or not from
|
||||||
|
* outside the filestorage and for some purposes a local file is needed
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return string
|
* @return string
|
||||||
|
@ -252,7 +255,8 @@ class View {
|
||||||
public function file_put_contents($path, $data) {
|
public function file_put_contents($path, $data) {
|
||||||
if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier
|
if (is_resource($data)) { //not having to deal with streams in file_put_contents makes life easier
|
||||||
$absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
|
$absolutePath = Filesystem::normalizePath($this->getAbsolutePath($path));
|
||||||
if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data) && Filesystem::isValidPath($path)) {
|
if (\OC_FileProxy::runPreProxies('file_put_contents', $absolutePath, $data)
|
||||||
|
&& Filesystem::isValidPath($path)) {
|
||||||
$path = $this->getRelativePath($absolutePath);
|
$path = $this->getRelativePath($absolutePath);
|
||||||
$exists = $this->file_exists($path);
|
$exists = $this->file_exists($path);
|
||||||
$run = true;
|
$run = true;
|
||||||
|
@ -324,7 +328,8 @@ class View {
|
||||||
$postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
|
$postFix2 = (substr($path2, -1, 1) === '/') ? '/' : '';
|
||||||
$absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
|
$absolutePath1 = Filesystem::normalizePath($this->getAbsolutePath($path1));
|
||||||
$absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
|
$absolutePath2 = Filesystem::normalizePath($this->getAbsolutePath($path2));
|
||||||
if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2) and Filesystem::isValidPath($path2)) {
|
if (\OC_FileProxy::runPreProxies('rename', $absolutePath1, $absolutePath2)
|
||||||
|
and Filesystem::isValidPath($path2)) {
|
||||||
$path1 = $this->getRelativePath($absolutePath1);
|
$path1 = $this->getRelativePath($absolutePath1);
|
||||||
$path2 = $this->getRelativePath($absolutePath2);
|
$path2 = $this->getRelativePath($absolutePath2);
|
||||||
|
|
||||||
|
@ -776,7 +781,8 @@ class View {
|
||||||
$rootEntry = $subCache->get('');
|
$rootEntry = $subCache->get('');
|
||||||
if ($rootEntry) {
|
if ($rootEntry) {
|
||||||
$relativePath = trim(substr($mountPoint, $dirLength), '/');
|
$relativePath = trim(substr($mountPoint, $dirLength), '/');
|
||||||
if ($pos = strpos($relativePath, '/')) { //mountpoint inside subfolder add size to the correct folder
|
if ($pos = strpos($relativePath, '/')) {
|
||||||
|
//mountpoint inside subfolder add size to the correct folder
|
||||||
$entryName = substr($relativePath, 0, $pos);
|
$entryName = substr($relativePath, 0, $pos);
|
||||||
foreach ($files as &$entry) {
|
foreach ($files as &$entry) {
|
||||||
if ($entry['name'] === $entryName) {
|
if ($entry['name'] === $entryName) {
|
||||||
|
|
|
@ -34,7 +34,9 @@
|
||||||
class OC_Filesystem {
|
class OC_Filesystem {
|
||||||
/**
|
/**
|
||||||
* get the mountpoint of the storage object for a path
|
* get the mountpoint of the storage object for a path
|
||||||
( note: because a storage is not always mounted inside the fakeroot, the returned mountpoint is relative to the absolute root of the filesystem and doesn't take the chroot into account
|
* ( note: because a storage is not always mounted inside the fakeroot, the
|
||||||
|
* returned mountpoint is relative to the absolute root of the filesystem
|
||||||
|
* and doesn't take the chroot into account )
|
||||||
*
|
*
|
||||||
* @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
|
* @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
|
||||||
* @param string $path
|
* @param string $path
|
||||||
|
@ -115,7 +117,8 @@ class OC_Filesystem {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return the path to a local version of the file
|
* return the path to a local version of the file
|
||||||
* we need this because we can't know if a file is stored local or not from outside the filestorage and for some purposes a local file is needed
|
* we need this because we can't know if a file is stored local or not from
|
||||||
|
* outside the filestorage and for some purposes a local file is needed
|
||||||
*
|
*
|
||||||
* @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
|
* @deprecated OC_Filesystem is replaced by \OC\Files\Filesystem
|
||||||
* @param string $path
|
* @param string $path
|
||||||
|
|
|
@ -311,7 +311,12 @@ class OC_Group {
|
||||||
$displayNames = array();
|
$displayNames = array();
|
||||||
foreach ($gids as $gid) {
|
foreach ($gids as $gid) {
|
||||||
// TODO Need to apply limits to groups as total
|
// TODO Need to apply limits to groups as total
|
||||||
$displayNames = array_merge(array_diff(self::displayNamesInGroup($gid, $search, $limit, $offset), $displayNames), $displayNames);
|
$displayNames = array_merge(
|
||||||
|
array_diff(
|
||||||
|
self::displayNamesInGroup($gid, $search, $limit, $offset),
|
||||||
|
$displayNames
|
||||||
|
),
|
||||||
|
$displayNames);
|
||||||
}
|
}
|
||||||
return $displayNames;
|
return $displayNames;
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,7 +200,9 @@ class OC_Group_Database extends OC_Group_Backend {
|
||||||
* @return array with user ids
|
* @return array with user ids
|
||||||
*/
|
*/
|
||||||
public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
|
public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
|
||||||
$stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?', $limit, $offset);
|
$stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?',
|
||||||
|
$limit,
|
||||||
|
$offset);
|
||||||
$result = $stmt->execute(array($gid, $search.'%'));
|
$result = $stmt->execute(array($gid, $search.'%'));
|
||||||
$users = array();
|
$users = array();
|
||||||
while ($row = $result->fetchRow()) {
|
while ($row = $result->fetchRow()) {
|
||||||
|
@ -220,7 +222,12 @@ class OC_Group_Database extends OC_Group_Backend {
|
||||||
public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
|
public function DisplayNamesInGroup($gid, $search = '', $limit = -1, $offset = 0) {
|
||||||
$displayNames = '';
|
$displayNames = '';
|
||||||
|
|
||||||
$stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname` FROM `*PREFIX*users` INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid` WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?', $limit, $offset);
|
$stmt = OC_DB::prepare('SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname`'
|
||||||
|
.' FROM `*PREFIX*users`'
|
||||||
|
.' INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid`'
|
||||||
|
.' WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?',
|
||||||
|
$limit,
|
||||||
|
$offset);
|
||||||
$result = $stmt->execute(array($gid, $search.'%'));
|
$result = $stmt->execute(array($gid, $search.'%'));
|
||||||
$users = array();
|
$users = array();
|
||||||
while ($row = $result->fetchRow()) {
|
while ($row = $result->fetchRow()) {
|
||||||
|
|
|
@ -132,7 +132,8 @@ class OC_Helper {
|
||||||
* Returns a absolute url to the given service.
|
* Returns a absolute url to the given service.
|
||||||
*/
|
*/
|
||||||
public static function linkToRemote( $service, $add_slash = true ) {
|
public static function linkToRemote( $service, $add_slash = true ) {
|
||||||
return self::makeURLAbsolute(self::linkToRemoteBase($service)) . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
|
return self::makeURLAbsolute(self::linkToRemoteBase($service))
|
||||||
|
. (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -144,7 +145,8 @@ class OC_Helper {
|
||||||
* Returns a absolute url to the given service.
|
* Returns a absolute url to the given service.
|
||||||
*/
|
*/
|
||||||
public static function linkToPublic($service, $add_slash = false) {
|
public static function linkToPublic($service, $add_slash = false) {
|
||||||
return self::linkToAbsolute( '', 'public.php') . '?service=' . $service . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
|
return self::linkToAbsolute( '', 'public.php') . '?service=' . $service
|
||||||
|
. (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -379,7 +381,8 @@ class OC_Helper {
|
||||||
$mimeType='application/octet-stream';
|
$mimeType='application/octet-stream';
|
||||||
}
|
}
|
||||||
|
|
||||||
if($mimeType=='application/octet-stream' and function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) {
|
if($mimeType=='application/octet-stream' and function_exists('finfo_open')
|
||||||
|
and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)) {
|
||||||
$info = @strtolower(finfo_file($finfo, $path));
|
$info = @strtolower(finfo_file($finfo, $path));
|
||||||
if($info) {
|
if($info) {
|
||||||
$mimeType=substr($info, 0, strpos($info, ';'));
|
$mimeType=substr($info, 0, strpos($info, ';'));
|
||||||
|
@ -444,7 +447,8 @@ class OC_Helper {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns "checked"-attribute if request contains selected radio element OR if radio element is the default one -- maybe?
|
* returns "checked"-attribute if request contains selected radio element
|
||||||
|
* OR if radio element is the default one -- maybe?
|
||||||
* @param string $s Name of radio-button element name
|
* @param string $s Name of radio-button element name
|
||||||
* @param string $v Value of current radio-button element
|
* @param string $v Value of current radio-button element
|
||||||
* @param string $d Value of default radio-button element
|
* @param string $d Value of default radio-button element
|
||||||
|
|
|
@ -34,7 +34,8 @@ class OC_Hook{
|
||||||
// Connect the hook handler to the requested emitter
|
// Connect the hook handler to the requested emitter
|
||||||
self::$registered[$signalclass][$signalname][] = array(
|
self::$registered[$signalclass][$signalname][] = array(
|
||||||
"class" => $slotclass,
|
"class" => $slotclass,
|
||||||
"name" => $slotname );
|
"name" => $slotname
|
||||||
|
);
|
||||||
|
|
||||||
// No chance for failure ;-)
|
// No chance for failure ;-)
|
||||||
return true;
|
return true;
|
||||||
|
@ -70,7 +71,9 @@ class OC_Hook{
|
||||||
try {
|
try {
|
||||||
call_user_func( array( $i["class"], $i["name"] ), $params );
|
call_user_func( array( $i["class"], $i["name"] ), $params );
|
||||||
} catch (Exception $e){
|
} catch (Exception $e){
|
||||||
OC_Log::write('hook', 'error while running hook (' . $i["class"] . '::' . $i["name"] . '): '.$e->getMessage(), OC_Log::ERROR);
|
OC_Log::write('hook',
|
||||||
|
'error while running hook (' . $i["class"] . '::' . $i["name"] . '): '.$e->getMessage(),
|
||||||
|
OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,9 @@ class OC_Image {
|
||||||
if (!file_exists(dirname($filepath)))
|
if (!file_exists(dirname($filepath)))
|
||||||
mkdir(dirname($filepath), 0777, true);
|
mkdir(dirname($filepath), 0777, true);
|
||||||
if(!is_writable(dirname($filepath))) {
|
if(!is_writable(dirname($filepath))) {
|
||||||
OC_Log::write('core', __METHOD__.'(): Directory \''.dirname($filepath).'\' is not writable.', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
__METHOD__.'(): Directory \''.dirname($filepath).'\' is not writable.',
|
||||||
|
OC_Log::ERROR);
|
||||||
return false;
|
return false;
|
||||||
} elseif(is_writable(dirname($filepath)) && file_exists($filepath) && !is_writable($filepath)) {
|
} elseif(is_writable(dirname($filepath)) && file_exists($filepath) && !is_writable($filepath)) {
|
||||||
OC_Log::write('core', __METHOD__.'(): File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
|
OC_Log::write('core', __METHOD__.'(): File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
|
||||||
|
@ -394,35 +396,45 @@ class OC_Image {
|
||||||
if (imagetypes() & IMG_GIF) {
|
if (imagetypes() & IMG_GIF) {
|
||||||
$this->resource = imagecreatefromgif($imagepath);
|
$this->resource = imagecreatefromgif($imagepath);
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('core', 'OC_Image->loadFromFile, GIF images not supported: '.$imagepath, OC_Log::DEBUG);
|
OC_Log::write('core',
|
||||||
|
'OC_Image->loadFromFile, GIF images not supported: '.$imagepath,
|
||||||
|
OC_Log::DEBUG);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_JPEG:
|
case IMAGETYPE_JPEG:
|
||||||
if (imagetypes() & IMG_JPG) {
|
if (imagetypes() & IMG_JPG) {
|
||||||
$this->resource = imagecreatefromjpeg($imagepath);
|
$this->resource = imagecreatefromjpeg($imagepath);
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('core', 'OC_Image->loadFromFile, JPG images not supported: '.$imagepath, OC_Log::DEBUG);
|
OC_Log::write('core',
|
||||||
|
'OC_Image->loadFromFile, JPG images not supported: '.$imagepath,
|
||||||
|
OC_Log::DEBUG);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_PNG:
|
case IMAGETYPE_PNG:
|
||||||
if (imagetypes() & IMG_PNG) {
|
if (imagetypes() & IMG_PNG) {
|
||||||
$this->resource = imagecreatefrompng($imagepath);
|
$this->resource = imagecreatefrompng($imagepath);
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('core', 'OC_Image->loadFromFile, PNG images not supported: '.$imagepath, OC_Log::DEBUG);
|
OC_Log::write('core',
|
||||||
|
'OC_Image->loadFromFile, PNG images not supported: '.$imagepath,
|
||||||
|
OC_Log::DEBUG);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_XBM:
|
case IMAGETYPE_XBM:
|
||||||
if (imagetypes() & IMG_XPM) {
|
if (imagetypes() & IMG_XPM) {
|
||||||
$this->resource = imagecreatefromxbm($imagepath);
|
$this->resource = imagecreatefromxbm($imagepath);
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('core', 'OC_Image->loadFromFile, XBM/XPM images not supported: '.$imagepath, OC_Log::DEBUG);
|
OC_Log::write('core',
|
||||||
|
'OC_Image->loadFromFile, XBM/XPM images not supported: '.$imagepath,
|
||||||
|
OC_Log::DEBUG);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_WBMP:
|
case IMAGETYPE_WBMP:
|
||||||
if (imagetypes() & IMG_WBMP) {
|
if (imagetypes() & IMG_WBMP) {
|
||||||
$this->resource = imagecreatefromwbmp($imagepath);
|
$this->resource = imagecreatefromwbmp($imagepath);
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('core', 'OC_Image->loadFromFile, WBMP images not supported: '.$imagepath, OC_Log::DEBUG);
|
OC_Log::write('core',
|
||||||
|
'OC_Image->loadFromFile, WBMP images not supported: '.$imagepath,
|
||||||
|
OC_Log::DEBUG);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_BMP:
|
case IMAGETYPE_BMP:
|
||||||
|
@ -633,7 +645,9 @@ class OC_Image {
|
||||||
$color[1] = $palette[ $color[1] + 1 ];
|
$color[1] = $palette[ $color[1] + 1 ];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING);
|
trigger_error('imagecreatefrombmp: '
|
||||||
|
. $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!',
|
||||||
|
E_USER_WARNING);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
imagesetpixel($im, $x, $y, $color[1]);
|
imagesetpixel($im, $x, $y, $color[1]);
|
||||||
|
@ -739,7 +753,9 @@ class OC_Image {
|
||||||
}
|
}
|
||||||
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height);
|
imagecopyresampled($process, $this->resource, 0, 0, $x, $y, $targetWidth, $targetHeight, $width, $height);
|
||||||
if ($process == false) {
|
if ($process == false) {
|
||||||
OC_Log::write('core', 'OC_Image->centerCrop. Error resampling process image '.$width.'x'.$height, OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'OC_Image->centerCrop. Error resampling process image '.$width.'x'.$height,
|
||||||
|
OC_Log::ERROR);
|
||||||
imagedestroy($process);
|
imagedestroy($process);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,21 +136,29 @@ class OC_Installer{
|
||||||
// check if the app is compatible with this version of ownCloud
|
// check if the app is compatible with this version of ownCloud
|
||||||
$version=OC_Util::getVersion();
|
$version=OC_Util::getVersion();
|
||||||
if(!isset($info['require']) or ($version[0]>$info['require'])) {
|
if(!isset($info['require']) or ($version[0]>$info['require'])) {
|
||||||
OC_Log::write('core', 'App can\'t be installed because it is not compatible with this version of ownCloud', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'App can\'t be installed because it is not compatible with this version of ownCloud',
|
||||||
|
OC_Log::ERROR);
|
||||||
OC_Helper::rmdirr($extractDir);
|
OC_Helper::rmdirr($extractDir);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if shipped tag is set which is only allowed for apps that are shipped with ownCloud
|
// check if shipped tag is set which is only allowed for apps that are shipped with ownCloud
|
||||||
if(isset($info['shipped']) and ($info['shipped']=='true')) {
|
if(isset($info['shipped']) and ($info['shipped']=='true')) {
|
||||||
OC_Log::write('core', 'App can\'t be installed because it contains the <shipped>true</shippe> tag which is not allowed for non shipped apps', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'App can\'t be installed because it contains the <shipped>true</shippe>'
|
||||||
|
.' tag which is not allowed for non shipped apps',
|
||||||
|
OC_Log::ERROR);
|
||||||
OC_Helper::rmdirr($extractDir);
|
OC_Helper::rmdirr($extractDir);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the ocs version is the same as the version in info.xml/version
|
// check if the ocs version is the same as the version in info.xml/version
|
||||||
if(!isset($info['version']) or ($info['version']<>$data['appdata']['version'])) {
|
if(!isset($info['version']) or ($info['version']<>$data['appdata']['version'])) {
|
||||||
OC_Log::write('core', 'App can\'t be installed because the version in info.xml/version is not the same as the version reported from the app store', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'App can\'t be installed because the version in info.xml/version is not the same'
|
||||||
|
.' as the version reported from the app store',
|
||||||
|
OC_Log::ERROR);
|
||||||
OC_Helper::rmdirr($extractDir);
|
OC_Helper::rmdirr($extractDir);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -251,7 +259,8 @@ class OC_Installer{
|
||||||
* -# including appinfo/upgrade.php
|
* -# including appinfo/upgrade.php
|
||||||
* -# setting the installed version
|
* -# setting the installed version
|
||||||
*
|
*
|
||||||
* upgrade.php can determine the current installed version of the app using "OC_Appconfig::getValue($appid, 'installed_version')"
|
* upgrade.php can determine the current installed version of the app using
|
||||||
|
* "OC_Appconfig::getValue($appid, 'installed_version')"
|
||||||
*/
|
*/
|
||||||
public static function updateApp( $app ) {
|
public static function updateApp( $app ) {
|
||||||
$ocsid=OC_Appconfig::getValue( $app, 'ocsid');
|
$ocsid=OC_Appconfig::getValue( $app, 'ocsid');
|
||||||
|
@ -437,7 +446,9 @@ class OC_Installer{
|
||||||
// check if grep is installed
|
// check if grep is installed
|
||||||
$grep = exec('which grep');
|
$grep = exec('which grep');
|
||||||
if($grep=='') {
|
if($grep=='') {
|
||||||
OC_Log::write('core', 'grep not installed. So checking the code of the app "'.$appname.'" was not possible', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'grep not installed. So checking the code of the app "'.$appname.'" was not possible',
|
||||||
|
OC_Log::ERROR);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,7 +458,9 @@ class OC_Installer{
|
||||||
$result = exec($cmd);
|
$result = exec($cmd);
|
||||||
// bad pattern found
|
// bad pattern found
|
||||||
if($result<>'') {
|
if($result<>'') {
|
||||||
OC_Log::write('core', 'App "'.$appname.'" is using a not allowed call "'.$bl.'". Installation refused.', OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
'App "'.$appname.'" is using a not allowed call "'.$bl.'". Installation refused.',
|
||||||
|
OC_Log::ERROR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,9 @@ class OC_Log {
|
||||||
|
|
||||||
// Uncaught exception handler
|
// Uncaught exception handler
|
||||||
public static function onException($exception) {
|
public static function onException($exception) {
|
||||||
self::write('PHP', $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(), self::FATAL);
|
self::write('PHP',
|
||||||
|
$exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(),
|
||||||
|
self::FATAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Recoverable errors handler
|
//Recoverable errors handler
|
||||||
|
|
|
@ -81,7 +81,8 @@ class OC_Log_Owncloud {
|
||||||
$ch = fgetc($handle);
|
$ch = fgetc($handle);
|
||||||
if ($ch == "\n" || $pos == 0) {
|
if ($ch == "\n" || $pos == 0) {
|
||||||
if ($line != '') {
|
if ($line != '') {
|
||||||
// Add the first character if at the start of the file, because it doesn't hit the else in the loop
|
// Add the first character if at the start of the file,
|
||||||
|
// because it doesn't hit the else in the loop
|
||||||
if ($pos == 0) {
|
if ($pos == 0) {
|
||||||
$line = $ch.$line;
|
$line = $ch.$line;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,8 @@ class OC_Mail {
|
||||||
* @param string $bcc
|
* @param string $bcc
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static function send($toaddress,$toname,$subject,$mailtext,$fromaddress,$fromname,$html=0,$altbody='',$ccaddress='',$ccname='', $bcc='') {
|
public static function send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
|
||||||
|
$html=0, $altbody='', $ccaddress='', $ccname='', $bcc='') {
|
||||||
|
|
||||||
$SMTPMODE = OC_Config::getValue( 'mail_smtpmode', 'sendmail' );
|
$SMTPMODE = OC_Config::getValue( 'mail_smtpmode', 'sendmail' );
|
||||||
$SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
|
$SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
|
||||||
|
@ -97,7 +98,9 @@ class OC_Mail {
|
||||||
|
|
||||||
$mailo->Send();
|
$mailo->Send();
|
||||||
unset($mailo);
|
unset($mailo);
|
||||||
OC_Log::write('mail', 'Mail from '.$fromname.' ('.$fromaddress.')'.' to: '.$toname.'('.$toaddress.')'.' subject: '.$subject, OC_Log::DEBUG);
|
OC_Log::write('mail',
|
||||||
|
'Mail from '.$fromname.' ('.$fromaddress.')'.' to: '.$toname.'('.$toaddress.')'.' subject: '.$subject,
|
||||||
|
OC_Log::DEBUG);
|
||||||
} catch (Exception $exception) {
|
} catch (Exception $exception) {
|
||||||
OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR);
|
OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR);
|
||||||
throw($exception);
|
throw($exception);
|
||||||
|
|
|
@ -167,7 +167,19 @@ class OC_Migrate{
|
||||||
self::$content = new OC_Migration_Content( self::$zip );
|
self::$content = new OC_Migration_Content( self::$zip );
|
||||||
// Creates a zip with the owncloud system files
|
// Creates a zip with the owncloud system files
|
||||||
self::$content->addDir( OC::$SERVERROOT . '/', false, '/');
|
self::$content->addDir( OC::$SERVERROOT . '/', false, '/');
|
||||||
foreach (array(".git", "3rdparty", "apps", "core", "files", "l10n", "lib", "ocs", "search", "settings", "tests") as $dir) {
|
foreach (array(
|
||||||
|
".git",
|
||||||
|
"3rdparty",
|
||||||
|
"apps",
|
||||||
|
"core",
|
||||||
|
"files",
|
||||||
|
"l10n",
|
||||||
|
"lib",
|
||||||
|
"ocs",
|
||||||
|
"search",
|
||||||
|
"settings",
|
||||||
|
"tests"
|
||||||
|
) as $dir) {
|
||||||
self::$content->addDir( OC::$SERVERROOT . '/' . $dir, true, "/");
|
self::$content->addDir( OC::$SERVERROOT . '/' . $dir, true, "/");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -245,7 +257,9 @@ class OC_Migrate{
|
||||||
}
|
}
|
||||||
// Import user app data
|
// Import user app data
|
||||||
if(file_exists($extractpath . $json->exporteduser . '/migration.db')) {
|
if(file_exists($extractpath . $json->exporteduser . '/migration.db')) {
|
||||||
if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db', $json, self::$uid ) ) {
|
if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db',
|
||||||
|
$json,
|
||||||
|
self::$uid ) ) {
|
||||||
return json_encode( array( 'success' => false ) );
|
return json_encode( array( 'success' => false ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -553,7 +567,9 @@ class OC_Migrate{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== true ) {
|
if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== true ) {
|
||||||
OC_Log::write('migration', 'Failed to create the zip with error: '.self::$zip->getStatusString(), OC_Log::ERROR);
|
OC_Log::write('migration',
|
||||||
|
'Failed to create the zip with error: '.self::$zip->getStatusString(),
|
||||||
|
OC_Log::ERROR);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
@ -610,7 +626,9 @@ class OC_Migrate{
|
||||||
if( isset( $info->apps->$id ) ) {
|
if( isset( $info->apps->$id ) ) {
|
||||||
// Is the app installed
|
// Is the app installed
|
||||||
if( !OC_App::isEnabled( $id ) ) {
|
if( !OC_App::isEnabled( $id ) ) {
|
||||||
OC_Log::write( 'migration', 'App: ' . $id . ' is not installed, can\'t import data.', OC_Log::INFO );
|
OC_Log::write( 'migration',
|
||||||
|
'App: ' . $id . ' is not installed, can\'t import data.',
|
||||||
|
OC_Log::INFO );
|
||||||
$appsstatus[$id] = 'notsupported';
|
$appsstatus[$id] = 'notsupported';
|
||||||
} else {
|
} else {
|
||||||
// Did it succeed on export?
|
// Did it succeed on export?
|
||||||
|
@ -624,7 +642,9 @@ class OC_Migrate{
|
||||||
// Then do the import
|
// Then do the import
|
||||||
if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) {
|
if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ) {
|
||||||
// Failed to import app
|
// Failed to import app
|
||||||
OC_Log::write( 'migration', 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id, OC_Log::ERROR );
|
OC_Log::write( 'migration',
|
||||||
|
'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id,
|
||||||
|
OC_Log::ERROR );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Add to failed list
|
// Add to failed list
|
||||||
|
|
|
@ -236,7 +236,9 @@ class OC_Migration_Content{
|
||||||
*/
|
*/
|
||||||
public function finish() {
|
public function finish() {
|
||||||
if( !$this->zip->close() ) {
|
if( !$this->zip->close() ) {
|
||||||
OC_Log::write( 'migration', 'Failed to write the zip file with error: '.$this->zip->getStatusString(), OC_Log::ERROR );
|
OC_Log::write( 'migration',
|
||||||
|
'Failed to write the zip file with error: '.$this->zip->getStatusString(),
|
||||||
|
OC_Log::ERROR );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->cleanup();
|
$this->cleanup();
|
||||||
|
|
|
@ -87,7 +87,8 @@ class OC_OCS {
|
||||||
}
|
}
|
||||||
|
|
||||||
$format = self::readData($method, 'format', 'text', '');
|
$format = self::readData($method, 'format', 'text', '');
|
||||||
$txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n";
|
$txt='Invalid query, please check the syntax. API specifications are here:'
|
||||||
|
.' http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n";
|
||||||
$txt.=OC_OCS::getDebugOutput();
|
$txt.=OC_OCS::getDebugOutput();
|
||||||
echo(OC_OCS::generateXml($format, 'failed', 999, $txt));
|
echo(OC_OCS::generateXml($format, 'failed', 999, $txt));
|
||||||
|
|
||||||
|
@ -122,7 +123,8 @@ class OC_OCS {
|
||||||
* @param int $itemsperpage
|
* @param int $itemsperpage
|
||||||
* @return string xml/json
|
* @return string xml/json
|
||||||
*/
|
*/
|
||||||
private static function generateXml($format, $status, $statuscode, $message, $data=array(), $tag='', $tagattribute='', $dimension=-1, $itemscount='', $itemsperpage='') {
|
private static function generateXml($format, $status, $statuscode,
|
||||||
|
$message, $data=array(), $tag='', $tagattribute='', $dimension=-1, $itemscount='', $itemsperpage='') {
|
||||||
if($format=='json') {
|
if($format=='json') {
|
||||||
$json=array();
|
$json=array();
|
||||||
$json['status']=$status;
|
$json['status']=$status;
|
||||||
|
|
|
@ -32,7 +32,8 @@ class OC_OCSClient{
|
||||||
* @brief Get the url of the OCS AppStore server.
|
* @brief Get the url of the OCS AppStore server.
|
||||||
* @returns string of the AppStore server
|
* @returns string of the AppStore server
|
||||||
*
|
*
|
||||||
* This function returns the url of the OCS AppStore server. It´s possible to set it in the config file or it will fallback to the default
|
* This function returns the url of the OCS AppStore server. It´s possible
|
||||||
|
* to set it in the config file or it will fallback to the default
|
||||||
*/
|
*/
|
||||||
private static function getAppStoreURL() {
|
private static function getAppStoreURL() {
|
||||||
$url = OC_Config::getValue('appstoreurl', 'http://api.apps.owncloud.com/v1');
|
$url = OC_Config::getValue('appstoreurl', 'http://api.apps.owncloud.com/v1');
|
||||||
|
@ -42,7 +43,8 @@ class OC_OCSClient{
|
||||||
/**
|
/**
|
||||||
* @brief Get the url of the OCS KB server.
|
* @brief Get the url of the OCS KB server.
|
||||||
* @returns string of the KB server
|
* @returns string of the KB server
|
||||||
* This function returns the url of the OCS knowledge base server. It´s possible to set it in the config file or it will fallback to the default
|
* This function returns the url of the OCS knowledge base server. It´s
|
||||||
|
* possible to set it in the config file or it will fallback to the default
|
||||||
*/
|
*/
|
||||||
private static function getKBURL() {
|
private static function getKBURL() {
|
||||||
$url = OC_Config::getValue('knowledgebaseurl', 'http://api.apps.owncloud.com/v1');
|
$url = OC_Config::getValue('knowledgebaseurl', 'http://api.apps.owncloud.com/v1');
|
||||||
|
@ -109,7 +111,8 @@ class OC_OCSClient{
|
||||||
|
|
||||||
$version='&version='.implode('x', \OC_Util::getVersion());
|
$version='&version='.implode('x', \OC_Util::getVersion());
|
||||||
$filterurl='&filter='.urlencode($filter);
|
$filterurl='&filter='.urlencode($filter);
|
||||||
$url=OC_OCSClient::getAppStoreURL().'/content/data?categories='.urlencode($categoriesstring).'&sortmode=new&page='.urlencode($page).'&pagesize=100'.$filterurl.$version;
|
$url=OC_OCSClient::getAppStoreURL().'/content/data?categories='.urlencode($categoriesstring)
|
||||||
|
.'&sortmode=new&page='.urlencode($page).'&pagesize=100'.$filterurl.$version;
|
||||||
$apps=array();
|
$apps=array();
|
||||||
$xml=OC_OCSClient::getOCSresponse($url);
|
$xml=OC_OCSClient::getOCSresponse($url);
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,8 @@ class OC_Preferences{
|
||||||
*/
|
*/
|
||||||
public static function getValue( $user, $app, $key, $default = null ) {
|
public static function getValue( $user, $app, $key, $default = null ) {
|
||||||
// Try to fetch the value, return default if not exists.
|
// Try to fetch the value, return default if not exists.
|
||||||
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
|
||||||
|
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
||||||
$result = $query->execute( array( $user, $app, $key ));
|
$result = $query->execute( array( $user, $app, $key ));
|
||||||
|
|
||||||
$row = $result->fetchRow();
|
$row = $result->fetchRow();
|
||||||
|
@ -138,16 +139,19 @@ class OC_Preferences{
|
||||||
*/
|
*/
|
||||||
public static function setValue( $user, $app, $key, $value ) {
|
public static function setValue( $user, $app, $key, $value ) {
|
||||||
// Check if the key does exist
|
// Check if the key does exist
|
||||||
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
$query = OC_DB::prepare( 'SELECT `configvalue` FROM `*PREFIX*preferences`'
|
||||||
|
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
||||||
$values=$query->execute(array($user, $app, $key))->fetchAll();
|
$values=$query->execute(array($user, $app, $key))->fetchAll();
|
||||||
$exists=(count($values)>0);
|
$exists=(count($values)>0);
|
||||||
|
|
||||||
if( !$exists ) {
|
if( !$exists ) {
|
||||||
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*preferences` ( `userid`, `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ?, ? )' );
|
$query = OC_DB::prepare( 'INSERT INTO `*PREFIX*preferences`'
|
||||||
|
.' ( `userid`, `appid`, `configkey`, `configvalue` ) VALUES( ?, ?, ?, ? )' );
|
||||||
$query->execute( array( $user, $app, $key, $value ));
|
$query->execute( array( $user, $app, $key, $value ));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
$query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ?'
|
||||||
|
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
||||||
$query->execute( array( $value, $user, $app, $key ));
|
$query->execute( array( $value, $user, $app, $key ));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -164,7 +168,8 @@ class OC_Preferences{
|
||||||
*/
|
*/
|
||||||
public static function deleteKey( $user, $app, $key ) {
|
public static function deleteKey( $user, $app, $key ) {
|
||||||
// No need for more comments
|
// No need for more comments
|
||||||
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
$query = OC_DB::prepare( 'DELETE FROM `*PREFIX*preferences`'
|
||||||
|
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
|
||||||
$query->execute( array( $user, $app, $key ));
|
$query->execute( array( $user, $app, $key ));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -37,7 +37,8 @@ class API {
|
||||||
* @param array $defaults
|
* @param array $defaults
|
||||||
* @param array $requirements
|
* @param array $requirements
|
||||||
*/
|
*/
|
||||||
public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH, $defaults = array(), $requirements = array()){
|
public static function register($method, $url, $action, $app, $authLevel = OC_API::USER_AUTH,
|
||||||
|
$defaults = array(), $requirements = array()){
|
||||||
\OC_API::register($method, $url, $action, $app, $authLevel, $defaults, $requirements);
|
\OC_API::register($method, $url, $action, $app, $authLevel, $defaults, $requirements);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,8 @@
|
||||||
namespace OCP;
|
namespace OCP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides functions to read and write configuration data. configuration can be on a system, application or user level
|
* This class provides functions to read and write configuration data.
|
||||||
|
* configuration can be on a system, application or user level
|
||||||
*/
|
*/
|
||||||
class Config {
|
class Config {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,7 +31,8 @@
|
||||||
namespace OCP;
|
namespace OCP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides access to the internal filesystem abstraction layer. Use this class exlusively if you want to access files
|
* This class provides access to the internal filesystem abstraction layer. Use
|
||||||
|
* this class exlusively if you want to access files
|
||||||
*/
|
*/
|
||||||
class Files {
|
class Files {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -37,10 +37,17 @@ class Share {
|
||||||
const SHARE_TYPE_REMOTE = 6;
|
const SHARE_TYPE_REMOTE = 6;
|
||||||
|
|
||||||
/** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask
|
/** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask
|
||||||
* Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
|
* Construct permissions for share() and setPermissions with Or (|) e.g.
|
||||||
* Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE)
|
* Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
|
||||||
* Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE
|
*
|
||||||
* Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares
|
* Check if permission is granted with And (&) e.g. Check if delete is
|
||||||
|
* granted: if ($permissions & PERMISSION_DELETE)
|
||||||
|
*
|
||||||
|
* Remove permissions with And (&) and Not (~) e.g. Remove the update
|
||||||
|
* permission: $permissions &= ~PERMISSION_UPDATE
|
||||||
|
*
|
||||||
|
* Apps are required to handle permissions on their own, this class only
|
||||||
|
* stores and manages the permissions of shares
|
||||||
* @see lib/public/constants.php
|
* @see lib/public/constants.php
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -66,14 +73,21 @@ class Share {
|
||||||
public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
|
public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
|
||||||
if (self::isEnabled()) {
|
if (self::isEnabled()) {
|
||||||
if (!isset(self::$backendTypes[$itemType])) {
|
if (!isset(self::$backendTypes[$itemType])) {
|
||||||
self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions);
|
self::$backendTypes[$itemType] = array(
|
||||||
|
'class' => $class,
|
||||||
|
'collectionOf' => $collectionOf,
|
||||||
|
'supportedFileExtensions' => $supportedFileExtensions
|
||||||
|
);
|
||||||
if(count(self::$backendTypes) === 1) {
|
if(count(self::$backendTypes) === 1) {
|
||||||
\OC_Util::addScript('core', 'share');
|
\OC_Util::addScript('core', 'share');
|
||||||
\OC_Util::addStyle('core', 'share');
|
\OC_Util::addStyle('core', 'share');
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
\OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN);
|
\OC_Log::write('OCP\Share',
|
||||||
|
'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class']
|
||||||
|
.' is already registered for '.$itemType,
|
||||||
|
\OC_Log::WARN);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -99,8 +113,10 @@ class Share {
|
||||||
* @param int Number of items to return (optional) Returns all by default
|
* @param int Number of items to return (optional) Returns all by default
|
||||||
* @return Return depends on format
|
* @return Return depends on format
|
||||||
*/
|
*/
|
||||||
public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
|
public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE,
|
||||||
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections);
|
$parameters = null, $limit = -1, $includeCollections = false) {
|
||||||
|
return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
|
||||||
|
$parameters, $limit, $includeCollections);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -110,8 +126,10 @@ class Share {
|
||||||
* @param int Format (optional) Format type must be defined by the backend
|
* @param int Format (optional) Format type must be defined by the backend
|
||||||
* @return Return depends on format
|
* @return Return depends on format
|
||||||
*/
|
*/
|
||||||
public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
|
public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE,
|
||||||
return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections);
|
$parameters = null, $includeCollections = false) {
|
||||||
|
return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
|
||||||
|
$parameters, 1, $includeCollections);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -121,8 +139,10 @@ class Share {
|
||||||
* @param int Format (optional) Format type must be defined by the backend
|
* @param int Format (optional) Format type must be defined by the backend
|
||||||
* @return Return depends on format
|
* @return Return depends on format
|
||||||
*/
|
*/
|
||||||
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
|
public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE,
|
||||||
return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true);
|
$parameters = null, $includeCollections = false) {
|
||||||
|
return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format,
|
||||||
|
$parameters, 1, $includeCollections, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -133,7 +153,8 @@ class Share {
|
||||||
* @return Item
|
* @return Item
|
||||||
*/
|
*/
|
||||||
public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) {
|
public static function getItemSharedWithByLink($itemType, $itemSource, $uidOwner) {
|
||||||
return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1);
|
return self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE,
|
||||||
|
null, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -157,8 +178,10 @@ class Share {
|
||||||
* @param int Number of items to return (optional) Returns all by default
|
* @param int Number of items to return (optional) Returns all by default
|
||||||
* @return Return depends on format
|
* @return Return depends on format
|
||||||
*/
|
*/
|
||||||
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
|
public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null,
|
||||||
return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections);
|
$limit = -1, $includeCollections = false) {
|
||||||
|
return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format,
|
||||||
|
$parameters, $limit, $includeCollections);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -168,8 +191,10 @@ class Share {
|
||||||
* @param int Format (optional) Format type must be defined by the backend
|
* @param int Format (optional) Format type must be defined by the backend
|
||||||
* @return Return depends on format
|
* @return Return depends on format
|
||||||
*/
|
*/
|
||||||
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
|
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
|
||||||
return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections);
|
$parameters = null, $includeCollections = false) {
|
||||||
|
return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format,
|
||||||
|
$parameters, -1, $includeCollections);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -199,14 +224,18 @@ class Share {
|
||||||
if ($sharingPolicy == 'groups_only') {
|
if ($sharingPolicy == 'groups_only') {
|
||||||
$inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
|
$inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
|
||||||
if (empty($inGroup)) {
|
if (empty($inGroup)) {
|
||||||
$message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of';
|
$message = 'Sharing '.$itemSource.' failed, because the user '
|
||||||
|
.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of';
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
throw new \Exception($message);
|
throw new \Exception($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Check if the item source is already shared with the user, either from the same owner or a different user
|
// Check if the item source is already shared with the user, either from the same owner or a different user
|
||||||
if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
|
if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups,
|
||||||
// Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user
|
$shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
|
||||||
|
// Only allow the same share to occur again if it is the same
|
||||||
|
// owner and is not a user share, this use case is for increasing
|
||||||
|
// permissions for a specific user
|
||||||
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
|
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
|
||||||
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
|
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
|
@ -220,14 +249,18 @@ class Share {
|
||||||
throw new \Exception($message);
|
throw new \Exception($message);
|
||||||
}
|
}
|
||||||
if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) {
|
if ($sharingPolicy == 'groups_only' && !\OC_Group::inGroup($uidOwner, $shareWith)) {
|
||||||
$message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith;
|
$message = 'Sharing '.$itemSource.' failed, because '
|
||||||
|
.$uidOwner.' is not a member of the group '.$shareWith;
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
throw new \Exception($message);
|
throw new \Exception($message);
|
||||||
}
|
}
|
||||||
// Check if the item source is already shared with the group, either from the same owner or a different user
|
// Check if the item source is already shared with the group, either from the same owner or a different user
|
||||||
// The check for each user in the group is done inside the put() function
|
// The check for each user in the group is done inside the put() function
|
||||||
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
|
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith,
|
||||||
// Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user
|
null, self::FORMAT_NONE, null, 1, true, true)) {
|
||||||
|
// Only allow the same share to occur again if it is the same
|
||||||
|
// owner and is not a group share, this use case is for increasing
|
||||||
|
// permissions for a specific user
|
||||||
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
|
if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
|
||||||
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
|
$message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
|
@ -242,7 +275,8 @@ class Share {
|
||||||
} else if ($shareType === self::SHARE_TYPE_LINK) {
|
} else if ($shareType === self::SHARE_TYPE_LINK) {
|
||||||
if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
|
if (\OC_Appconfig::getValue('core', 'shareapi_allow_links', 'yes') == 'yes') {
|
||||||
// when updating a link share
|
// when updating a link share
|
||||||
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null, $uidOwner, self::FORMAT_NONE, null, 1)) {
|
if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_LINK, null,
|
||||||
|
$uidOwner, self::FORMAT_NONE, null, 1)) {
|
||||||
// remember old token
|
// remember old token
|
||||||
$oldToken = $checkExists['token'];
|
$oldToken = $checkExists['token'];
|
||||||
//delete the old share
|
//delete the old share
|
||||||
|
@ -262,7 +296,8 @@ class Share {
|
||||||
} else {
|
} else {
|
||||||
$token = \OC_Util::generate_random_bytes(self::TOKEN_LENGTH);
|
$token = \OC_Util::generate_random_bytes(self::TOKEN_LENGTH);
|
||||||
}
|
}
|
||||||
$result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, null, $token);
|
$result = self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions,
|
||||||
|
null, $token);
|
||||||
if ($result) {
|
if ($result) {
|
||||||
return $token;
|
return $token;
|
||||||
} else {
|
} else {
|
||||||
|
@ -341,7 +376,8 @@ class Share {
|
||||||
* @return Returns true on success or false on failure
|
* @return Returns true on success or false on failure
|
||||||
*/
|
*/
|
||||||
public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
|
public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
|
||||||
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) {
|
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(),
|
||||||
|
self::FORMAT_NONE, null, 1)) {
|
||||||
// Pass all the vars we have for now, they may be useful
|
// Pass all the vars we have for now, they may be useful
|
||||||
\OC_Hook::emit('OCP\Share', 'pre_unshare', array(
|
\OC_Hook::emit('OCP\Share', 'pre_unshare', array(
|
||||||
'itemType' => $itemType,
|
'itemType' => $itemType,
|
||||||
|
@ -389,9 +425,16 @@ class Share {
|
||||||
public static function unshareFromSelf($itemType, $itemTarget) {
|
public static function unshareFromSelf($itemType, $itemTarget) {
|
||||||
if ($item = self::getItemSharedWith($itemType, $itemTarget)) {
|
if ($item = self::getItemSharedWith($itemType, $itemTarget)) {
|
||||||
if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
|
if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
|
||||||
// Insert an extra row for the group share and set permission to 0 to prevent it from showing up for the user
|
// Insert an extra row for the group share and set permission
|
||||||
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
|
// to 0 to prevent it from showing up for the user
|
||||||
$query->execute(array($item['item_type'], $item['item_source'], $item['item_target'], $item['id'], self::$shareTypeGroupUserUnique, \OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'], $item['file_target']));
|
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share`'
|
||||||
|
.' (`item_type`, `item_source`, `item_target`, `parent`, `share_type`,'
|
||||||
|
.' `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`)'
|
||||||
|
.' VALUES (?,?,?,?,?,?,?,?,?,?,?)');
|
||||||
|
$query->execute(array($item['item_type'], $item['item_source'], $item['item_target'],
|
||||||
|
$item['id'], self::$shareTypeGroupUserUnique,
|
||||||
|
\OC_User::getUser(), $item['uid_owner'], 0, $item['stime'], $item['file_source'],
|
||||||
|
$item['file_target']));
|
||||||
\OC_DB::insertid('*PREFIX*share');
|
\OC_DB::insertid('*PREFIX*share');
|
||||||
// Delete all reshares by this user of the group share
|
// Delete all reshares by this user of the group share
|
||||||
self::delete($item['id'], true, \OC_User::getUser());
|
self::delete($item['id'], true, \OC_User::getUser());
|
||||||
|
@ -418,13 +461,16 @@ class Share {
|
||||||
* @return Returns true on success or false on failure
|
* @return Returns true on success or false on failure
|
||||||
*/
|
*/
|
||||||
public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
|
public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
|
||||||
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) {
|
if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith,
|
||||||
// Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item
|
\OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) {
|
||||||
|
// Check if this item is a reshare and verify that the permissions
|
||||||
|
// granted don't exceed the parent shared item
|
||||||
if (isset($item['parent'])) {
|
if (isset($item['parent'])) {
|
||||||
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1);
|
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*share` WHERE `id` = ?', 1);
|
||||||
$result = $query->execute(array($item['parent']))->fetchRow();
|
$result = $query->execute(array($item['parent']))->fetchRow();
|
||||||
if (~(int)$result['permissions'] & $permissions) {
|
if (~(int)$result['permissions'] & $permissions) {
|
||||||
$message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser();
|
$message = 'Setting permissions for '.$itemSource.' failed,'
|
||||||
|
.' because the permissions exceed permissions granted to '.\OC_User::getUser();
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
throw new \Exception($message);
|
throw new \Exception($message);
|
||||||
}
|
}
|
||||||
|
@ -441,9 +487,11 @@ class Share {
|
||||||
$parents = array($item['id']);
|
$parents = array($item['id']);
|
||||||
while (!empty($parents)) {
|
while (!empty($parents)) {
|
||||||
$parents = "'".implode("','", $parents)."'";
|
$parents = "'".implode("','", $parents)."'";
|
||||||
$query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
|
$query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share`'
|
||||||
|
.' WHERE `parent` IN ('.$parents.')');
|
||||||
$result = $query->execute();
|
$result = $query->execute();
|
||||||
// Reset parents array, only go through loop again if items are found that need permissions removed
|
// Reset parents array, only go through loop again if
|
||||||
|
// items are found that need permissions removed
|
||||||
$parents = array();
|
$parents = array();
|
||||||
while ($item = $result->fetchRow()) {
|
while ($item = $result->fetchRow()) {
|
||||||
// Check if permissions need to be removed
|
// Check if permissions need to be removed
|
||||||
|
@ -457,7 +505,8 @@ class Share {
|
||||||
// Remove the permissions for all reshares of this item
|
// Remove the permissions for all reshares of this item
|
||||||
if (!empty($ids)) {
|
if (!empty($ids)) {
|
||||||
$ids = "'".implode("','", $ids)."'";
|
$ids = "'".implode("','", $ids)."'";
|
||||||
$query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ? WHERE `id` IN ('.$ids.')');
|
$query = \OC_DB::prepare('UPDATE `*PREFIX*share` SET `permissions` = `permissions` & ?'
|
||||||
|
.' WHERE `id` IN ('.$ids.')');
|
||||||
$query->execute(array($permissions));
|
$query->execute(array($permissions));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -470,7 +519,8 @@ class Share {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setExpirationDate($itemType, $itemSource, $date) {
|
public static function setExpirationDate($itemType, $itemSource, $date) {
|
||||||
if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE, null, -1, false)) {
|
if ($items = self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(),
|
||||||
|
self::FORMAT_NONE, null, -1, false)) {
|
||||||
if (!empty($items)) {
|
if (!empty($items)) {
|
||||||
if ($date == '') {
|
if ($date == '') {
|
||||||
$date = null;
|
$date = null;
|
||||||
|
@ -533,7 +583,8 @@ class Share {
|
||||||
if (!self::getBackend($itemType) instanceof Share_Backend_Collection || $itemType != 'folder') {
|
if (!self::getBackend($itemType) instanceof Share_Backend_Collection || $itemType != 'folder') {
|
||||||
unset($collectionTypes[0]);
|
unset($collectionTypes[0]);
|
||||||
}
|
}
|
||||||
// Return array if collections were found or the item type is a collection itself - collections can be inside collections
|
// Return array if collections were found or the item type is a
|
||||||
|
// collection itself - collections can be inside collections
|
||||||
if (count($collectionTypes) > 0) {
|
if (count($collectionTypes) > 0) {
|
||||||
return $collectionTypes;
|
return $collectionTypes;
|
||||||
}
|
}
|
||||||
|
@ -556,7 +607,9 @@ class Share {
|
||||||
* See public functions getItem(s)... for parameter usage
|
* See public functions getItem(s)... for parameter usage
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) {
|
private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null,
|
||||||
|
$uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1,
|
||||||
|
$includeCollections = false, $itemShareWithBySource = false) {
|
||||||
if (!self::isEnabled()) {
|
if (!self::isEnabled()) {
|
||||||
if ($limit == 1 || (isset($uidOwner) && isset($item))) {
|
if ($limit == 1 || (isset($uidOwner) && isset($item))) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -565,7 +618,8 @@ class Share {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$backend = self::getBackend($itemType);
|
$backend = self::getBackend($itemType);
|
||||||
// Get filesystem root to add it to the file target and remove from the file source, match file_source with the file cache
|
// Get filesystem root to add it to the file target and remove from the
|
||||||
|
// file source, match file_source with the file cache
|
||||||
if ($itemType == 'file' || $itemType == 'folder') {
|
if ($itemType == 'file' || $itemType == 'folder') {
|
||||||
$root = \OC\Files\Filesystem::getRoot();
|
$root = \OC\Files\Filesystem::getRoot();
|
||||||
$where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`';
|
$where = 'INNER JOIN `*PREFIX*filecache` ON `file_source` = `*PREFIX*filecache`.`fileid`';
|
||||||
|
@ -668,7 +722,8 @@ class Share {
|
||||||
}
|
}
|
||||||
if ($limit != -1 && !$includeCollections) {
|
if ($limit != -1 && !$includeCollections) {
|
||||||
if ($shareType == self::$shareTypeUserAndGroups) {
|
if ($shareType == self::$shareTypeUserAndGroups) {
|
||||||
// Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database
|
// Make sure the unique user target is returned if it exists,
|
||||||
|
// unique targets should follow the group share in the database
|
||||||
// If the limit is not 1, the filtering can be done later
|
// If the limit is not 1, the filtering can be done later
|
||||||
$where .= ' ORDER BY `*PREFIX*share`.`id` DESC';
|
$where .= ' ORDER BY `*PREFIX*share`.`id` DESC';
|
||||||
}
|
}
|
||||||
|
@ -684,16 +739,20 @@ class Share {
|
||||||
// TODO Optimize selects
|
// TODO Optimize selects
|
||||||
if ($format == self::FORMAT_STATUSES) {
|
if ($format == self::FORMAT_STATUSES) {
|
||||||
if ($itemType == 'file' || $itemType == 'folder') {
|
if ($itemType == 'file' || $itemType == 'folder') {
|
||||||
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `file_source`, `path`, `expiration`';
|
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`,'
|
||||||
|
.' `share_type`, `file_source`, `path`, `expiration`';
|
||||||
} else {
|
} else {
|
||||||
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`';
|
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (isset($uidOwner)) {
|
if (isset($uidOwner)) {
|
||||||
if ($itemType == 'file' || $itemType == 'folder') {
|
if ($itemType == 'file' || $itemType == 'folder') {
|
||||||
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`, `expiration`, `token`';
|
$select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`,'
|
||||||
|
.' `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`,'
|
||||||
|
.' `expiration`, `token`';
|
||||||
} else {
|
} else {
|
||||||
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`, `stime`, `file_source`, `expiration`, `token`';
|
$select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`,'
|
||||||
|
.' `stime`, `file_source`, `expiration`, `token`';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($fileDependent) {
|
if ($fileDependent) {
|
||||||
|
@ -706,7 +765,9 @@ class Share {
|
||||||
.'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
|
.'`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, '
|
||||||
.'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
|
.'`name`, `mtime`, `mimetype`, `mimepart`, `size`, `encrypted`, `etag`';
|
||||||
} else {
|
} else {
|
||||||
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`, `*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`, `file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`';
|
$select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `item_target`,
|
||||||
|
`*PREFIX*share`.`parent`, `share_type`, `share_with`, `uid_owner`,
|
||||||
|
`file_source`, `path`, `file_target`, `permissions`, `stime`, `expiration`, `token`';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$select = '*';
|
$select = '*';
|
||||||
|
@ -717,7 +778,9 @@ class Share {
|
||||||
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
|
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
|
||||||
$result = $query->execute($queryArgs);
|
$result = $query->execute($queryArgs);
|
||||||
if (\OC_DB::isError($result)) {
|
if (\OC_DB::isError($result)) {
|
||||||
\OC_Log::write('OCP\Share', \OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share',
|
||||||
|
\OC_DB::getErrorMessage($result) . ', select=' . $select . ' where=' . $where,
|
||||||
|
\OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
$items = array();
|
$items = array();
|
||||||
$targets = array();
|
$targets = array();
|
||||||
|
@ -735,7 +798,8 @@ class Share {
|
||||||
} else if (!isset($uidOwner)) {
|
} else if (!isset($uidOwner)) {
|
||||||
// Check if the same target already exists
|
// Check if the same target already exists
|
||||||
if (isset($targets[$row[$column]])) {
|
if (isset($targets[$row[$column]])) {
|
||||||
// Check if the same owner shared with the user twice through a group and user share - this is allowed
|
// Check if the same owner shared with the user twice
|
||||||
|
// through a group and user share - this is allowed
|
||||||
$id = $targets[$row[$column]];
|
$id = $targets[$row[$column]];
|
||||||
if ($items[$id]['uid_owner'] == $row['uid_owner']) {
|
if ($items[$id]['uid_owner'] == $row['uid_owner']) {
|
||||||
// Switch to group share type to ensure resharing conditions aren't bypassed
|
// Switch to group share type to ensure resharing conditions aren't bypassed
|
||||||
|
@ -743,8 +807,10 @@ class Share {
|
||||||
$items[$id]['share_type'] = self::SHARE_TYPE_GROUP;
|
$items[$id]['share_type'] = self::SHARE_TYPE_GROUP;
|
||||||
$items[$id]['share_with'] = $row['share_with'];
|
$items[$id]['share_with'] = $row['share_with'];
|
||||||
}
|
}
|
||||||
// Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing
|
// Switch ids if sharing permission is granted on only
|
||||||
if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE && (int)$row['permissions'] & PERMISSION_SHARE) {
|
// one share to ensure correct parent is used if resharing
|
||||||
|
if (~(int)$items[$id]['permissions'] & PERMISSION_SHARE
|
||||||
|
&& (int)$row['permissions'] & PERMISSION_SHARE) {
|
||||||
$items[$row['id']] = $items[$id];
|
$items[$row['id']] = $items[$id];
|
||||||
$switchedItems[$id] = $row['id'];
|
$switchedItems[$id] = $row['id'];
|
||||||
unset($items[$id]);
|
unset($items[$id]);
|
||||||
|
@ -798,7 +864,8 @@ class Share {
|
||||||
}
|
}
|
||||||
// Check if this is a collection of the requested item type
|
// Check if this is a collection of the requested item type
|
||||||
if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) {
|
if ($includeCollections && $collectionTypes && in_array($row['item_type'], $collectionTypes)) {
|
||||||
if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) {
|
if (($collectionBackend = self::getBackend($row['item_type']))
|
||||||
|
&& $collectionBackend instanceof Share_Backend_Collection) {
|
||||||
// Collections can be inside collections, check if the item is a collection
|
// Collections can be inside collections, check if the item is a collection
|
||||||
if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) {
|
if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) {
|
||||||
$collectionItems[] = $row;
|
$collectionItems[] = $row;
|
||||||
|
@ -825,7 +892,8 @@ class Share {
|
||||||
$meta = \OC\Files\Filesystem::getFileInfo($child['file_path']);
|
$meta = \OC\Files\Filesystem::getFileInfo($child['file_path']);
|
||||||
$childItem['file_source'] = $meta['fileid'];
|
$childItem['file_source'] = $meta['fileid'];
|
||||||
}
|
}
|
||||||
$childItem['file_target'] = \OC\Files\Filesystem::normalizePath($child['file_path']);
|
$childItem['file_target'] =
|
||||||
|
\OC\Files\Filesystem::normalizePath($child['file_path']);
|
||||||
}
|
}
|
||||||
if (isset($item)) {
|
if (isset($item)) {
|
||||||
if ($childItem[$column] == $item) {
|
if ($childItem[$column] == $item) {
|
||||||
|
@ -898,7 +966,8 @@ class Share {
|
||||||
* @param bool|array Parent folder target (optional)
|
* @param bool|array Parent folder target (optional)
|
||||||
* @return bool Returns true on success or false on failure
|
* @return bool Returns true on success or false on failure
|
||||||
*/
|
*/
|
||||||
private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null, $token = null) {
|
private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
|
||||||
|
$permissions, $parentFolder = null, $token = null) {
|
||||||
$backend = self::getBackend($itemType);
|
$backend = self::getBackend($itemType);
|
||||||
// Check if this is a reshare
|
// Check if this is a reshare
|
||||||
if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) {
|
if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) {
|
||||||
|
@ -911,7 +980,8 @@ class Share {
|
||||||
// Check if share permissions is granted
|
// Check if share permissions is granted
|
||||||
if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) {
|
if ((int)$checkReshare['permissions'] & PERMISSION_SHARE) {
|
||||||
if (~(int)$checkReshare['permissions'] & $permissions) {
|
if (~(int)$checkReshare['permissions'] & $permissions) {
|
||||||
$message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner;
|
$message = 'Sharing '.$itemSource
|
||||||
|
.' failed, because the permissions exceed permissions granted to '.$uidOwner;
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
throw new \Exception($message);
|
throw new \Exception($message);
|
||||||
} else {
|
} else {
|
||||||
|
@ -933,7 +1003,8 @@ class Share {
|
||||||
$suggestedItemTarget = null;
|
$suggestedItemTarget = null;
|
||||||
$suggestedFileTarget = null;
|
$suggestedFileTarget = null;
|
||||||
if (!$backend->isValidSource($itemSource, $uidOwner)) {
|
if (!$backend->isValidSource($itemSource, $uidOwner)) {
|
||||||
$message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source';
|
$message = 'Sharing '.$itemSource.' failed, because the sharing backend for '
|
||||||
|
.$itemType.' could not find its source';
|
||||||
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
|
||||||
throw new \Exception($message);
|
throw new \Exception($message);
|
||||||
}
|
}
|
||||||
|
@ -956,14 +1027,18 @@ class Share {
|
||||||
$fileSource = null;
|
$fileSource = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`, `token`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
|
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`,'
|
||||||
|
.' `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`,'
|
||||||
|
.' `file_target`, `token`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)');
|
||||||
// Share with a group
|
// Share with a group
|
||||||
if ($shareType == self::SHARE_TYPE_GROUP) {
|
if ($shareType == self::SHARE_TYPE_GROUP) {
|
||||||
$groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner, $suggestedItemTarget);
|
$groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'],
|
||||||
|
$uidOwner, $suggestedItemTarget);
|
||||||
if (isset($fileSource)) {
|
if (isset($fileSource)) {
|
||||||
if ($parentFolder) {
|
if ($parentFolder) {
|
||||||
if ($parentFolder === true) {
|
if ($parentFolder === true) {
|
||||||
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget);
|
$groupFileTarget = self::generateTarget('file', $filePath, $shareType,
|
||||||
|
$shareWith['group'], $uidOwner, $suggestedFileTarget);
|
||||||
// Set group default file target for future use
|
// Set group default file target for future use
|
||||||
$parentFolders[0]['folder'] = $groupFileTarget;
|
$parentFolders[0]['folder'] = $groupFileTarget;
|
||||||
} else {
|
} else {
|
||||||
|
@ -972,21 +1047,25 @@ class Share {
|
||||||
$parent = $parentFolder[0]['id'];
|
$parent = $parentFolder[0]['id'];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner, $suggestedFileTarget);
|
$groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'],
|
||||||
|
$uidOwner, $suggestedFileTarget);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$groupFileTarget = null;
|
$groupFileTarget = null;
|
||||||
}
|
}
|
||||||
$query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget, $token));
|
$query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType,
|
||||||
|
$shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget, $token));
|
||||||
// Save this id, any extra rows for this group share will need to reference it
|
// Save this id, any extra rows for this group share will need to reference it
|
||||||
$parent = \OC_DB::insertid('*PREFIX*share');
|
$parent = \OC_DB::insertid('*PREFIX*share');
|
||||||
// Loop through all users of this group in case we need to add an extra row
|
// Loop through all users of this group in case we need to add an extra row
|
||||||
foreach ($shareWith['users'] as $uid) {
|
foreach ($shareWith['users'] as $uid) {
|
||||||
$itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedItemTarget, $parent);
|
$itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid,
|
||||||
|
$uidOwner, $suggestedItemTarget, $parent);
|
||||||
if (isset($fileSource)) {
|
if (isset($fileSource)) {
|
||||||
if ($parentFolder) {
|
if ($parentFolder) {
|
||||||
if ($parentFolder === true) {
|
if ($parentFolder === true) {
|
||||||
$fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent);
|
$fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid,
|
||||||
|
$uidOwner, $suggestedFileTarget, $parent);
|
||||||
if ($fileTarget != $groupFileTarget) {
|
if ($fileTarget != $groupFileTarget) {
|
||||||
$parentFolders[$uid]['folder'] = $fileTarget;
|
$parentFolders[$uid]['folder'] = $fileTarget;
|
||||||
}
|
}
|
||||||
|
@ -995,7 +1074,8 @@ class Share {
|
||||||
$parent = $parentFolder[$uid]['id'];
|
$parent = $parentFolder[$uid]['id'];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner, $suggestedFileTarget, $parent);
|
$fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER,
|
||||||
|
$uid, $uidOwner, $suggestedFileTarget, $parent);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$fileTarget = null;
|
$fileTarget = null;
|
||||||
|
@ -1016,7 +1096,9 @@ class Share {
|
||||||
));
|
));
|
||||||
// Insert an extra row for the group share if the item or file target is unique for this user
|
// Insert an extra row for the group share if the item or file target is unique for this user
|
||||||
if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) {
|
if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) {
|
||||||
$query->execute(array($itemType, $itemSource, $itemTarget, $parent, self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token));
|
$query->execute(array($itemType, $itemSource, $itemTarget, $parent,
|
||||||
|
self::$shareTypeGroupUserUnique, $uid, $uidOwner, $permissions, time(),
|
||||||
|
$fileSource, $fileTarget, $token));
|
||||||
$id = \OC_DB::insertid('*PREFIX*share');
|
$id = \OC_DB::insertid('*PREFIX*share');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1025,23 +1107,27 @@ class Share {
|
||||||
return $parentFolders;
|
return $parentFolders;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedItemTarget);
|
$itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
|
||||||
|
$suggestedItemTarget);
|
||||||
if (isset($fileSource)) {
|
if (isset($fileSource)) {
|
||||||
if ($parentFolder) {
|
if ($parentFolder) {
|
||||||
if ($parentFolder === true) {
|
if ($parentFolder === true) {
|
||||||
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget);
|
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith,
|
||||||
|
$uidOwner, $suggestedFileTarget);
|
||||||
$parentFolders['folder'] = $fileTarget;
|
$parentFolders['folder'] = $fileTarget;
|
||||||
} else {
|
} else {
|
||||||
$fileTarget = $parentFolder['folder'].$itemSource;
|
$fileTarget = $parentFolder['folder'].$itemSource;
|
||||||
$parent = $parentFolder['id'];
|
$parent = $parentFolder['id'];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner, $suggestedFileTarget);
|
$fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner,
|
||||||
|
$suggestedFileTarget);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$fileTarget = null;
|
$fileTarget = null;
|
||||||
}
|
}
|
||||||
$query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget, $token));
|
$query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner,
|
||||||
|
$permissions, time(), $fileSource, $fileTarget, $token));
|
||||||
$id = \OC_DB::insertid('*PREFIX*share');
|
$id = \OC_DB::insertid('*PREFIX*share');
|
||||||
\OC_Hook::emit('OCP\Share', 'post_shared', array(
|
\OC_Hook::emit('OCP\Share', 'post_shared', array(
|
||||||
'itemType' => $itemType,
|
'itemType' => $itemType,
|
||||||
|
@ -1076,7 +1162,8 @@ class Share {
|
||||||
* @param int The id of the parent group share (optional)
|
* @param int The id of the parent group share (optional)
|
||||||
* @return string Item target
|
* @return string Item target
|
||||||
*/
|
*/
|
||||||
private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) {
|
private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner,
|
||||||
|
$suggestedTarget = null, $groupParent = null) {
|
||||||
$backend = self::getBackend($itemType);
|
$backend = self::getBackend($itemType);
|
||||||
if ($shareType == self::SHARE_TYPE_LINK) {
|
if ($shareType == self::SHARE_TYPE_LINK) {
|
||||||
if (isset($suggestedTarget)) {
|
if (isset($suggestedTarget)) {
|
||||||
|
@ -1143,18 +1230,28 @@ class Share {
|
||||||
// Find similar targets to improve backend's chances to generate a unqiue target
|
// Find similar targets to improve backend's chances to generate a unqiue target
|
||||||
if ($userAndGroups) {
|
if ($userAndGroups) {
|
||||||
if ($column == 'file_target') {
|
if ($column == 'file_target') {
|
||||||
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
|
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
|
||||||
$result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
|
.' WHERE `item_type` IN (\'file\', \'folder\')'
|
||||||
|
.' AND `share_type` IN (?,?,?)'
|
||||||
|
.' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
|
||||||
|
$result = $checkTargets->execute(array(self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP,
|
||||||
|
self::$shareTypeGroupUserUnique));
|
||||||
} else {
|
} else {
|
||||||
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
|
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
|
||||||
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
|
.' WHERE `item_type` = ? AND `share_type` IN (?,?,?)'
|
||||||
|
.' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')');
|
||||||
|
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER,
|
||||||
|
self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ($column == 'file_target') {
|
if ($column == 'file_target') {
|
||||||
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` IN (\'file\', \'folder\') AND `share_type` = ? AND `share_with` = ?');
|
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
|
||||||
|
.' WHERE `item_type` IN (\'file\', \'folder\')'
|
||||||
|
.' AND `share_type` = ? AND `share_with` = ?');
|
||||||
$result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith));
|
$result = $checkTargets->execute(array(self::SHARE_TYPE_GROUP, $shareWith));
|
||||||
} else {
|
} else {
|
||||||
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share` WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?');
|
$checkTargets = \OC_DB::prepare('SELECT `'.$column.'` FROM `*PREFIX*share`'
|
||||||
|
.' WHERE `item_type` = ? AND `share_type` = ? AND `share_with` = ?');
|
||||||
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith));
|
$result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1182,21 +1279,33 @@ class Share {
|
||||||
$parents = array($parent);
|
$parents = array($parent);
|
||||||
while (!empty($parents)) {
|
while (!empty($parents)) {
|
||||||
$parents = "'".implode("','", $parents)."'";
|
$parents = "'".implode("','", $parents)."'";
|
||||||
// Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share
|
// Check the owner on the first search of reshares, useful for
|
||||||
|
// finding and deleting the reshares by a single user of a group share
|
||||||
if (count($ids) == 1 && isset($uidOwner)) {
|
if (count($ids) == 1 && isset($uidOwner)) {
|
||||||
$query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?');
|
$query = \OC_DB::prepare('SELECT `id`, `uid_owner`, `item_type`, `item_target`, `parent`'
|
||||||
|
.' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.') AND `uid_owner` = ?');
|
||||||
$result = $query->execute(array($uidOwner));
|
$result = $query->execute(array($uidOwner));
|
||||||
} else {
|
} else {
|
||||||
$query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner` FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
|
$query = \OC_DB::prepare('SELECT `id`, `item_type`, `item_target`, `parent`, `uid_owner`'
|
||||||
|
.' FROM `*PREFIX*share` WHERE `parent` IN ('.$parents.')');
|
||||||
$result = $query->execute();
|
$result = $query->execute();
|
||||||
}
|
}
|
||||||
// Reset parents array, only go through loop again if items are found
|
// Reset parents array, only go through loop again if items are found
|
||||||
$parents = array();
|
$parents = array();
|
||||||
while ($item = $result->fetchRow()) {
|
while ($item = $result->fetchRow()) {
|
||||||
// Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users
|
// Search for a duplicate parent share, this occurs when an
|
||||||
|
// item is shared to the same user through a group and user or the
|
||||||
|
// same item is shared by different users
|
||||||
$userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner']));
|
$userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner']));
|
||||||
$query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share` WHERE `item_type` = ? AND `item_target` = ? AND `share_type` IN (?,?,?) AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\') AND `uid_owner` != ? AND `id` != ?');
|
$query = \OC_DB::prepare('SELECT `id`, `permissions` FROM `*PREFIX*share`'
|
||||||
$duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow();
|
.' WHERE `item_type` = ?'
|
||||||
|
.' AND `item_target` = ?'
|
||||||
|
.' AND `share_type` IN (?,?,?)'
|
||||||
|
.' AND `share_with` IN (\''.implode('\',\'', $userAndGroups).'\')'
|
||||||
|
.' AND `uid_owner` != ? AND `id` != ?');
|
||||||
|
$duplicateParent = $query->execute(array($item['item_type'], $item['item_target'],
|
||||||
|
self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique,
|
||||||
|
$item['uid_owner'], $item['parent']))->fetchRow();
|
||||||
if ($duplicateParent) {
|
if ($duplicateParent) {
|
||||||
// Change the parent to the other item id if share permission is granted
|
// Change the parent to the other item id if share permission is granted
|
||||||
if ($duplicateParent['permissions'] & PERMISSION_SHARE) {
|
if ($duplicateParent['permissions'] & PERMISSION_SHARE) {
|
||||||
|
@ -1225,7 +1334,8 @@ class Share {
|
||||||
|
|
||||||
public static function post_deleteUser($arguments) {
|
public static function post_deleteUser($arguments) {
|
||||||
// Delete any items shared with the deleted user
|
// Delete any items shared with the deleted user
|
||||||
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*share` WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?');
|
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*share`'
|
||||||
|
.' WHERE `share_with` = ? AND `share_type` = ? OR `share_type` = ?');
|
||||||
$result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique));
|
$result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique));
|
||||||
// Delete any items the deleted user shared
|
// Delete any items the deleted user shared
|
||||||
$query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?');
|
$query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*share` WHERE `uid_owner` = ?');
|
||||||
|
@ -1239,21 +1349,27 @@ class Share {
|
||||||
// Find the group shares and check if the user needs a unique target
|
// Find the group shares and check if the user needs a unique target
|
||||||
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?');
|
$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*share` WHERE `share_type` = ? AND `share_with` = ?');
|
||||||
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid']));
|
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid']));
|
||||||
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`, `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`, `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
|
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*share` (`item_type`, `item_source`,'
|
||||||
|
.' `item_target`, `parent`, `share_type`, `share_with`, `uid_owner`, `permissions`,'
|
||||||
|
.' `stime`, `file_source`, `file_target`) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
|
||||||
while ($item = $result->fetchRow()) {
|
while ($item = $result->fetchRow()) {
|
||||||
if ($item['item_type'] == 'file' || $item['item_type'] == 'file') {
|
if ($item['item_type'] == 'file' || $item['item_type'] == 'file') {
|
||||||
$itemTarget = null;
|
$itemTarget = null;
|
||||||
} else {
|
} else {
|
||||||
$itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']);
|
$itemTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER,
|
||||||
|
$arguments['uid'], $item['uid_owner'], $item['item_target'], $item['id']);
|
||||||
}
|
}
|
||||||
if (isset($item['file_source'])) {
|
if (isset($item['file_source'])) {
|
||||||
$fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER, $arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']);
|
$fileTarget = self::generateTarget($item['item_type'], $item['item_source'], self::SHARE_TYPE_USER,
|
||||||
|
$arguments['uid'], $item['uid_owner'], $item['file_target'], $item['id']);
|
||||||
} else {
|
} else {
|
||||||
$fileTarget = null;
|
$fileTarget = null;
|
||||||
}
|
}
|
||||||
// Insert an extra row for the group share if the item or file target is unique for this user
|
// Insert an extra row for the group share if the item or file target is unique for this user
|
||||||
if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) {
|
if ($itemTarget != $item['item_target'] || $fileTarget != $item['file_target']) {
|
||||||
$query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'], self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'], $item['stime'], $item['file_source'], $fileTarget));
|
$query->execute(array($item['item_type'], $item['item_source'], $itemTarget, $item['id'],
|
||||||
|
self::$shareTypeGroupUserUnique, $arguments['uid'], $item['uid_owner'], $item['permissions'],
|
||||||
|
$item['stime'], $item['file_source'], $fileTarget));
|
||||||
\OC_DB::insertid('*PREFIX*share');
|
\OC_DB::insertid('*PREFIX*share');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1261,8 +1377,10 @@ class Share {
|
||||||
|
|
||||||
public static function post_removeFromGroup($arguments) {
|
public static function post_removeFromGroup($arguments) {
|
||||||
// TODO Don't call if user deleted?
|
// TODO Don't call if user deleted?
|
||||||
$query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share` WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)');
|
$query = \OC_DB::prepare('SELECT `id`, `share_type` FROM `*PREFIX*share`'
|
||||||
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid']));
|
.' WHERE (`share_type` = ? AND `share_with` = ?) OR (`share_type` = ? AND `share_with` = ?)');
|
||||||
|
$result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique,
|
||||||
|
$arguments['uid']));
|
||||||
while ($item = $result->fetchRow()) {
|
while ($item = $result->fetchRow()) {
|
||||||
if ($item['share_type'] == self::SHARE_TYPE_GROUP) {
|
if ($item['share_type'] == self::SHARE_TYPE_GROUP) {
|
||||||
// Delete all reshares by this user of the group share
|
// Delete all reshares by this user of the group share
|
||||||
|
@ -1319,10 +1437,18 @@ interface Share_Backend {
|
||||||
* @param int Format
|
* @param int Format
|
||||||
* @return ?
|
* @return ?
|
||||||
*
|
*
|
||||||
* The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info.
|
* The items array is a 3-dimensional array with the item_source as the
|
||||||
|
* first key and the share id as the second key to an array with the share
|
||||||
|
* info.
|
||||||
|
*
|
||||||
* The key/value pairs included in the share info depend on the function originally called:
|
* The key/value pairs included in the share info depend on the function originally called:
|
||||||
* If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source
|
* If called by getItem(s)Shared: id, item_type, item, item_source,
|
||||||
* If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target
|
* share_type, share_with, permissions, stime, file_source
|
||||||
|
*
|
||||||
|
* If called by getItem(s)SharedWith: id, item_type, item, item_source,
|
||||||
|
* item_target, share_type, share_with, permissions, stime, file_source,
|
||||||
|
* file_target
|
||||||
|
*
|
||||||
* This function allows the backend to control the output of shared items with custom formats.
|
* This function allows the backend to control the output of shared items with custom formats.
|
||||||
* It is only called through calls to the public getItem(s)Shared(With) functions.
|
* It is only called through calls to the public getItem(s)Shared(With) functions.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -99,7 +99,8 @@ function html_select_options($options, $selected, $params=array()) {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides the template system for owncloud. You can use it to load specific templates, add data and generate the html code
|
* This class provides the template system for owncloud. You can use it to load
|
||||||
|
* specific templates, add data and generate the html code
|
||||||
*/
|
*/
|
||||||
class Template extends \OC_Template {
|
class Template extends \OC_Template {
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,8 @@
|
||||||
namespace OCP;
|
namespace OCP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides access to the user management. You can get information about the currently logged in user and the permissions for example
|
* This class provides access to the user management. You can get information
|
||||||
|
* about the currently logged in user and the permissions for example
|
||||||
*/
|
*/
|
||||||
class User {
|
class User {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -59,9 +59,11 @@ class Util {
|
||||||
* @param string $fromname
|
* @param string $fromname
|
||||||
* @param bool $html
|
* @param bool $html
|
||||||
*/
|
*/
|
||||||
public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') {
|
public static function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
|
||||||
|
$html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') {
|
||||||
// call the internal mail class
|
// call the internal mail class
|
||||||
\OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname, $html, $altbody, $ccaddress, $ccname, $bcc);
|
\OC_MAIL::send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
|
||||||
|
$html, $altbody, $ccaddress, $ccname, $bcc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -340,7 +342,8 @@ class Util {
|
||||||
/**
|
/**
|
||||||
* @brief Used to sanitize HTML
|
* @brief Used to sanitize HTML
|
||||||
*
|
*
|
||||||
* This function is used to sanitize HTML and should be applied on any string or array of strings before displaying it on a web page.
|
* This function is used to sanitize HTML and should be applied on any
|
||||||
|
* string or array of strings before displaying it on a web page.
|
||||||
*
|
*
|
||||||
* @param string|array of strings
|
* @param string|array of strings
|
||||||
* @return array with sanitized strings or a single sinitized string, depends on the input parameter.
|
* @return array with sanitized strings or a single sinitized string, depends on the input parameter.
|
||||||
|
|
|
@ -205,7 +205,8 @@ class OC_Setup {
|
||||||
}
|
}
|
||||||
$oldUser=OC_Config::getValue('dbuser', false);
|
$oldUser=OC_Config::getValue('dbuser', false);
|
||||||
|
|
||||||
$query="SELECT user FROM mysql.user WHERE user='$dbuser'"; //this should be enough to check for admin rights in mysql
|
//this should be enough to check for admin rights in mysql
|
||||||
|
$query="SELECT user FROM mysql.user WHERE user='$dbuser'";
|
||||||
if(mysql_query($query, $connection)) {
|
if(mysql_query($query, $connection)) {
|
||||||
//use the admin login data for the new database user
|
//use the admin login data for the new database user
|
||||||
|
|
||||||
|
@ -235,7 +236,8 @@ class OC_Setup {
|
||||||
}
|
}
|
||||||
|
|
||||||
//fill the database if needed
|
//fill the database if needed
|
||||||
$query="select count(*) from information_schema.tables where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';";
|
$query="select count(*) from information_schema.tables'
|
||||||
|
.' where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';";
|
||||||
$result = mysql_query($query, $connection);
|
$result = mysql_query($query, $connection);
|
||||||
if($result) {
|
if($result) {
|
||||||
$row=mysql_fetch_row($result);
|
$row=mysql_fetch_row($result);
|
||||||
|
@ -257,7 +259,8 @@ class OC_Setup {
|
||||||
echo($entry);
|
echo($entry);
|
||||||
}
|
}
|
||||||
$query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'";
|
$query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'";
|
||||||
$result = mysql_query($query, $connection); //this query will fail if there aren't the right permissons, ignore the error
|
//this query will fail if there aren't the right permissons, ignore the error
|
||||||
|
$result = mysql_query($query, $connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function createDBUser($name, $password, $connection) {
|
private static function createDBUser($name, $password, $connection) {
|
||||||
|
@ -407,7 +410,8 @@ class OC_Setup {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace, $username) {
|
private static function setupOCIDatabase($dbhost, $dbuser, $dbpass, $dbname, $dbtableprefix, $dbtablespace,
|
||||||
|
$username) {
|
||||||
$l = self::getTrans();
|
$l = self::getTrans();
|
||||||
$e_host = addslashes($dbhost);
|
$e_host = addslashes($dbhost);
|
||||||
$e_dbname = addslashes($dbname);
|
$e_dbname = addslashes($dbname);
|
||||||
|
@ -424,7 +428,8 @@ class OC_Setup {
|
||||||
}
|
}
|
||||||
//check for roles creation rights in oracle
|
//check for roles creation rights in oracle
|
||||||
|
|
||||||
$query="SELECT count(*) FROM user_role_privs, role_sys_privs WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'";
|
$query="SELECT count(*) FROM user_role_privs, role_sys_privs'
|
||||||
|
.' WHERE user_role_privs.granted_role = role_sys_privs.role AND privilege = 'CREATE ROLE'";
|
||||||
$stmt = oci_parse($connection, $query);
|
$stmt = oci_parse($connection, $query);
|
||||||
if (!$stmt) {
|
if (!$stmt) {
|
||||||
$entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
|
$entry = $l->t('DB Error: "%s"', array(oci_last_error($connection))) . '<br />';
|
||||||
|
@ -641,8 +646,10 @@ class OC_Setup {
|
||||||
header("Location: ".OC::$WEBROOT.'/');
|
header("Location: ".OC::$WEBROOT.'/');
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.');
|
$error = $l->t('Your web server is not yet properly setup to allow files'
|
||||||
$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html');
|
.' synchronization because the WebDAV interface seems to be broken.');
|
||||||
|
$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.',
|
||||||
|
'http://doc.owncloud.org/server/5.0/admin_manual/installation.html');
|
||||||
|
|
||||||
$tmpl = new OC_Template('', 'error', 'guest');
|
$tmpl = new OC_Template('', 'error', 'guest');
|
||||||
$tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false);
|
$tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false);
|
||||||
|
|
|
@ -192,7 +192,13 @@ class OC_Template{
|
||||||
|
|
||||||
// Content Security Policy
|
// Content Security Policy
|
||||||
// If you change the standard policy, please also change it in config.sample.php
|
// If you change the standard policy, please also change it in config.sample.php
|
||||||
$policy = OC_Config::getValue('custom_csp_policy', 'default-src \'self\'; script-src \'self\' \'unsafe-eval\'; style-src \'self\' \'unsafe-inline\'; frame-src *; img-src *; font-src \'self\' data:');
|
$policy = OC_Config::getValue('custom_csp_policy',
|
||||||
|
'default-src \'self\'; '
|
||||||
|
.'script-src \'self\' \'unsafe-eval\'; '
|
||||||
|
.'style-src \'self\' \'unsafe-inline\'; '
|
||||||
|
.'frame-src *; '
|
||||||
|
.'img-src *; '
|
||||||
|
.'font-src \'self\' data:');
|
||||||
header('Content-Security-Policy:'.$policy); // Standard
|
header('Content-Security-Policy:'.$policy); // Standard
|
||||||
header('X-WebKit-CSP:'.$policy); // Older webkit browsers
|
header('X-WebKit-CSP:'.$policy); // Older webkit browsers
|
||||||
|
|
||||||
|
@ -215,7 +221,8 @@ class OC_Template{
|
||||||
$mode='tablet';
|
$mode='tablet';
|
||||||
}elseif(stripos($_SERVER['HTTP_USER_AGENT'], 'iphone')>0) {
|
}elseif(stripos($_SERVER['HTTP_USER_AGENT'], 'iphone')>0) {
|
||||||
$mode='mobile';
|
$mode='mobile';
|
||||||
}elseif((stripos($_SERVER['HTTP_USER_AGENT'], 'N9')>0) and (stripos($_SERVER['HTTP_USER_AGENT'], 'nokia')>0)) {
|
}elseif((stripos($_SERVER['HTTP_USER_AGENT'], 'N9')>0)
|
||||||
|
and (stripos($_SERVER['HTTP_USER_AGENT'], 'nokia')>0)) {
|
||||||
$mode='mobile';
|
$mode='mobile';
|
||||||
}else{
|
}else{
|
||||||
$mode='default';
|
$mode='default';
|
||||||
|
@ -285,7 +292,8 @@ class OC_Template{
|
||||||
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/$app/templates/", $name, $fext)) {
|
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/$app/templates/", $name, $fext)) {
|
||||||
}elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/$app/templates/", $name, $fext)) {
|
}elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/$app/templates/", $name, $fext)) {
|
||||||
}else{
|
}else{
|
||||||
echo('template not found: template:'.$name.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
echo('template not found: template:'.$name.' formfactor:'.$fext
|
||||||
|
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,7 +303,8 @@ class OC_Template{
|
||||||
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/core/templates/", $name, $fext)) {
|
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/core/templates/", $name, $fext)) {
|
||||||
} elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/core/templates/", $name, $fext)) {
|
} elseif ($this->checkPathForTemplate(OC::$SERVERROOT."/core/templates/", $name, $fext)) {
|
||||||
}else{
|
}else{
|
||||||
echo('template not found: template:'.$name.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
echo('template not found: template:'.$name.' formfactor:'.$fext
|
||||||
|
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,8 @@ class OC_TemplateLayout extends OC_Template {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(! $append) {
|
if(! $append) {
|
||||||
echo('css file not found: style:'.$style.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
echo('css file not found: style:'.$style.' formfactor:'.$fext
|
||||||
|
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,7 +203,8 @@ class OC_TemplateLayout extends OC_Template {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(! $append) {
|
if(! $append) {
|
||||||
echo('js file not found: script:'.$script.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
echo('js file not found: script:'.$script.' formfactor:'.$fext
|
||||||
|
.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,9 @@ class OC_Updater{
|
||||||
*/
|
*/
|
||||||
public static function check() {
|
public static function check() {
|
||||||
OC_Appconfig::setValue('core', 'lastupdatedat', microtime(true));
|
OC_Appconfig::setValue('core', 'lastupdatedat', microtime(true));
|
||||||
if(OC_Appconfig::getValue('core', 'installedat', '')=='') OC_Appconfig::setValue('core', 'installedat', microtime(true));
|
if(OC_Appconfig::getValue('core', 'installedat', '')=='') {
|
||||||
|
OC_Appconfig::setValue('core', 'installedat', microtime(true));
|
||||||
|
}
|
||||||
|
|
||||||
$updaterurl='http://apps.owncloud.com/updater.php';
|
$updaterurl='http://apps.owncloud.com/updater.php';
|
||||||
$version=OC_Util::getVersion();
|
$version=OC_Util::getVersion();
|
||||||
|
@ -72,7 +74,9 @@ class OC_Updater{
|
||||||
if(OC_Config::getValue('updatechecker', true)==true) {
|
if(OC_Config::getValue('updatechecker', true)==true) {
|
||||||
$data=OC_Updater::check();
|
$data=OC_Updater::check();
|
||||||
if(isset($data['version']) and $data['version']<>'') {
|
if(isset($data['version']) and $data['version']<>'') {
|
||||||
$txt='<span style="color:#AA0000; font-weight:bold;">'.$l->t('%s is available. Get <a href="%s">more information</a>', array($data['versionstring'], $data['web'])).'</span>';
|
$txt='<span style="color:#AA0000; font-weight:bold;">'
|
||||||
|
.$l->t('%s is available. Get <a href="%s">more information</a>',
|
||||||
|
array($data['versionstring'], $data['web'])).'</span>';
|
||||||
}else{
|
}else{
|
||||||
$txt=$l->t('up to date');
|
$txt=$l->t('up to date');
|
||||||
}
|
}
|
||||||
|
|
13
lib/user.php
13
lib/user.php
|
@ -160,7 +160,8 @@ class OC_User {
|
||||||
// Check the name for bad characters
|
// Check the name for bad characters
|
||||||
// Allowed are: "a-z", "A-Z", "0-9" and "_.@-"
|
// Allowed are: "a-z", "A-Z", "0-9" and "_.@-"
|
||||||
if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $uid )) {
|
if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $uid )) {
|
||||||
throw new Exception('Only the following characters are allowed in a username: "a-z", "A-Z", "0-9", and "_.@-"');
|
throw new Exception('Only the following characters are allowed in a username:'
|
||||||
|
.' "a-z", "A-Z", "0-9", and "_.@-"');
|
||||||
}
|
}
|
||||||
// No empty username
|
// No empty username
|
||||||
if(trim($uid) == '') {
|
if(trim($uid) == '') {
|
||||||
|
@ -588,7 +589,8 @@ class OC_User {
|
||||||
* @param string $userid
|
* @param string $userid
|
||||||
*/
|
*/
|
||||||
public static function enableUser($userid) {
|
public static function enableUser($userid) {
|
||||||
$sql = "DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
|
$sql = "DELETE FROM `*PREFIX*preferences`'
|
||||||
|
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
|
||||||
$stmt = OC_DB::prepare($sql);
|
$stmt = OC_DB::prepare($sql);
|
||||||
if ( ! OC_DB::isError($stmt) ) {
|
if ( ! OC_DB::isError($stmt) ) {
|
||||||
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
|
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
|
||||||
|
@ -606,14 +608,17 @@ class OC_User {
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function isEnabled($userid) {
|
public static function isEnabled($userid) {
|
||||||
$sql = "SELECT `userid` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
|
$sql = "SELECT `userid` FROM `*PREFIX*preferences`'
|
||||||
|
.' WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
|
||||||
$stmt = OC_DB::prepare($sql);
|
$stmt = OC_DB::prepare($sql);
|
||||||
if ( ! OC_DB::isError($stmt) ) {
|
if ( ! OC_DB::isError($stmt) ) {
|
||||||
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
|
$result = $stmt->execute(array($userid, 'core', 'enabled', 'false'));
|
||||||
if ( ! OC_DB::isError($result) ) {
|
if ( ! OC_DB::isError($result) ) {
|
||||||
return $result->numRows() ? false : true;
|
return $result->numRows() ? false : true;
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($result), OC_Log::ERROR);
|
OC_Log::write('OC_User',
|
||||||
|
'could not check if enabled: '. OC_DB::getErrorMessage($result),
|
||||||
|
OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR);
|
OC_Log::write('OC_User', 'could not check if enabled: '. OC_DB::getErrorMessage($stmt), OC_Log::ERROR);
|
||||||
|
|
|
@ -155,7 +155,8 @@ class OC_User_Database extends OC_User_Backend {
|
||||||
*/
|
*/
|
||||||
public function getDisplayNames($search = '', $limit = null, $offset = null) {
|
public function getDisplayNames($search = '', $limit = null, $offset = null) {
|
||||||
$displayNames = array();
|
$displayNames = array();
|
||||||
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset);
|
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users`'
|
||||||
|
.' WHERE LOWER(`displayname`) LIKE LOWER(?)', $limit, $offset);
|
||||||
$result = $query->execute(array($search.'%'));
|
$result = $query->execute(array($search.'%'));
|
||||||
$users = array();
|
$users = array();
|
||||||
while ($row = $result->fetchRow()) {
|
while ($row = $result->fetchRow()) {
|
||||||
|
@ -163,7 +164,8 @@ class OC_User_Database extends OC_User_Backend {
|
||||||
}
|
}
|
||||||
|
|
||||||
// let's see if we can also find some users who don't have a display name yet
|
// let's see if we can also find some users who don't have a display name yet
|
||||||
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users` WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset);
|
$query = OC_DB::prepare('SELECT `uid`, `displayname` FROM `*PREFIX*users`'
|
||||||
|
.' WHERE LOWER(`uid`) LIKE LOWER(?)', $limit, $offset);
|
||||||
$result = $query->execute(array($search.'%'));
|
$result = $query->execute(array($search.'%'));
|
||||||
while ($row = $result->fetchRow()) {
|
while ($row = $result->fetchRow()) {
|
||||||
$displayName = trim($row['displayname'], ' ');
|
$displayName = trim($row['displayname'], ' ');
|
||||||
|
|
90
lib/util.php
90
lib/util.php
|
@ -73,7 +73,8 @@ class OC_Util {
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getVersion() {
|
public static function getVersion() {
|
||||||
// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user
|
// hint: We only can count up. So the internal version number
|
||||||
|
// of ownCloud 4.5 will be 4.90.0. This is not visible to the user
|
||||||
return array(4, 92, 10);
|
return array(4, 92, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +87,9 @@ class OC_Util {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the current installed edition of ownCloud. There is the community edition that just returns an empty string and the enterprise edition that returns "Enterprise".
|
* get the current installed edition of ownCloud. There is the community
|
||||||
|
* edition that just returns an empty string and the enterprise edition
|
||||||
|
* that returns "Enterprise".
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getEditionString() {
|
public static function getEditionString() {
|
||||||
|
@ -166,24 +169,33 @@ class OC_Util {
|
||||||
|
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
//check for database drivers
|
//check for database drivers
|
||||||
if(!(is_callable('sqlite_open') or class_exists('SQLite3')) and !is_callable('mysql_connect') and !is_callable('pg_connect')) {
|
if(!(is_callable('sqlite_open') or class_exists('SQLite3'))
|
||||||
$errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.<br/>', 'hint'=>'');//TODO: sane hint
|
and !is_callable('mysql_connect')
|
||||||
|
and !is_callable('pg_connect')) {
|
||||||
|
$errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.<br/>',
|
||||||
|
'hint'=>'');//TODO: sane hint
|
||||||
$web_server_restart= true;
|
$web_server_restart= true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//common hint for all file permissons error messages
|
//common hint for all file permissons error messages
|
||||||
$permissionsHint="Permissions can usually be fixed by giving the webserver write access to the ownCloud directory";
|
$permissionsHint="Permissions can usually be fixed by giving the webserver write access'
|
||||||
|
.' to the ownCloud directory";
|
||||||
|
|
||||||
// Check if config folder is writable.
|
// Check if config folder is writable.
|
||||||
if(!is_writable(OC::$SERVERROOT."/config/") or !is_readable(OC::$SERVERROOT."/config/")) {
|
if(!is_writable(OC::$SERVERROOT."/config/") or !is_readable(OC::$SERVERROOT."/config/")) {
|
||||||
$errors[]=array('error'=>"Can't write into config directory 'config'", 'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud");
|
$errors[]=array('error'=>"Can't write into config directory 'config'",
|
||||||
|
'hint'=>"You can usually fix this by giving the webserver user write access'
|
||||||
|
.' to the config directory in owncloud");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if there is a writable install folder.
|
// Check if there is a writable install folder.
|
||||||
if(OC_Config::getValue('appstoreenabled', true)) {
|
if(OC_Config::getValue('appstoreenabled', true)) {
|
||||||
if( OC_App::getInstallPath() === null || !is_writable(OC_App::getInstallPath()) || !is_readable(OC_App::getInstallPath()) ) {
|
if( OC_App::getInstallPath() === null
|
||||||
$errors[]=array('error'=>"Can't write into apps directory", 'hint'=>"You can usually fix this by giving the webserver user write access to the apps directory
|
|| !is_writable(OC_App::getInstallPath())
|
||||||
in owncloud or disabling the appstore in the config file.");
|
|| !is_readable(OC_App::getInstallPath()) ) {
|
||||||
|
$errors[]=array('error'=>"Can't write into apps directory",
|
||||||
|
'hint'=>"You can usually fix this by giving the webserver user write access'
|
||||||
|
.' to the apps directory in owncloud or disabling the appstore in the config file.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
|
$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
|
||||||
|
@ -193,53 +205,68 @@ class OC_Util {
|
||||||
if ($success) {
|
if ($success) {
|
||||||
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
|
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
|
||||||
} else {
|
} else {
|
||||||
$errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")", 'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' (in a terminal, use the command 'chown -R www-data:www-data /path/to/your/owncloud/install/data' ");
|
$errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")",
|
||||||
|
'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '"
|
||||||
|
.OC::$SERVERROOT."' (in a terminal, use the command "
|
||||||
|
."'chown -R www-data:www-data /path/to/your/owncloud/install/data' ");
|
||||||
}
|
}
|
||||||
} else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
|
} else if(!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
|
||||||
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>', 'hint'=>$permissionsHint);
|
$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>',
|
||||||
|
'hint'=>$permissionsHint);
|
||||||
} else {
|
} else {
|
||||||
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
|
$errors = array_merge($errors, self::checkDataDirectoryPermissions($CONFIG_DATADIRECTORY));
|
||||||
}
|
}
|
||||||
// check if all required php modules are present
|
// check if all required php modules are present
|
||||||
if(!class_exists('ZipArchive')) {
|
if(!class_exists('ZipArchive')) {
|
||||||
$errors[]=array('error'=>'PHP module zip not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module zip not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!function_exists('mb_detect_encoding')) {
|
if(!function_exists('mb_detect_encoding')) {
|
||||||
$errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!function_exists('ctype_digit')) {
|
if(!function_exists('ctype_digit')) {
|
||||||
$errors[]=array('error'=>'PHP module ctype is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module ctype is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!function_exists('json_encode')) {
|
if(!function_exists('json_encode')) {
|
||||||
$errors[]=array('error'=>'PHP module JSON is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module JSON is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!function_exists('imagepng')) {
|
if(!function_exists('imagepng')) {
|
||||||
$errors[]=array('error'=>'PHP module GD is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module GD is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!function_exists('gzencode')) {
|
if(!function_exists('gzencode')) {
|
||||||
$errors[]=array('error'=>'PHP module zlib is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module zlib is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!function_exists('iconv')) {
|
if(!function_exists('iconv')) {
|
||||||
$errors[]=array('error'=>'PHP module iconv is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module iconv is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!function_exists('simplexml_load_string')) {
|
if(!function_exists('simplexml_load_string')) {
|
||||||
$errors[]=array('error'=>'PHP module SimpleXML is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP module SimpleXML is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(floatval(phpversion())<5.3) {
|
if(floatval(phpversion())<5.3) {
|
||||||
$errors[]=array('error'=>'PHP 5.3 is required.<br/>', 'hint'=>'Please ask your server administrator to update PHP to version 5.3 or higher. PHP 5.2 is no longer supported by ownCloud and the PHP community.');
|
$errors[]=array('error'=>'PHP 5.3 is required.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to update PHP to version 5.3 or higher.'
|
||||||
|
.' PHP 5.2 is no longer supported by ownCloud and the PHP community.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
if(!defined('PDO::ATTR_DRIVER_NAME')) {
|
if(!defined('PDO::ATTR_DRIVER_NAME')) {
|
||||||
$errors[]=array('error'=>'PHP PDO module is not installed.<br/>', 'hint'=>'Please ask your server administrator to install the module.');
|
$errors[]=array('error'=>'PHP PDO module is not installed.<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to install the module.');
|
||||||
$web_server_restart= false;
|
$web_server_restart= false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,14 +275,17 @@ class OC_Util {
|
||||||
$tmpDir = session_save_path();
|
$tmpDir = session_save_path();
|
||||||
if($tmpDir != "") {
|
if($tmpDir != "") {
|
||||||
if(!@is_writable($tmpDir)) {
|
if(!@is_writable($tmpDir)) {
|
||||||
$errors[]=array('error' => 'The temporary folder used by PHP to save the session data is either incorrect or not writable! Please check : '.session_save_path().'<br/>',
|
$errors[]=array('error' => 'The temporary folder used by PHP to save the session data'
|
||||||
'hint'=>'Please ask your server administrator to grant write access or define another temporary folder.');
|
.' is either incorrect or not writable! Please check : '.session_save_path().'<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to grant write access'
|
||||||
|
.' or define another temporary folder.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($web_server_restart) {
|
if($web_server_restart) {
|
||||||
$errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>', 'hint'=>'Please ask your server administrator to restart the web server.');
|
$errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>',
|
||||||
|
'hint'=>'Please ask your server administrator to restart the web server.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $errors;
|
return $errors;
|
||||||
|
@ -270,14 +300,16 @@ class OC_Util {
|
||||||
if (stristr(PHP_OS, 'WIN')) {
|
if (stristr(PHP_OS, 'WIN')) {
|
||||||
//TODO: permissions checks for windows hosts
|
//TODO: permissions checks for windows hosts
|
||||||
} else {
|
} else {
|
||||||
$permissionsModHint = 'Please change the permissions to 0770 so that the directory cannot be listed by other users.';
|
$permissionsModHint = 'Please change the permissions to 0770 so that the directory'
|
||||||
|
.' cannot be listed by other users.';
|
||||||
$prems = substr(decoct(@fileperms($dataDirectory)), -3);
|
$prems = substr(decoct(@fileperms($dataDirectory)), -3);
|
||||||
if (substr($prems, -1) != '0') {
|
if (substr($prems, -1) != '0') {
|
||||||
OC_Helper::chmodr($dataDirectory, 0770);
|
OC_Helper::chmodr($dataDirectory, 0770);
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
$prems = substr(decoct(@fileperms($dataDirectory)), -3);
|
$prems = substr(decoct(@fileperms($dataDirectory)), -3);
|
||||||
if (substr($prems, 2, 1) != '0') {
|
if (substr($prems, 2, 1) != '0') {
|
||||||
$errors[] = array('error' => 'Data directory ('.$dataDirectory.') is readable for other users<br/>', 'hint' => $permissionsModHint);
|
$errors[] = array('error' => 'Data directory ('.$dataDirectory.') is readable for other users<br/>',
|
||||||
|
'hint' => $permissionsModHint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -323,7 +355,8 @@ class OC_Util {
|
||||||
public static function checkLoggedIn() {
|
public static function checkLoggedIn() {
|
||||||
// Check if we are a user
|
// Check if we are a user
|
||||||
if( !OC_User::isLoggedIn()) {
|
if( !OC_User::isLoggedIn()) {
|
||||||
header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => OC_Request::requestUri())));
|
header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php',
|
||||||
|
array('redirect_url' => OC_Request::requestUri())));
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -552,7 +585,8 @@ class OC_Util {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the setlocal call doesn't work. This can happen if the right local packages are not available on the server.
|
* Check if the setlocal call doesn't work. This can happen if the right
|
||||||
|
* local packages are not available on the server.
|
||||||
*/
|
*/
|
||||||
public static function issetlocaleworking() {
|
public static function issetlocaleworking() {
|
||||||
// setlocale test is pointless on Windows
|
// setlocale test is pointless on Windows
|
||||||
|
|
|
@ -689,7 +689,9 @@ class OC_VCategories {
|
||||||
$stmt = OCP\DB::prepare($sql);
|
$stmt = OCP\DB::prepare($sql);
|
||||||
$result = $stmt->execute(array($id));
|
$result = $stmt->execute(array($id));
|
||||||
if (OC_DB::isError($result)) {
|
if (OC_DB::isError($result)) {
|
||||||
OC_Log::write('core', __METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result), OC_Log::ERROR);
|
OC_Log::write('core',
|
||||||
|
__METHOD__. 'DB error: ' . OC_DB::getErrorMessage($result),
|
||||||
|
OC_Log::ERROR);
|
||||||
}
|
}
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
|
OCP\Util::writeLog('core', __METHOD__.', exception: '.$e->getMessage(),
|
||||||
|
|
Loading…
Reference in New Issue