summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorTom Needham <needham.thomas@gmail.com>2012-01-08 16:45:28 +0000
committerTom Needham <needham.thomas@gmail.com>2012-01-08 16:45:28 +0000
commite5d3666280aa98d9e12990aff7b2b360d71d3db0 (patch)
treec5aad61af0ba23e0d90cf6f41cb0764eabfb86a8 /lib
parent6dcabdc61c20ab926af15411c326d13cd49f041b (diff)
parented5fb902bd1391d2fc2adb3c4e5cb25fcb16b93e (diff)
downloadnextcloud-server-e5d3666280aa98d9e12990aff7b2b360d71d3db0.tar.gz
nextcloud-server-e5d3666280aa98d9e12990aff7b2b360d71d3db0.zip
Merge branch 'master' of gitorious.org:owncloud/owncloud into jqueryui
Diffstat (limited to 'lib')
-rw-r--r--lib/MDB2/Driver/Manager/sqlite3.php90
-rw-r--r--lib/MDB2/Driver/Reverse/sqlite3.php17
-rw-r--r--lib/app.php42
-rw-r--r--lib/base.php52
-rw-r--r--lib/db.php35
-rw-r--r--lib/image.php94
-rw-r--r--lib/ocsclient.php27
-rw-r--r--lib/setup.php42
-rw-r--r--lib/user.php3
9 files changed, 326 insertions, 76 deletions
diff --git a/lib/MDB2/Driver/Manager/sqlite3.php b/lib/MDB2/Driver/Manager/sqlite3.php
index c5c19a90fb5..8f4e1312eb8 100644
--- a/lib/MDB2/Driver/Manager/sqlite3.php
+++ b/lib/MDB2/Driver/Manager/sqlite3.php
@@ -168,9 +168,6 @@ class MDB2_Driver_Manager_sqlite3 extends MDB2_Driver_Manager_Common
if (PEAR::isError($query_fields)) {
return $query_fields;
}
- if (!empty($options['primary'])) {
- $query_fields.= ', PRIMARY KEY ('.implode(', ', array_keys($options['primary'])).')';
- }
if (!empty($options['foreign_keys'])) {
foreach ($options['foreign_keys'] as $fkname => $fkdef) {
if (empty($fkdef)) {
@@ -534,9 +531,26 @@ class MDB2_Driver_Manager_sqlite3 extends MDB2_Driver_Manager_Common
return MDB2_OK;
}
+ if (empty($changes['remove']) and empty($changes['rename']) and empty($changes['change']) ){//if only rename or add changes are required, we can use ALTER TABLE
+ $query = '';
+ if (!empty($changes['name'])) {
+ $change_name = $db->quoteIdentifier($changes['name'], true);
+ $query = 'RENAME TO ' . $change_name;
+ $db->exec("ALTER TABLE $name $query");
+ }
+
+ if (!empty($changes['add']) && is_array($changes['add'])) {
+ foreach ($changes['add'] as $field_name => $field) {
+ $query= 'ADD ' . $db->getDeclaration($field['type'], $field_name, $field);
+ $db->exec("ALTER TABLE $name $query");
+ }
+ }
+ return MDB2_OK;
+ }
+
$db->loadModule('Reverse', null, true);
- // actually sqlite 2.x supports no ALTER TABLE at all .. so we emulate it
+ // for other operations we need to emulate them with sqlite3
$fields = $db->manager->listTableFields($name);
if (PEAR::isError($fields)) {
return $fields;
@@ -636,44 +650,54 @@ class MDB2_Driver_Manager_sqlite3 extends MDB2_Driver_Manager_Common
}
}
+ //rename the old table so we can create the new one
+ $db->exec("ALTER TABLE $name RENAME TO __$name");
$data = null;
- if (!empty($select_fields)) {
- $query = 'SELECT '.implode(', ', $select_fields).' FROM '.$db->quoteIdentifier($name, true);
- $data = $db->queryAll($query, null, MDB2_FETCHMODE_ORDERED);
- }
- $result = $this->dropTable($name);
- if (PEAR::isError($result)) {
- return $result;
- }
$result = $this->createTable($name_new, $fields, $options);
if (PEAR::isError($result)) {
return $result;
}
- foreach ($indexes as $index => $definition) {
- $this->createIndex($name_new, $index, $definition);
- }
+ //these seem to only give errors
- foreach ($constraints as $constraint => $definition) {
- $this->createConstraint($name_new, $constraint, $definition);
- }
+// foreach ($indexes as $index => $definition) {
+// $this->createIndex($name_new, $index, $definition);
+// }
- if (!empty($select_fields) && !empty($data)) {
- $query = 'INSERT INTO '.$db->quoteIdentifier($name_new, true);
- $query.= '('.implode(', ', array_slice(array_keys($fields), 0, count($select_fields))).')';
- $query.=' VALUES (?'.str_repeat(', ?', (count($select_fields) - 1)).')';
- $stmt =$db->prepare($query, null, MDB2_PREPARE_MANIP);
- if (PEAR::isError($stmt)) {
- return $stmt;
- }
- foreach ($data as $row) {
- $result = $stmt->execute($row);
- if (PEAR::isError($result)) {
- return $result;
- }
- }
+// foreach ($constraints as $constraint => $definition) {
+// $this->createConstraint($name_new, $constraint, $definition);
+// }
+
+ //fill the new table with data from the old one
+ if (!empty($select_fields)) {
+ $query = 'INSERT INTO '.$db->quoteIdentifier($name_new, true);
+ $query.= '('.implode(', ', array_slice(array_keys($fields), 0, count($select_fields))).')';
+ $query .= ' SELECT '.implode(', ', $select_fields).' FROM '.$db->quoteIdentifier('__'.$name, true);
+ $db->exec($query);
+ }
+
+// if (!empty($select_fields) && !empty($data)) {
+// $query = 'INSERT INTO '.$db->quoteIdentifier($name_new, true);
+// $query.= '('.implode(', ', array_slice(array_keys($fields), 0, count($select_fields))).')';
+// $query.=' VALUES (?'.str_repeat(', ?', (count($select_fields) - 1)).')';
+// $stmt =$db->prepare($query, null, MDB2_PREPARE_MANIP);
+// if (PEAR::isError($stmt)) {
+// return $stmt;
+// }
+// foreach ($data as $row) {
+// $result = $stmt->execute($row);
+// if (PEAR::isError($result)) {
+// return $result;
+// }
+// }
+// }
+
+ //remove the old table
+ $result = $this->dropTable('__'.$name);
+ if (PEAR::isError($result)) {
+ return $result;
}
return MDB2_OK;
}
@@ -798,7 +822,7 @@ class MDB2_Driver_Manager_sqlite3 extends MDB2_Driver_Manager_Common
return $db;
}
- $query = "SELECT name FROM sqlite_master WHERE type='table' AND sql NOT NULL ORDER BY name";
+ $query = "SELECT name FROM sqlite_master WHERE type='table' AND sql NOT NULL AND name!='sqlite_sequence' ORDER BY name";
$table_names = $db->queryCol($query);
if (PEAR::isError($table_names)) {
return $table_names;
diff --git a/lib/MDB2/Driver/Reverse/sqlite3.php b/lib/MDB2/Driver/Reverse/sqlite3.php
index d5595da84c5..33e5b590268 100644
--- a/lib/MDB2/Driver/Reverse/sqlite3.php
+++ b/lib/MDB2/Driver/Reverse/sqlite3.php
@@ -69,7 +69,7 @@ class MDB2_Driver_Reverse_sqlite3 extends MDB2_Driver_Reverse_Common
return $db->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
'unexpected empty table column definition list', __FUNCTION__);
}
- $regexp = '/^\s*([^\s]+) +(CHAR|VARCHAR|VARCHAR2|TEXT|BOOLEAN|SMALLINT|INT|INTEGER|DECIMAL|BIGINT|DOUBLE|FLOAT|DATETIME|DATE|TIME|LONGTEXT|LONGBLOB)( ?\(([1-9][0-9]*)(:([1-9][0-9]*))?\))?( NULL| NOT NULL)?( UNSIGNED)?( NULL| NOT NULL)?( PRIMARY KEY)?( DEFAULT (\'[^\']*\'|[^ ]+))?( NULL| NOT NULL)?( PRIMARY KEY)?(\s*\-\-.*)?$/i';
+ $regexp = '/^\s*([^\s]+) +(CHAR|VARCHAR|VARCHAR2|TEXT|BOOLEAN|SMALLINT|INT|INTEGER|DECIMAL|BIGINT|DOUBLE|FLOAT|DATETIME|DATE|TIME|LONGTEXT|LONGBLOB)( ?\(([1-9][0-9]*)(:([1-9][0-9]*))?\))?( NULL| NOT NULL)?( UNSIGNED)?( NULL| NOT NULL)?( PRIMARY KEY)?( AUTOINCREMENT)?( DEFAULT (\'[^\']*\'|[^ ]+))?( NULL| NOT NULL)?( PRIMARY KEY)?(\s*\-\-.*)?$/i';
$regexp2 = '/^\s*([^ ]+) +(PRIMARY|UNIQUE|CHECK)$/i';
for ($i=0, $j=0; $i<$count; ++$i) {
if (!preg_match($regexp, trim($column_sql[$i]), $matches)) {
@@ -90,11 +90,16 @@ class MDB2_Driver_Reverse_sqlite3 extends MDB2_Driver_Reverse_Common
if (isset($matches[8]) && strlen($matches[8])) {
$columns[$j]['unsigned'] = true;
}
- if (isset($matches[9]) && strlen($matches[9])) {
+ if (isset($matches[10]) && strlen($matches[10])) {
$columns[$j]['autoincrement'] = true;
+ $columns[$j]['notnull']=true;
}
- if (isset($matches[12]) && strlen($matches[12])) {
- $default = $matches[12];
+ if (isset($matches[10]) && strlen($matches[10])) {
+ $columns[$j]['autoincrement'] = true;
+ $columns[$j]['notnull']=true;
+ }
+ if (isset($matches[13]) && strlen($matches[13])) {
+ $default = $matches[13];
if (strlen($default) && $default[0]=="'") {
$default = str_replace("''", "'", substr($default, 1, strlen($default)-2));
}
@@ -107,8 +112,8 @@ class MDB2_Driver_Reverse_sqlite3 extends MDB2_Driver_Reverse_Common
$columns[$j]['notnull'] = ($matches[7] === ' NOT NULL');
} else if (isset($matches[9]) && strlen($matches[9])) {
$columns[$j]['notnull'] = ($matches[9] === ' NOT NULL');
- } else if (isset($matches[13]) && strlen($matches[13])) {
- $columns[$j]['notnull'] = ($matches[13] === ' NOT NULL');
+ } else if (isset($matches[14]) && strlen($matches[14])) {
+ $columns[$j]['notnull'] = ($matches[14] === ' NOT NULL');
}
++$j;
}
diff --git a/lib/app.php b/lib/app.php
index b1aa8ba354d..13c4cef32b4 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -94,7 +94,15 @@ class OC_App{
*/
public static function enable( $app ){
if(!OC_Installer::isInstalled($app)){
- OC_Installer::installShippedApp($app);
+ // check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string
+ if(!is_numeric($app)){
+ OC_Installer::installShippedApp($app);
+ }else{
+ $download=OC_OCSClient::getApplicationDownload($app,1);
+ if(isset($download['downloadlink']) and $download['downloadlink']<>'') {
+ OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink']));
+ }
+ }
}
OC_Appconfig::setValue( $app, 'enabled', 'yes' );
}
@@ -107,6 +115,7 @@ class OC_App{
* This function set an app as disabled in appconfig.
*/
public static function disable( $app ){
+ // check if app is a shiped app or not. if not delete
OC_Appconfig::setValue( $app, 'enabled', 'no' );
}
@@ -362,4 +371,35 @@ class OC_App{
}
return $apps;
}
+
+ /**
+ * check if any apps need updating and update those
+ */
+ public static function updateApps(){
+ // The rest comes here
+ $apps = OC_Appconfig::getApps();
+ foreach( $apps as $app ){
+ $installedVersion=OC_Appconfig::getValue($app,'installed_version');
+ $appInfo=OC_App::getAppInfo($app);
+ if (isset($appInfo['version'])) {
+ $currentVersion=$appInfo['version'];
+ if (version_compare($currentVersion, $installedVersion, '>')) {
+ OC_App::updateApp($app);
+ }
+ }
+ }
+ }
+
+ /**
+ * update the database for the app and call the update script
+ * @param string appid
+ */
+ public static function updateApp($appid){
+ if(file_exists(OC::$SERVERROOT.'/apps/'.$appid.'/appinfo/database.xml')){
+ OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/apps/'.$appid.'/appinfo/database.xml');
+ }
+ if(file_exists(OC::$SERVERROOT.'/apps/'.$appid.'/appinfo/update.php')){
+ include OC::$SERVERROOT.'/apps/'.$appid.'/appinfo/update.php';
+ }
+ }
}
diff --git a/lib/base.php b/lib/base.php
index 943ab5f24dc..e0f14b703dc 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -70,6 +70,31 @@ class OC{
}
}
+ /**
+ * autodetects the formfactor of the used device
+ * default -> the normal desktop browser interface
+ * mobile -> interface for smartphones
+ * tablet -> interface for tablets
+ * standalone -> the default interface but without header, footer and sidebar. just the application. useful to ue just a specific app on the desktop in a standalone window.
+ */
+ public static function detectFormfactor(){
+ // please add more useragent strings for other devices
+ if(isset($_SERVER['HTTP_USER_AGENT'])){
+ if(stripos($_SERVER['HTTP_USER_AGENT'],'ipad')>0) {
+ $mode='tablet';
+ }elseif(stripos($_SERVER['HTTP_USER_AGENT'],'iphone')>0){
+ $mode='mobile';
+ }elseif((stripos($_SERVER['HTTP_USER_AGENT'],'N9')>0) and (stripos($_SERVER['HTTP_USER_AGENT'],'nokia')>0)){
+ $mode='mobile';
+ }else{
+ $mode='default';
+ }
+ }else{
+ $mode='default';
+ }
+ return($mode);
+ }
+
public static function init(){
// register autoloader
spl_autoload_register(array('OC','autoload'));
@@ -127,9 +152,30 @@ class OC{
}
}
+ if(OC_Config::getValue('installed', false)){
+ $installedVersion=OC_Config::getValue('version','0.0.0');
+ $currentVersion=implode('.',OC_Util::getVersion());
+ if (version_compare($currentVersion, $installedVersion, '>')) {
+ OC_DB::updateDbFromStructure('../db_structure.xml');
+ OC_Config::setValue('version',implode('.',OC_Util::getVersion()));
+ }
+
+ OC_App::updateApps();
+ }
+
ini_set('session.cookie_httponly','1;');
session_start();
+ // if the formfactor is not yet autodetected do the autodetection now. For possible forfactors check the detectFormfactor documentation
+ if(!isset($_SESSION['formfactor'])){
+ $_SESSION['formfactor']=OC::detectFormfactor();
+ }
+ // allow manual override via GET parameter
+ if(isset($_GET['formfactor'])){
+ $_SESSION['formfactor']=$_GET['formfactor'];
+ }
+
+
// Add the stuff we need always
OC_Util::addScript( "jquery-1.6.4.min" );
OC_Util::addScript( "jquery-ui-1.8.16.custom.min" );
@@ -195,8 +241,6 @@ if( !isset( $RUNTIME_NOAPPS )){
$RUNTIME_NOAPPS = false;
}
-OC::init();
-
if(!function_exists('get_temp_dir')) {
function get_temp_dir() {
if( $temp=ini_get('upload_tmp_dir') ) return $temp;
@@ -212,7 +256,11 @@ if(!function_exists('get_temp_dir')) {
}
}
+OC::init();
+
require_once('fakedirstream.php');
+
+
// FROM search.php
new OC_Search_Provider_File();
diff --git a/lib/db.php b/lib/db.php
index bcfe320665f..b901cc8b513 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -71,7 +71,14 @@ class OC_DB {
/**
* connect to the database using pdo
*/
- private static function connectPDO(){
+ public static function connectPDO(){
+ if(self::$connection){
+ if(self::$backend==self::BACKEND_MDB2){
+ self::disconnect();
+ }else{
+ return;
+ }
+ }
// The global data we need
$name = OC_Config::getValue( "dbname", "owncloud" );
$host = OC_Config::getValue( "dbhost", "" );
@@ -113,7 +120,14 @@ class OC_DB {
/**
* connect to the database using mdb2
*/
- static private function connectMDB2(){
+ public static function connectMDB2(){
+ if(self::$connection){
+ if(self::$backend==self::BACKEND_PDO){
+ self::disconnect();
+ }else{
+ return;
+ }
+ }
// The global data we need
$name = OC_Config::getValue( "dbname", "owncloud" );
$host = OC_Config::getValue( "dbhost", "" );
@@ -255,8 +269,8 @@ class OC_DB {
self::$connection->disconnect();
}
self::$connection=false;
- self::$mdb2=false;
- self::$pdo=false;
+ self::$MDB2=false;
+ self::$PDO=false;
}
return true;
@@ -279,7 +293,7 @@ class OC_DB {
'output' => $file,
'end_of_line' => "\n"
);
- self::$schema->dumpDatabase( $definition, $dump_options, MDB2_SCHEMA_DUMP_STRUCTURE );
+ self::$schema->dumpDatabase( $definition, $dump_options, $mode );
return true;
}
@@ -338,7 +352,6 @@ class OC_DB {
* @param $file file to read structure from
*/
public static function updateDbFromStructure($file){
- $CONFIG_DBNAME = OC_Config::getValue( "dbname", "owncloud" );
$CONFIG_DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
$CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
@@ -347,17 +360,17 @@ class OC_DB {
// read file
$content = file_get_contents( $file );
+ $previousSchema = self::$schema->getDefinitionFromDatabase();
+
// Make changes and save them to a temporary file
$file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
- $content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
+ $content = str_replace( '*dbname*', $previousSchema['name'], $content );
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
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 );
}
file_put_contents( $file2, $content );
- $previousSchema = self::$schema->getDefinitionFromDatabase();
- $op = $schema->updateDatabase($file2, $previousSchema, array(), false);
-
+ $op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
if (PEAR::isError($op)) {
$error = $op->getMessage();
OC_Log::write('core','Failed to update database structure ('.$error.')',OC_Log::FATAL);
@@ -375,6 +388,8 @@ class OC_DB {
private static function connectScheme(){
// We need a mdb2 database connection
self::connectMDB2();
+ self::$MDB2->loadModule('Manager');
+ self::$MDB2->loadModule('Reverse');
// Connect if this did not happen before
if(!self::$schema){
diff --git a/lib/image.php b/lib/image.php
index e09486be081..45b6ad3918d 100644
--- a/lib/image.php
+++ b/lib/image.php
@@ -42,8 +42,7 @@ function ellipsis($str, $maxlen) {
}
/**
- * Class for image manipulation
- * Ideas: imagerotate, chunk_split(base64_encode())
+ * Class for basic image manipulation
*
*/
class OC_Image {
@@ -125,7 +124,7 @@ class OC_Image {
*/
public function save($filepath=null) {
- if($filepath === null && $this->filepath === null) {
+ if($filepath === null && self::$filepath === null) {
OC_Log::write('core','OC_Image::save. save() called with no path.', OC_Log::ERROR);
return false;
} elseif($filepath === null && $this->filepath !== null) {
@@ -138,15 +137,15 @@ class OC_Image {
* @brief Outputs/saves the image.
*/
private function _output($filepath=null, $really=false) {
- header('Content-Type: '.self::mimeType());
if($really === false) {
+ header('Content-Type: '.self::mimeType());
$filepath = null; // Just being cautious ;-)
} else {
if(!is_writable(dirname($filepath))) {
- OC_Log::write('core','OC_Image::save. Directory \''.dirname($filepath).'\' is not writable.', OC_Log::ERROR);
+ OC_Log::write('core','OC_Image::_output. Directory \''.dirname($filepath).'\' is not writable.', OC_Log::ERROR);
return false;
- } elseif(is_writable(dirname($filepath)) && !is_writable($filepath)) {
- OC_Log::write('core','OC_Image::save. File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
+ } elseif(is_writable(dirname($filepath)) && file_exists($filepath) && !is_writable($filepath)) {
+ OC_Log::write('core','OC_Image::_output. File \''.$filepath.'\' is not writable.', OC_Log::ERROR);
return false;
}
}
@@ -201,6 +200,87 @@ class OC_Image {
}
/**
+ * @brief Fixes orientation based on EXIF data.
+ * @returns bool.
+ */
+ public function fixOrientation() {
+ if(!is_resource(self::$resource)) {
+ OC_Log::write('core','OC_Image::fixOrientation() No image loaded.', OC_Log::DEBUG);
+ return false;
+ }
+ if(is_null(self::$filepath) || !is_readable(self::$filepath)) {
+ OC_Log::write('core','OC_Image::fixOrientation() No readable file path set.', OC_Log::DEBUG);
+ return false;
+ }
+ $exif = exif_read_data(self::$filepath, 'IFD0');
+ if(!$exif) {
+ return false;
+ }
+ if(!isset($exif['Orientation'])) {
+ return true; // Nothing to fix
+ }
+ $o = $exif['Orientation'];
+ OC_Log::write('core','OC_Image::fixOrientation() Orientation: '.$o, OC_Log::DEBUG);
+ $rotate = 0;
+ $flip = false;
+ switch($o) {
+ case 1:
+ $rotate = 0;
+ $flip = false;
+ break;
+ case 2: // Not tested
+ $rotate = 0;
+ $flip = true;
+ break;
+ case 3:
+ $rotate = 180;
+ $flip = false;
+ break;
+ case 4: // Not tested
+ $rotate = 180;
+ $flip = true;
+ break;
+ case 5: // Not tested
+ $rotate = 90;
+ $flip = true;
+ break;
+ case 6:
+ //$rotate = 90;
+ $rotate = 270;
+ $flip = false;
+ break;
+ case 7: // Not tested
+ $rotate = 270;
+ $flip = true;
+ break;
+ case 8:
+ $rotate = 270;
+ $flip = false;
+ break;
+ }
+ if($rotate) {
+ $res = imagerotate(self::$resource, $rotate, -1);
+ if($res) {
+ if(imagealphablending($res, true)) {
+ if(imagesavealpha($res, true)) {
+ self::$resource = $res;
+ return true;
+ } else {
+ OC_Log::write('core','OC_Image::fixOrientation() Error during alphasaving.', OC_Log::DEBUG);
+ return false;
+ }
+ } else {
+ OC_Log::write('core','OC_Image::fixOrientation() Error during alphablending.', OC_Log::DEBUG);
+ return false;
+ }
+ } else {
+ OC_Log::write('core','OC_Image::fixOrientation() Error during oriention fixing.', OC_Log::DEBUG);
+ return false;
+ }
+ }
+ }
+
+ /**
* @brief Loads an image from a local file, a base64 encoded string or a resource created by an imagecreate* function.
* @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function.
* If a resource is passed it is the job of the caller to destroy it using imagedestroy($var)
diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index 072fd236fee..9d5932fb720 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -130,6 +130,33 @@ class OC_OCSClient{
return $app;
}
+ /**
+ * @brief Get the download url for an application from the OCS server
+ * @returns array with application data
+ *
+ * This function returns an download url for an applications from the OCS server
+ */
+ public static function getApplicationDownload($id,$item){
+ $url='http://api.apps.owncloud.com/v1/content/download/'.urlencode($id).'/'.urlencode($item);
+
+ $xml=@file_get_contents($url);
+ if($xml==FALSE){
+ OC_Log::write('core','Unable to parse OCS content',OC_Log::FATAL);
+ return NULL;
+ }
+ $data=simplexml_load_string($xml);
+
+ $tmp=$data->data->content;
+ $app=array();
+ if(isset($tmp->downloadlink)) {
+ $app['downloadlink']=$tmp->downloadlink;
+ }else{
+ $app['downloadlink']='';
+ }
+ return $app;
+ }
+
+
/**
* @brief Get all the knowledgebase entries from the OCS server
* @returns array with q and a data
diff --git a/lib/setup.php b/lib/setup.php
index b53c626c9a7..ebe7a45a1f6 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -98,35 +98,45 @@ class OC_Setup {
);
}
else {
+ $oldUser=OC_Config::getValue('dbuser', false);
+ $oldPassword=OC_Config::getValue('dbpassword', false);
+
$query="SELECT user FROM mysql.user WHERE user='$dbuser'"; //this should be enough to check for admin rights in mysql
if(mysql_query($query, $connection)) {
//use the admin login data for the new database user
//add prefix to the mysql user name to prevent collissions
- $dbusername=substr('oc_mysql_'.$username,0,16);
- //hash the password so we don't need to store the admin config in the config file
- $dbpassword=md5(time().$password);
-
- self::createDBUser($dbusername, $dbpassword, $connection);
-
- OC_Config::setValue('dbuser', $dbusername);
- OC_Config::setValue('dbpassword', $dbpassword);
+ $dbusername=substr('oc_'.$username,0,16);
+ if($dbusername!=$oldUser){
+ //hash the password so we don't need to store the admin config in the config file
+ $dbpassword=md5(time().$password);
+
+ self::createDBUser($dbusername, $dbpassword, $connection);
+
+ OC_Config::setValue('dbuser', $dbusername);
+ OC_Config::setValue('dbpassword', $dbpassword);
+ }
//create the database
self::createDatabase($dbname, $dbusername, $connection);
}
else {
- OC_Config::setValue('dbuser', $dbuser);
- OC_Config::setValue('dbpassword', $dbpass);
+ if($dbuser!=$oldUser){
+ OC_Config::setValue('dbuser', $dbuser);
+ OC_Config::setValue('dbpassword', $dbpass);
+ }
//create the database
self::createDatabase($dbname, $dbuser, $connection);
}
//fill the database if needed
- $query="SELECT * FROM $dbname.{$dbtableprefix}users";
+ $query="select count(*) from information_schema.tables where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';";
$result = mysql_query($query,$connection);
- if(!$result) {
+ if($result){
+ $row=mysql_fetch_row($result);
+ }
+ if(!$result or $row[0]==0) {
OC_DB::createDbFromStructure('db_structure.xml');
}
mysql_close($connection);
@@ -160,8 +170,8 @@ class OC_Setup {
//add prefix to the postgresql user name to prevent collissions
$dbusername='oc_'.$username;
- //hash the password so we don't need to store the admin config in the config file
- $dbpassword=md5(time().$password);
+ //create a new password so we don't need to store the admin config in the config file
+ $dbpassword=md5(time());
self::pg_createDBUser($dbusername, $dbpassword, $connection);
@@ -221,7 +231,7 @@ class OC_Setup {
}
public static function createDatabase($name,$user,$connection) {
- //we cant user OC_BD functions here because we need to connect as the administrative user.
+ //we cant use OC_BD functions here because we need to connect as the administrative user.
$query = "CREATE DATABASE IF NOT EXISTS `$name`";
$result = mysql_query($query, $connection);
if(!$result) {
@@ -243,7 +253,7 @@ class OC_Setup {
}
public static function pg_createDatabase($name,$user,$connection) {
- //we cant user OC_BD functions here because we need to connect as the administrative user.
+ //we cant use OC_BD functions here because we need to connect as the administrative user.
$query = "CREATE DATABASE $name OWNER $user";
$result = pg_query($connection, $query);
if(!$result) {
diff --git a/lib/user.php b/lib/user.php
index 0a5881ec0f8..34f44f572e0 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -169,7 +169,8 @@ class OC_User {
foreach( OC_Group::getUserGroups( $uid ) as $i ){
OC_Group::removeFromGroup( $uid, $i );
}
-
+ // Delete the user's keys in preferences
+ OC_Preferences::deleteUser($uid);
// Emit and exit
OC_Hook::emit( "OC_User", "post_deleteUser", array( "uid" => $uid ));
return true;