aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/admin_dependencies_chk/appinfo/app.php2
-rw-r--r--apps/admin_dependencies_chk/appinfo/info.xml1
-rw-r--r--apps/admin_dependencies_chk/appinfo/version1
-rw-r--r--apps/admin_dependencies_chk/settings.php2
-rw-r--r--apps/admin_migrate/appinfo/info.xml1
-rw-r--r--apps/admin_migrate/appinfo/version1
-rw-r--r--apps/bookmarks/appinfo/info.xml1
-rw-r--r--apps/bookmarks/appinfo/version1
-rw-r--r--apps/bookmarks/bookmarksHelper.php2
-rw-r--r--apps/bookmarks/lib/search.php4
-rw-r--r--apps/bookmarks/templates/bookmarklet.php2
-rw-r--r--apps/calendar/ajax/calendar/new.form.php1
-rw-r--r--apps/calendar/ajax/calendar/overview.php2
-rw-r--r--apps/calendar/ajax/event/delete.php2
-rw-r--r--apps/calendar/ajax/event/new.php2
-rwxr-xr-xapps/calendar/ajax/events.php2
-rw-r--r--apps/calendar/ajax/import/dialog.php1
-rwxr-xr-xapps/calendar/ajax/settings/guesstimezone.php2
-rw-r--r--apps/calendar/ajax/settings/settimezone.php2
-rw-r--r--apps/calendar/appinfo/app.php2
-rw-r--r--apps/calendar/appinfo/info.xml1
-rw-r--r--apps/calendar/appinfo/version1
-rw-r--r--apps/calendar/lib/app.php24
-rw-r--r--apps/calendar/lib/search.php4
-rw-r--r--apps/contacts/appinfo/app.php2
-rw-r--r--apps/contacts/appinfo/info.xml1
-rw-r--r--apps/contacts/appinfo/version1
-rw-r--r--apps/contacts/lib/app.php2
-rw-r--r--apps/contacts/lib/search.php4
-rw-r--r--apps/contacts/templates/part.no_contacts.php2
-rw-r--r--apps/external/appinfo/info.xml1
-rw-r--r--apps/external/appinfo/version1
-rw-r--r--apps/files_archive/appinfo/info.xml1
-rw-r--r--apps/files_archive/appinfo/version1
-rw-r--r--apps/files_encryption/appinfo/info.xml1
-rw-r--r--apps/files_encryption/appinfo/version1
-rw-r--r--apps/files_external/appinfo/info.xml1
-rw-r--r--apps/files_external/appinfo/version1
-rw-r--r--apps/files_imageviewer/appinfo/info.xml1
-rw-r--r--apps/files_imageviewer/appinfo/version1
-rwxr-xr-xapps/files_pdfviewer/appinfo/info.xml1
-rw-r--r--apps/files_pdfviewer/appinfo/version1
-rw-r--r--apps/files_sharing/appinfo/info.xml1
-rw-r--r--apps/files_sharing/appinfo/version1
-rw-r--r--apps/files_sharing/get.php2
-rw-r--r--apps/files_sharing/js/share.js13
-rw-r--r--apps/files_texteditor/appinfo/info.xml1
-rw-r--r--apps/files_texteditor/appinfo/version1
-rw-r--r--apps/files_texteditor/js/editor.js42
-rw-r--r--apps/files_versioning/appinfo/info.xml1
-rw-r--r--apps/files_versioning/appinfo/version1
-rw-r--r--apps/gallery/appinfo/app.php6
-rw-r--r--apps/gallery/appinfo/info.xml1
-rw-r--r--apps/gallery/appinfo/version1
-rw-r--r--apps/gallery/templates/index.php2
-rw-r--r--apps/gallery/templates/view_album.php2
-rw-r--r--apps/media/appinfo/app.php2
-rw-r--r--apps/media/appinfo/info.xml1
-rw-r--r--apps/media/appinfo/version1
-rw-r--r--apps/media/lib_media.php4
-rw-r--r--apps/remoteStorage/appinfo/info.xml1
-rw-r--r--apps/remoteStorage/appinfo/version1
-rw-r--r--apps/user_ldap/appinfo/app.php3
-rw-r--r--apps/user_ldap/appinfo/info.xml1
-rw-r--r--apps/user_ldap/appinfo/version1
-rw-r--r--apps/user_ldap/group_ldap.php82
-rw-r--r--apps/user_ldap/lib_ldap.php118
-rw-r--r--apps/user_ldap/tests/group_ldap.php (renamed from lib/connect.php)30
-rw-r--r--apps/user_ldap/user_ldap.php4
-rw-r--r--apps/user_migrate/appinfo/info.xml1
-rw-r--r--apps/user_migrate/appinfo/version1
-rw-r--r--apps/user_openid/appinfo/info.xml1
-rw-r--r--apps/user_openid/appinfo/version1
-rw-r--r--apps/user_webfinger/appinfo/info.xml1
-rw-r--r--apps/user_webfinger/appinfo/version1
-rw-r--r--core/ajax/translations.php2
-rw-r--r--core/css/styles.css5
-rw-r--r--core/js/js.js10
-rw-r--r--core/lostpassword/index.php2
-rw-r--r--core/strings.php2
-rw-r--r--files/ajax/upload.php2
-rw-r--r--files/appinfo/app.php2
-rwxr-xr-xlib/app.php67
-rw-r--r--lib/appconfig.php34
-rw-r--r--lib/db.php40
-rw-r--r--lib/filecache.php34
-rw-r--r--lib/files.php14
-rw-r--r--lib/filesystemview.php8
-rwxr-xr-xlib/helper.php42
-rw-r--r--lib/installer.php4
-rw-r--r--lib/json.php6
-rw-r--r--lib/l10n.php33
-rw-r--r--lib/migrate.php331
-rw-r--r--lib/migration/content.php18
-rw-r--r--lib/migration/provider.php8
-rw-r--r--lib/remote/cloud.php204
-rw-r--r--lib/search.php30
-rw-r--r--lib/search/provider.php6
-rw-r--r--lib/search/provider/file.php4
-rw-r--r--lib/template.php4
-rw-r--r--lib/updater.php4
-rw-r--r--lib/user/database.php2
-rw-r--r--lib/user/dummy.php114
-rw-r--r--lib/util.php2
-rw-r--r--settings/ajax/disableapp.php2
-rw-r--r--settings/ajax/enableapp.php8
-rw-r--r--settings/ajax/lostpassword.php2
-rw-r--r--settings/ajax/openid.php2
-rw-r--r--settings/ajax/setlanguage.php2
-rw-r--r--settings/js/apps.js12
-rwxr-xr-xsettings/personal.php2
-rw-r--r--settings/templates/personal.php6
-rw-r--r--tests/lib/user/backend.php89
-rw-r--r--tests/lib/user/database.php45
-rw-r--r--tests/lib/user/dummy.php27
115 files changed, 1063 insertions, 586 deletions
diff --git a/apps/admin_dependencies_chk/appinfo/app.php b/apps/admin_dependencies_chk/appinfo/app.php
index e2169b5dd77..f282b103c87 100644
--- a/apps/admin_dependencies_chk/appinfo/app.php
+++ b/apps/admin_dependencies_chk/appinfo/app.php
@@ -1,5 +1,5 @@
<?php
-$l=new OC_L10N('admin_dependencies_chk');
+$l=OC_L10N::get('admin_dependencies_chk');
OC_App::register( array(
'order' => 14,
diff --git a/apps/admin_dependencies_chk/appinfo/info.xml b/apps/admin_dependencies_chk/appinfo/info.xml
index a9c1c68c5d4..d5f8bd3783d 100644
--- a/apps/admin_dependencies_chk/appinfo/info.xml
+++ b/apps/admin_dependencies_chk/appinfo/info.xml
@@ -2,7 +2,6 @@
<info>
<id>admin_dependencies_chk</id>
<name>Owncloud dependencies info</name>
- <version>0.01</version>
<licence>AGPL</licence>
<author>Brice Maron (eMerzh)</author>
<require>2</require>
diff --git a/apps/admin_dependencies_chk/appinfo/version b/apps/admin_dependencies_chk/appinfo/version
new file mode 100644
index 00000000000..d1c6331b310
--- /dev/null
+++ b/apps/admin_dependencies_chk/appinfo/version
@@ -0,0 +1 @@
+0.01 \ No newline at end of file
diff --git a/apps/admin_dependencies_chk/settings.php b/apps/admin_dependencies_chk/settings.php
index ce90dd604ca..ea1ce9fb3dc 100644
--- a/apps/admin_dependencies_chk/settings.php
+++ b/apps/admin_dependencies_chk/settings.php
@@ -20,7 +20,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-$l=new OC_L10N('admin_dependencies_chk');
+$l=OC_L10N::get('admin_dependencies_chk');
$tmpl = new OC_Template( 'admin_dependencies_chk', 'settings');
$modules = array();
diff --git a/apps/admin_migrate/appinfo/info.xml b/apps/admin_migrate/appinfo/info.xml
index 67fc3f9c5a0..51721579002 100644
--- a/apps/admin_migrate/appinfo/info.xml
+++ b/apps/admin_migrate/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>admin_migrate</id>
<name>ownCloud Instance Migration</name>
<description>Import/Export your owncloud instance</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Thomas Schmidt and Tom Needham</author>
<require>2</require>
diff --git a/apps/admin_migrate/appinfo/version b/apps/admin_migrate/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/admin_migrate/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/bookmarks/appinfo/info.xml b/apps/bookmarks/appinfo/info.xml
index 862ab805a60..39779483d85 100644
--- a/apps/bookmarks/appinfo/info.xml
+++ b/apps/bookmarks/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>bookmarks</id>
<name>Bookmarks</name>
<description>Bookmark manager for ownCloud</description>
- <version>0.2</version>
<licence>AGPL</licence>
<author>Arthur Schiwon, Marvin Thomas Rabe</author>
<require>2</require>
diff --git a/apps/bookmarks/appinfo/version b/apps/bookmarks/appinfo/version
new file mode 100644
index 00000000000..2f4536184bc
--- /dev/null
+++ b/apps/bookmarks/appinfo/version
@@ -0,0 +1 @@
+0.2 \ No newline at end of file
diff --git a/apps/bookmarks/bookmarksHelper.php b/apps/bookmarks/bookmarksHelper.php
index 7ada69014fb..f1464be79de 100644
--- a/apps/bookmarks/bookmarksHelper.php
+++ b/apps/bookmarks/bookmarksHelper.php
@@ -94,7 +94,7 @@ function addBookmark($url, $title, $tags='') {
}
if(empty($title)) {
- $l = new OC_L10N('bookmarks');
+ $l = OC_L10N::get('bookmarks');
$title = $l->t('unnamed');
}
diff --git a/apps/bookmarks/lib/search.php b/apps/bookmarks/lib/search.php
index 235587855d9..d7e32558617 100644
--- a/apps/bookmarks/lib/search.php
+++ b/apps/bookmarks/lib/search.php
@@ -20,8 +20,8 @@
*
*/
-class OC_Search_Provider_Bookmarks implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_Bookmarks extends OC_Search_Provider{
+ function search($query){
$results=array();
$offset = 0;
diff --git a/apps/bookmarks/templates/bookmarklet.php b/apps/bookmarks/templates/bookmarklet.php
index 5ea67f04df2..f7074462a79 100644
--- a/apps/bookmarks/templates/bookmarklet.php
+++ b/apps/bookmarks/templates/bookmarklet.php
@@ -1,7 +1,7 @@
<?php
function createBookmarklet() {
- $l = new OC_L10N('bookmarks');
+ $l = OC_L10N::get('bookmarks');
echo '<small>' . $l->t('Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:') . '</small>'
. '<a class="bookmarklet" href="javascript:(function(){var a=window,b=document,c=encodeURIComponent,d=a.open(\'' . OC_Helper::linkToAbsolute('bookmarks', 'addBm.php') . '?output=popup&url=\'+c(b.location),\'bkmk_popup\',\'left=\'+((a.screenX||a.screenLeft)+10)+\',top=\'+((a.screenY||a.screenTop)+10)+\',height=230px,width=230px,resizable=1,alwaysRaised=1\');a.setTimeout(function(){d.focus()},300);})();">'
. $l->t('Read later') . '</a>';
diff --git a/apps/calendar/ajax/calendar/new.form.php b/apps/calendar/ajax/calendar/new.form.php
index 6e7423cbe92..fa014351f77 100644
--- a/apps/calendar/ajax/calendar/new.form.php
+++ b/apps/calendar/ajax/calendar/new.form.php
@@ -7,7 +7,6 @@
*/
require_once('../../../../lib/base.php');
-$l10n = new OC_L10N('calendar');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
$calendarcolor_options = OC_Calendar_Calendar::getCalendarColorOptions();
diff --git a/apps/calendar/ajax/calendar/overview.php b/apps/calendar/ajax/calendar/overview.php
index 2f73f5d0710..dd55f3e018f 100644
--- a/apps/calendar/ajax/calendar/overview.php
+++ b/apps/calendar/ajax/calendar/overview.php
@@ -7,7 +7,7 @@
*/
require_once('../../../../lib/base.php');
-$l10n = new OC_L10N('calendar');
+$l10n = OC_L10N::get('calendar');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
$output = new OC_TEMPLATE("calendar", "part.choosecalendar");
diff --git a/apps/calendar/ajax/event/delete.php b/apps/calendar/ajax/event/delete.php
index 6307e1a0f27..fd7b709393a 100644
--- a/apps/calendar/ajax/event/delete.php
+++ b/apps/calendar/ajax/event/delete.php
@@ -17,4 +17,4 @@ if($access != 'owner' && $access != 'rw'){
exit;
}
$result = OC_Calendar_Object::delete($id);
-OC_JSON::success(); \ No newline at end of file
+OC_JSON::success();
diff --git a/apps/calendar/ajax/event/new.php b/apps/calendar/ajax/event/new.php
index 59fda79da73..7070bbf05d7 100644
--- a/apps/calendar/ajax/event/new.php
+++ b/apps/calendar/ajax/event/new.php
@@ -8,8 +8,6 @@
require_once('../../../../lib/base.php');
-$l10n = new OC_L10N('calendar');
-
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php
index fad1097cdce..3c990422f0c 100755
--- a/apps/calendar/ajax/events.php
+++ b/apps/calendar/ajax/events.php
@@ -23,4 +23,4 @@ foreach($events as $event){
}
OC_JSON::encodedPrint($output);
-?> \ No newline at end of file
+?>
diff --git a/apps/calendar/ajax/import/dialog.php b/apps/calendar/ajax/import/dialog.php
index 2e002092150..16ec54d14a2 100644
--- a/apps/calendar/ajax/import/dialog.php
+++ b/apps/calendar/ajax/import/dialog.php
@@ -9,7 +9,6 @@
require_once('../../../../lib/base.php');
OC_JSON::checkLoggedIn();
OC_Util::checkAppEnabled('calendar');
-$l10n = new OC_L10N('calendar');
$tmpl = new OC_Template('calendar', 'part.import');
$tmpl->assign('path', $_POST['path']);
$tmpl->assign('filename', $_POST['filename']);
diff --git a/apps/calendar/ajax/settings/guesstimezone.php b/apps/calendar/ajax/settings/guesstimezone.php
index d45a70e1ce3..c02b8d10b8d 100755
--- a/apps/calendar/ajax/settings/guesstimezone.php
+++ b/apps/calendar/ajax/settings/guesstimezone.php
@@ -10,7 +10,7 @@ require_once('../../../../lib/base.php');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar');
-$l = new OC_L10N('calendar');
+$l = OC_L10N::get('calendar');
$lat = $_GET['lat'];
$lng = $_GET['long'];
diff --git a/apps/calendar/ajax/settings/settimezone.php b/apps/calendar/ajax/settings/settimezone.php
index c639753fe2f..8dda28335f7 100644
--- a/apps/calendar/ajax/settings/settimezone.php
+++ b/apps/calendar/ajax/settings/settimezone.php
@@ -9,7 +9,7 @@
// Init owncloud
require_once('../../../../lib/base.php');
-$l=new OC_L10N('calendar');
+$l=OC_L10N::get('calendar');
// Check if we are a user
OC_JSON::checkLoggedIn();
diff --git a/apps/calendar/appinfo/app.php b/apps/calendar/appinfo/app.php
index b80076fadcb..c895be82838 100644
--- a/apps/calendar/appinfo/app.php
+++ b/apps/calendar/appinfo/app.php
@@ -1,5 +1,5 @@
<?php
-$l=new OC_L10N('calendar');
+$l=OC_L10N::get('calendar');
OC::$CLASSPATH['OC_Calendar_App'] = 'apps/calendar/lib/app.php';
OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php';
OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php';
diff --git a/apps/calendar/appinfo/info.xml b/apps/calendar/appinfo/info.xml
index c38861e1589..101840aa1fa 100644
--- a/apps/calendar/appinfo/info.xml
+++ b/apps/calendar/appinfo/info.xml
@@ -2,7 +2,6 @@
<info>
<id>calendar</id>
<name>Calendar</name>
- <version>0.3</version>
<licence>AGPL</licence>
<author>Georg Ehrke, Bart Visscher, Jakob Sack</author>
<require>2</require>
diff --git a/apps/calendar/appinfo/version b/apps/calendar/appinfo/version
new file mode 100644
index 00000000000..1d71ef97443
--- /dev/null
+++ b/apps/calendar/appinfo/version
@@ -0,0 +1 @@
+0.3 \ No newline at end of file
diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php
index ee1d39bc662..3ce0d6fa1d4 100644
--- a/apps/calendar/lib/app.php
+++ b/apps/calendar/lib/app.php
@@ -17,6 +17,10 @@ class OC_Calendar_App{
* @brief language object for calendar app
*/
public static $l10n;
+
+ /*
+ * @brief categories of the user
+ */
protected static $categories = null;
/*
@@ -107,7 +111,11 @@ class OC_Calendar_App{
}
return true;
}
-
+
+ /*
+ * @brief returns the default categories of ownCloud
+ * @return (array) $categories
+ */
protected static function getDefaultCategories()
{
return array(
@@ -128,14 +136,22 @@ class OC_Calendar_App{
self::$l10n->t('Work'),
);
}
-
+
+ /*
+ * @brief returns the vcategories object of the user
+ * @return (object) $vcategories
+ */
protected static function getVCategories() {
if (is_null(self::$categories)) {
self::$categories = new OC_VCategories('calendar', null, self::getDefaultCategories());
}
return self::$categories;
}
-
+
+ /*
+ * @brief returns the categories of the vcategories object
+ * @return (array) $categories
+ */
public static function getCategoryOptions()
{
$categories = self::getVCategories()->categories();
@@ -402,4 +418,4 @@ class OC_Calendar_App{
}
return $output;
}
-} \ No newline at end of file
+}
diff --git a/apps/calendar/lib/search.php b/apps/calendar/lib/search.php
index 8405866392d..da5fa35bc21 100644
--- a/apps/calendar/lib/search.php
+++ b/apps/calendar/lib/search.php
@@ -1,6 +1,6 @@
<?php
-class OC_Search_Provider_Calendar implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_Calendar extends OC_Search_Provider{
+ function search($query){
$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser(), 1);
if(count($calendars)==0 || !OC_App::isEnabled('calendar')){
//return false;
diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php
index 85c383c4c32..0ff8fd29ef3 100644
--- a/apps/contacts/appinfo/app.php
+++ b/apps/contacts/appinfo/app.php
@@ -20,7 +20,7 @@ OC_App::addNavigationEntry( array(
'order' => 10,
'href' => OC_Helper::linkTo( 'contacts', 'index.php' ),
'icon' => OC_Helper::imagePath( 'settings', 'users.svg' ),
- 'name' => OC_Contacts_App::$l10n->t('Contacts') ));
+ 'name' => OC_L10N::get('contact')->t('Contacts') ));
OC_APP::registerPersonal('contacts','settings');
diff --git a/apps/contacts/appinfo/info.xml b/apps/contacts/appinfo/info.xml
index 0e2b1336006..55ddf42ccc1 100644
--- a/apps/contacts/appinfo/info.xml
+++ b/apps/contacts/appinfo/info.xml
@@ -2,7 +2,6 @@
<info>
<id>contacts</id>
<name>Contacts</name>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Jakob Sack</author>
<require>2</require>
diff --git a/apps/contacts/appinfo/version b/apps/contacts/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/contacts/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php
index 78fdfe6a10a..475d2c8dc2e 100644
--- a/apps/contacts/lib/app.php
+++ b/apps/contacts/lib/app.php
@@ -9,7 +9,7 @@
/**
* This class manages our app actions
*/
-OC_Contacts_App::$l10n = new OC_L10N('contacts');
+OC_Contacts_App::$l10n = OC_L10N::get('contacts');
OC_Contacts_App::$categories = new OC_VCategories('contacts');
class OC_Contacts_App {
public static $l10n;
diff --git a/apps/contacts/lib/search.php b/apps/contacts/lib/search.php
index cf0a5fe6997..31d8542091e 100644
--- a/apps/contacts/lib/search.php
+++ b/apps/contacts/lib/search.php
@@ -1,6 +1,6 @@
<?php
-class OC_Search_Provider_Contacts implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_Contacts extends OC_Search_Provider{
+ function search($query){
$addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1);
// if(count($calendars)==0 || !OC_App::isEnabled('contacts')){
// //return false;
diff --git a/apps/contacts/templates/part.no_contacts.php b/apps/contacts/templates/part.no_contacts.php
index 7024a142aec..6c21511e867 100644
--- a/apps/contacts/templates/part.no_contacts.php
+++ b/apps/contacts/templates/part.no_contacts.php
@@ -1,5 +1,5 @@
<div id="firstrun">
- <?php echo $l->t('You have no contacts in your list.') ?>
+ <?php echo $l->t('You have no contacts in your addressbook.') ?>
<div id="selections">
<input type="button" value="<?php echo $l->t('Import contacts') ?>" onclick="Contacts.UI.Addressbooks.doImport()" />
<input type="button" value="<?php echo $l->t('Add contact') ?>" onclick="Contacts.UI.Card.editNew()" />
diff --git a/apps/external/appinfo/info.xml b/apps/external/appinfo/info.xml
index 05f5709916d..83130f17e62 100644
--- a/apps/external/appinfo/info.xml
+++ b/apps/external/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>external</id>
<name>External</name>
<description>Show external Application in the ownCloud menu</description>
- <version>1.0</version>
<licence>AGPL</licence>
<author>Frank Karlitschek</author>
<require>2</require>
diff --git a/apps/external/appinfo/version b/apps/external/appinfo/version
new file mode 100644
index 00000000000..9f8e9b69a33
--- /dev/null
+++ b/apps/external/appinfo/version
@@ -0,0 +1 @@
+1.0 \ No newline at end of file
diff --git a/apps/files_archive/appinfo/info.xml b/apps/files_archive/appinfo/info.xml
index 236b5a64b05..b04498aa089 100644
--- a/apps/files_archive/appinfo/info.xml
+++ b/apps/files_archive/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_archive</id>
<name>Archive support</name>
<description>Transparent opening of archives</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
diff --git a/apps/files_archive/appinfo/version b/apps/files_archive/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/files_archive/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index 691b265bf60..c2e1aa96043 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_encryption</id>
<name>Encryption</name>
<description>Server side encryption of files</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
diff --git a/apps/files_encryption/appinfo/version b/apps/files_encryption/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/files_encryption/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index fb58297ff17..1918925389d 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_external</id>
<name>External storage support</name>
<description>Mount external storage sources</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
diff --git a/apps/files_external/appinfo/version b/apps/files_external/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/files_external/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/files_imageviewer/appinfo/info.xml b/apps/files_imageviewer/appinfo/info.xml
index 00b55c254dd..dbc78ffba0f 100644
--- a/apps/files_imageviewer/appinfo/info.xml
+++ b/apps/files_imageviewer/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_imageviewer</id>
<name>Image Viewer</name>
<description>Simple image viewer for owncloud</description>
- <version>1.0</version>
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>2</require>
diff --git a/apps/files_imageviewer/appinfo/version b/apps/files_imageviewer/appinfo/version
new file mode 100644
index 00000000000..9f8e9b69a33
--- /dev/null
+++ b/apps/files_imageviewer/appinfo/version
@@ -0,0 +1 @@
+1.0 \ No newline at end of file
diff --git a/apps/files_pdfviewer/appinfo/info.xml b/apps/files_pdfviewer/appinfo/info.xml
index f133f1900d7..0e81729a8bc 100755
--- a/apps/files_pdfviewer/appinfo/info.xml
+++ b/apps/files_pdfviewer/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_pdfviewer</id>
<name>PDF Viewer</name>
<description>Inline PDF viewer (pdfjs-based)</description>
- <version>0.1</version>
<licence>GPL</licence>
<author>Joan Creus</author>
<require>2</require>
diff --git a/apps/files_pdfviewer/appinfo/version b/apps/files_pdfviewer/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/files_pdfviewer/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index 8fda775520b..490ffaca890 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_sharing</id>
<name>Share Files</name>
<description>File sharing between users</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Michael Gapczynski</author>
<require>2</require>
diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/files_sharing/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/files_sharing/get.php b/apps/files_sharing/get.php
index 3a3db6dd38e..fa3535fd144 100644
--- a/apps/files_sharing/get.php
+++ b/apps/files_sharing/get.php
@@ -62,6 +62,8 @@ if ($source !== false) {
$tmpl->assign("fileList", $list->fetchPage());
$tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage());
$tmpl->assign("readonly", true);
+ $tmpl->assign("allowZipDownload", false);
+ $tmpl->assign("dir", 'shared dir');
$tmpl->printPage();
} else {
//get time mimetype and set the headers
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index fc9e17c25c7..54d749d833e 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -2,8 +2,11 @@ $(document).ready(function() {
var shared_status = {};
if (typeof FileActions !== 'undefined') {
FileActions.register('all', 'Share', function(filename) {
- if (scanFiles.scanning){return;}//workaround to prevent aditional http request block scanning feedback
+ if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback
var icon;
+ if (typeof filename == 'undefined') {
+ return false;
+ }
var file = $('#dir').val()+'/'+filename;
if(shared_status[file])
return shared_status[file].icon;
@@ -145,7 +148,7 @@ $(document).ready(function() {
data: data,
success: function(token) {
if (token) {
- showPublicLink(token);
+ showPublicLink(token, source.substr(source.lastIndexOf('/')));
}
}
});
@@ -203,7 +206,7 @@ function createDropdown(filename, files) {
if (users) {
$.each(users, function(index, row) {
if (row.uid_shared_with == 'public') {
- showPublicLink(row.token);
+ showPublicLink(row.token, '/'+filename);
} else if (isNaN(index)) {
addUser(row.uid_shared_with, row.permissions, index.substr(0, index.lastIndexOf('-')));
} else {
@@ -234,9 +237,9 @@ function addUser(uid_shared_with, permissions, parentFolder) {
$(user).appendTo('#shared_list');
}
-function showPublicLink(token) {
+function showPublicLink(token, file) {
$('#makelink').attr('checked', true);
$('#link').data('token', token);
- $('#link').val(parent.location.protocol+'//'+location.host+OC.linkTo('files_sharing','get.php')+'?token='+token);
+ $('#link').val(parent.location.protocol+'//'+location.host+OC.linkTo('files_sharing','get.php')+'?token='+token+'&f='+file);
$('#link').show('blind');
}
diff --git a/apps/files_texteditor/appinfo/info.xml b/apps/files_texteditor/appinfo/info.xml
index da1cdba15dd..83c057f38fd 100644
--- a/apps/files_texteditor/appinfo/info.xml
+++ b/apps/files_texteditor/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>files_texteditor</id>
<name>Text Editor</name>
<description>Simple plain text editor based on Ace editor.</description>
- <version>0.3</version>
<licence>AGPL</licence>
<author>Tom Needham</author>
<require>2</require>
diff --git a/apps/files_texteditor/appinfo/version b/apps/files_texteditor/appinfo/version
new file mode 100644
index 00000000000..1d71ef97443
--- /dev/null
+++ b/apps/files_texteditor/appinfo/version
@@ -0,0 +1 @@
+0.3 \ No newline at end of file
diff --git a/apps/files_texteditor/js/editor.js b/apps/files_texteditor/js/editor.js
index bc8a20408c2..7a47fba4689 100644
--- a/apps/files_texteditor/js/editor.js
+++ b/apps/files_texteditor/js/editor.js
@@ -59,7 +59,7 @@ function setSyntaxMode(ext){
var SyntaxMode = require("ace/mode/"+filetype[ext]).Mode;
window.aceEditor.getSession().setMode(new SyntaxMode());
});
- }
+ }
}
function showControls(filename,writeperms){
@@ -69,17 +69,16 @@ function showControls(filename,writeperms){
if(writeperms=="true"){
editorbarhtml += '<button id="editor_save">'+t('files_texteditor','Save')+'</button><div class="separator"></div>';
}
- editorbarhtml += '<label for="gotolineval">Go to line:</label><input stype="text" id="gotolineval"><label for="editorseachval">Search:</label><input type="text" name="editorsearchval" id="editorsearchval"><div class="separator"></div><button id="editor_close">'+t('files_texteditor','Close')+'</button></div>';
+ editorbarhtml += '<label for="editorseachval">Search:</label><input type="text" name="editorsearchval" id="editorsearchval"><div class="separator"></div><button id="editor_close">'+t('files_texteditor','Close')+'</button></div>';
// Change breadcrumb classes
$('#controls .last').removeClass('last');
$('#controls').append(editorbarhtml);
$('#editorcontrols').fadeIn('slow');
}
-
+
function bindControlEvents(){
- $("#editor_save").die('click',doFileSave).live('click',doFileSave);
+ $("#editor_save").die('click',doFileSave).live('click',doFileSave);
$('#editor_close').die('click',hideFileEditor).live('click',hideFileEditor);
- $('#gotolineval').die('keyup', goToLine).live('keyup', goToLine);
$('#editorsearchval').die('keyup', doSearch).live('keyup', doSearch);
$('#clearsearchbtn').die('click', resetSearch).live('click', resetSearch);
$('#nextsearchbtn').die('click', nextSearchResult).live('click', nextSearchResult);
@@ -91,19 +90,12 @@ function editorIsShown(){
return is_editor_shown;
}
-// Moves the editor view to the line number speificed in #gotolineval
-function goToLine(){
- // Go to the line specified
- window.aceEditor.gotoLine($('#gotolineval').val());
-
-}
-
//resets the search
function resetSearch(){
$('#editorsearchval').val('');
$('#nextsearchbtn').remove();
$('#clearsearchbtn').remove();
- window.aceEditor.gotoLine(0);
+ window.aceEditor.gotoLine(0);
}
// moves the cursor to the next search resukt
@@ -111,10 +103,10 @@ function nextSearchResult(){
window.aceEditor.findNext();
}
// Performs the initial search
-function doSearch(){
+function doSearch(){
// check if search box empty?
if($('#editorsearchval').val()==''){
- // Hide clear button
+ // Hide clear button
window.aceEditor.gotoLine(0);
$('#nextsearchbtn').remove();
$('#clearsearchbtn').remove();
@@ -129,7 +121,7 @@ function doSearch(){
caseSensitive: false,
wholeWord: false,
regExp: false
- });
+ });
// Show next and clear buttons
// check if already there
if($('#nextsearchbtn').length==0){
@@ -161,16 +153,16 @@ function doFileSave(){
// Save failed
$('#editor_save').text(t('files_texteditor','Save'));
$('#editor_save').after('<p id="save_result" style="float: left">Failed to save file</p>');
- $("#editor_save").live('click',doFileSave);
+ $("#editor_save").live('click',doFileSave);
} else {
- // Save OK
+ // Save OK
// Update mtime
$('#editor').attr('data-mtime',jsondata.data.mtime);
- $('#editor_save').text(t('files_texteditor','Save'));
+ $('#editor_save').text(t('files_texteditor','Save'));
$("#editor_save").live('click',doFileSave);
// Update titles
$('#editor').attr('data-edited', 'false');
- $('#breadcrumb_file').text($('#editor').attr('data-filename'));
+ $('#breadcrumb_file').text($('#editor').attr('data-filename'));
document.title = $('#editor').attr('data-filename')+' - ownCloud';
}
},'json');
@@ -223,7 +215,7 @@ function showFileEditor(dir,filename){
window.aceEditor.getSession().on('change', function(){
if($('#editor').attr('data-edited')!='true'){
$('#editor').attr('data-edited', 'true');
- $('#breadcrumb_file').text($('#breadcrumb_file').text()+' *');
+ $('#breadcrumb_file').text($('#breadcrumb_file').text()+' *');
document.title = $('#editor').attr('data-filename')+' * - ownCloud';
}
});
@@ -243,7 +235,7 @@ function showFileEditor(dir,filename){
// Fades out the editor.
function hideFileEditor(){
if($('#editor').attr('data-edited') == 'true'){
- // Hide, not remove
+ // Hide, not remove
$('#editorcontrols').fadeOut('slow',function(){
// Check if there is a folder in the breadcrumb
if($('.crumb.ui-droppable').length){
@@ -255,7 +247,7 @@ function hideFileEditor(){
// Reset document title
document.title = "ownCloud";
$('.actions,#file_access_panel').fadeIn('slow');
- $('table').fadeIn('slow');
+ $('table').fadeIn('slow');
});
$('#notification').text(t('files_texteditor','There were unsaved changes, click here to go back'));
$('#notification').data('reopeneditor',true);
@@ -273,7 +265,7 @@ function hideFileEditor(){
// Reset document title
document.title = "ownCloud";
$('.actions,#file_access_panel').fadeIn('slow');
- $('table').fadeIn('slow');
+ $('table').fadeIn('slow');
});
is_editor_shown = false;
}
@@ -287,7 +279,7 @@ function reopenEditor(){
$('#editor').fadeIn('fast');
$('#editorcontrols').fadeIn('fast', function(){
- });
+ });
});
is_editor_shown = true;
}
diff --git a/apps/files_versioning/appinfo/info.xml b/apps/files_versioning/appinfo/info.xml
index 4c67894f9f9..b9f56f674a0 100644
--- a/apps/files_versioning/appinfo/info.xml
+++ b/apps/files_versioning/appinfo/info.xml
@@ -2,7 +2,6 @@
<info>
<id>files_versioning</id>
<name>Versioning and Backup</name>
- <version>1.0.0</version>
<licence>GPLv2</licence>
<author>Craig Roberts</author>
<require>3</require>
diff --git a/apps/files_versioning/appinfo/version b/apps/files_versioning/appinfo/version
new file mode 100644
index 00000000000..afaf360d37f
--- /dev/null
+++ b/apps/files_versioning/appinfo/version
@@ -0,0 +1 @@
+1.0.0 \ No newline at end of file
diff --git a/apps/gallery/appinfo/app.php b/apps/gallery/appinfo/app.php
index f7e0651275e..b8e7c14fcaf 100644
--- a/apps/gallery/appinfo/app.php
+++ b/apps/gallery/appinfo/app.php
@@ -27,7 +27,7 @@ OC::$CLASSPATH['OC_Gallery_Scanner'] = 'apps/gallery/lib/scanner.php';
OC::$CLASSPATH['OC_Gallery_Sharing'] = 'apps/gallery/lib/sharing.php';
OC::$CLASSPATH['OC_Gallery_Hooks_Handlers'] = 'apps/gallery/lib/hooks_handlers.php';
-$l = new OC_L10N('gallery');
+$l = OC_L10N::get('gallery');
OC_App::register(array(
'order' => 20,
@@ -41,8 +41,8 @@ OC_App::addNavigationEntry( array(
'icon' => OC_Helper::imagePath('core', 'places/picture.svg'),
'name' => $l->t('Pictures')));
- class OC_GallerySearchProvider implements OC_Search_Provider{
- static function search($query){
+class OC_GallerySearchProvider extends OC_Search_Provider{
+ function search($query){
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?');
$result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%'));
$results=array();
diff --git a/apps/gallery/appinfo/info.xml b/apps/gallery/appinfo/info.xml
index 4c8c1cee242..7dc85374b0b 100644
--- a/apps/gallery/appinfo/info.xml
+++ b/apps/gallery/appinfo/info.xml
@@ -2,7 +2,6 @@
<info>
<id>gallery</id>
<name>Pictures</name>
- <version>0.4</version>
<licence>AGPL</licence>
<author>Bartek Przybylski</author>
<require>2</require>
diff --git a/apps/gallery/appinfo/version b/apps/gallery/appinfo/version
new file mode 100644
index 00000000000..e6adf3fc7bb
--- /dev/null
+++ b/apps/gallery/appinfo/version
@@ -0,0 +1 @@
+0.4 \ No newline at end of file
diff --git a/apps/gallery/templates/index.php b/apps/gallery/templates/index.php
index 9bec5db1b91..cf654b68c0b 100644
--- a/apps/gallery/templates/index.php
+++ b/apps/gallery/templates/index.php
@@ -7,7 +7,7 @@ OC_Util::addStyle('files', 'files');
OC_Util::addScript('files_imageviewer', 'jquery.mousewheel-3.0.4.pack');
OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
-$l = new OC_L10N('gallery');
+$l = OC_L10N::get('gallery');
?>
<script type="text/javascript">var gallery_scanning_root='<? echo OC_Preferences::getValue(OC_User::getUser(), 'gallery', 'root', '/'); ?>'; var gallery_default_order = '<? echo OC_Preferences::getValue(OC_User::getUser(), 'gallery', 'order', 'ASC'); ?>';</script>
<div id="controls">
diff --git a/apps/gallery/templates/view_album.php b/apps/gallery/templates/view_album.php
index 6b513a672d5..f938e487954 100644
--- a/apps/gallery/templates/view_album.php
+++ b/apps/gallery/templates/view_album.php
@@ -5,7 +5,7 @@ OC_Util::addScript('gallery', 'album_cover');
OC_Util::addScript('files_imageviewer', 'jquery.mousewheel-3.0.4.pack');
OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
-$l = new OC_L10N('gallery');
+$l = OC_L10N::get('gallery');
?>
<script type="text/javascript">
$(document).ready(function() {
diff --git a/apps/media/appinfo/app.php b/apps/media/appinfo/app.php
index 651067fbbe1..b0891874f7b 100644
--- a/apps/media/appinfo/app.php
+++ b/apps/media/appinfo/app.php
@@ -20,7 +20,7 @@
*
*/
-$l=new OC_L10N('media');
+$l=OC_L10N::get('media');
require_once('apps/media/lib_media.php');
diff --git a/apps/media/appinfo/info.xml b/apps/media/appinfo/info.xml
index 4a642bf889d..01145d4a944 100644
--- a/apps/media/appinfo/info.xml
+++ b/apps/media/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>media</id>
<name>Media</name>
<description>Media player and server for ownCloud</description>
- <version>0.3</version>
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>2</require>
diff --git a/apps/media/appinfo/version b/apps/media/appinfo/version
new file mode 100644
index 00000000000..1d71ef97443
--- /dev/null
+++ b/apps/media/appinfo/version
@@ -0,0 +1 @@
+0.3 \ No newline at end of file
diff --git a/apps/media/lib_media.php b/apps/media/lib_media.php
index 9de291e8da2..a4e5a5dfebc 100644
--- a/apps/media/lib_media.php
+++ b/apps/media/lib_media.php
@@ -82,8 +82,8 @@ class OC_MEDIA{
}
}
-class OC_MediaSearchProvider implements OC_Search_Provider{
- static function search($query){
+class OC_MediaSearchProvider extends OC_Search_Provider{
+ function search($query){
require_once('lib_collection.php');
$artists=OC_MEDIA_COLLECTION::getArtists($query);
$albums=OC_MEDIA_COLLECTION::getAlbums(0,$query);
diff --git a/apps/remoteStorage/appinfo/info.xml b/apps/remoteStorage/appinfo/info.xml
index 1f9618a3334..1875e70a300 100644
--- a/apps/remoteStorage/appinfo/info.xml
+++ b/apps/remoteStorage/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>remoteStorage</id>
<name>remoteStorage compatibility</name>
<description>Enables you to use ownCloud as their remote storage for unhosted applications. This app requires the Webfinger app to be installed and enabled correctly. More info on <a href="http://unhosted.org">the website of the unhosted movement</a>.</description>
- <version>0.6</version>
<licence>AGPL or MIT</licence>
<author>Michiel de Jong</author>
<require>2</require>
diff --git a/apps/remoteStorage/appinfo/version b/apps/remoteStorage/appinfo/version
new file mode 100644
index 00000000000..490f510fc27
--- /dev/null
+++ b/apps/remoteStorage/appinfo/version
@@ -0,0 +1 @@
+0.6 \ No newline at end of file
diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index 5c56ca8191e..4e4da56f054 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -21,7 +21,9 @@
*
*/
+require_once('apps/user_ldap/lib_ldap.php');
require_once('apps/user_ldap/user_ldap.php');
+require_once('apps/user_ldap/group_ldap.php');
OC_APP::registerAdmin('user_ldap','settings');
@@ -33,6 +35,7 @@ define('OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME', 'uid');
// register user backend
OC_User::useBackend( 'LDAP' );
+OC_Group::useBackend( 'LDAP' );
// add settings page to navigation
$entry = array(
diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml
index 99830dd1ffd..fe7e61fb5c3 100644
--- a/apps/user_ldap/appinfo/info.xml
+++ b/apps/user_ldap/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>user_ldap</id>
<name>LDAP user backend</name>
<description>Authenticate Users by LDAP</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Dominik Schmidt</author>
<require>2</require>
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/user_ldap/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
new file mode 100644
index 00000000000..b9d00fc78af
--- /dev/null
+++ b/apps/user_ldap/group_ldap.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * ownCloud – LDAP group backend
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+ class OC_GROUP_LDAP extends OC_Group_Backend {
+// //group specific settings
+ protected $ldapGroupFilter;
+ protected $ldapGroupDisplayName;
+
+ public function __construct() {
+ $this->ldapGroupFilter = OC_Appconfig::getValue('user_ldap', 'ldap_group_filter', '(objectClass=posixGroup)');
+ $this->ldapGroupDisplayName = OC_Appconfig::getValue('user_ldap', 'ldap_group_display_name', 'cn');
+ }
+
+ /**
+ * @brief is user in group?
+ * @param $uid uid of the user
+ * @param $gid gid of the group
+ * @returns true/false
+ *
+ * Checks whether the user is member of a group or not.
+ */
+ public function inGroup($uid, $gid) {
+ return array();
+ }
+
+ /**
+ * @brief Get all groups a user belongs to
+ * @param $uid Name of the user
+ * @returns array with group names
+ *
+ * This function fetches all groups a user belongs to. It does not check
+ * if the user exists at all.
+ */
+ public function getUserGroups($uid) {
+ return array();
+ }
+
+ /**
+ * @brief get a list of all users in a group
+ * @returns array with user ids
+ */
+ public function getUsersInGroup($gid) {
+ return array();
+ }
+
+ /**
+ * @brief get a list of all groups
+ * @returns array with group names
+ *
+ * Returns a list with all groups
+ */
+ public function getGroups() {
+ $groups = OC_LDAP::search($this->ldapGroupFilter, $this->ldapGroupDisplayName);
+
+ if(count($groups) == 0 )
+ return array();
+ else {
+ return array_unique($groups, SORT_LOCALE_STRING);
+ }
+ }
+
+ } \ No newline at end of file
diff --git a/apps/user_ldap/lib_ldap.php b/apps/user_ldap/lib_ldap.php
new file mode 100644
index 00000000000..62e478597bd
--- /dev/null
+++ b/apps/user_ldap/lib_ldap.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * ownCloud – LDAP lib
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+ class OC_LDAP {
+ static protected $ldapConnectionRes = false;
+ static protected $configured = false;
+
+ //cached settings
+ static protected $ldapHost;
+ static protected $ldapPort;
+ static protected $ldapBase;
+ static protected $ldapAgentName;
+ static protected $ldapAgentPassword;
+ static protected $ldapTLS;
+ static protected $ldapNoCase;
+
+ static public function init() {
+ self::readConfiguration();
+ self::establishConnection();
+ }
+
+ /**
+ * @brief executes an LDAP search
+ * @param $filter the LDAP filter for the search
+ * @param $attr optional, when a certain attribute shall be filtered out
+ * @returns array with the search result
+ *
+ * Executes an LDAP search
+ */
+ static public function search($filter, $attr = null) {
+ $sr = ldap_search(self::getConnectionResource(), self::$ldapBase, $filter);
+ $findings = ldap_get_entries(self::getConnectionResource(), $sr );
+
+ if(!is_null($attr)) {
+ $selection = array();
+ foreach($findings as $item) {
+ if(isset($item[strtolower($attr)])) {
+ $selection[] = $item[strtolower($attr)][0];
+ }
+ }
+ return $selection;
+ }
+
+ return $findings;
+ }
+
+ /**
+ * Returns the LDAP handler
+ */
+ static private function getConnectionResource() {
+ if(!self::$ldapConnectionRes) {
+ self::init();
+ }
+ return self::$ldapConnectionRes;
+ }
+
+ /**
+ * Caches the general LDAP configuration.
+ */
+ static private function readConfiguration() {
+ if(!self::$configured) {
+ self::$ldapHost = OC_Appconfig::getValue('user_ldap', 'ldap_host', '');
+ self::$ldapPort = OC_Appconfig::getValue('user_ldap', 'ldap_port', OC_USER_BACKEND_LDAP_DEFAULT_PORT);
+ self::$ldapAgentName = OC_Appconfig::getValue('user_ldap', 'ldap_dn','');
+ self::$ldapAgentPassword = OC_Appconfig::getValue('user_ldap', 'ldap_password','');
+ self::$ldapBase = OC_Appconfig::getValue('user_ldap', 'ldap_base','');
+ self::$ldapTLS = OC_Appconfig::getValue('user_ldap', 'ldap_tls',0);
+ self::$ldapNoCase = OC_Appconfig::getValue('user_ldap', 'ldap_nocase', 0);
+
+ //TODO: sanity checking
+ self::$configured = true;
+ }
+ }
+
+ /**
+ * Connects and Binds to LDAP
+ */
+ static private function establishConnection() {
+ if(!self::$ldapConnectionRes) {
+ self::$ldapConnectionRes = ldap_connect(self::$ldapHost, self::$ldapPort);
+ if(ldap_set_option(self::$ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
+ if(ldap_set_option(self::$ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
+ if(self::$ldapTLS) {
+ ldap_start_tls(self::$ldapConnectionRes);
+ }
+ }
+ }
+
+ //TODO: Check if it works. Before, it was outside the resource-condition
+ $ldapLogin = @ldap_bind(self::$ldapConnectionRes, self::$ldapAgentName, self::$ldapAgentPassword );
+ if(!$ldapLogin) {
+ return false;
+ }
+ }
+ }
+
+
+ } \ No newline at end of file
diff --git a/lib/connect.php b/apps/user_ldap/tests/group_ldap.php
index 22e48750a62..277a2348925 100644
--- a/lib/connect.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -1,10 +1,9 @@
<?php
-
/**
* ownCloud
*
-* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @author Arthur Schiwon
+* @copyright 2012 Arthur Schiwon blizzz@owncloud.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -21,20 +20,17 @@
*
*/
-/**
- * Class for connecting multiply ownCloud installations
- *
- */
-class OC_Connect{
- static private $clouds=array();
+class Test_Group_Ldap extends UnitTestCase {
+ function setUp(){
+ OC_Group::clearBackends();
+ }
- static function connect($path,$user,$password){
- $cloud=new OC_REMOTE_CLOUD($path,$user,$password);
- if($cloud->connected){
- self::$clouds[$path]=$cloud;
- return $cloud;
- }else{
- return false;
- }
+ function testSingleBackend(){
+ OC_Group::useBackend(new OC_GROUP_LDAP());
+ $group_ldap = new OC_GROUP_LDAP();
+
+ $this->assertIsA(OC_Group::getGroups(),gettype(array()));
+ $this->assertIsA($group_ldap->getGroups(),gettype(array()));
}
+
}
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 3521a9d90cf..1e8dc6aacce 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -94,10 +94,6 @@ class OC_USER_LDAP extends OC_User_Backend {
if( !$this->ldap_dc )
return false;
- $email = OC_Preferences::getValue($uid, 'settings', 'email', '');
- if ( !empty( $email ) )
- return false;
-
$email = $this->ldap_dc[$this->ldap_email_attr][0];
OC_Preferences::setValue($uid, 'settings', 'email', $email);
}
diff --git a/apps/user_migrate/appinfo/info.xml b/apps/user_migrate/appinfo/info.xml
index 6abcb4af92c..4c3646f770c 100644
--- a/apps/user_migrate/appinfo/info.xml
+++ b/apps/user_migrate/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>user_migrate</id>
<name>User Account Migration</name>
<description>Migrate your user accounts</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Tom Needham</author>
<require>2</require>
diff --git a/apps/user_migrate/appinfo/version b/apps/user_migrate/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/user_migrate/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/user_openid/appinfo/info.xml b/apps/user_openid/appinfo/info.xml
index 721db1877e3..6214229c0a1 100644
--- a/apps/user_openid/appinfo/info.xml
+++ b/apps/user_openid/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>user_openid</id>
<name>OpenID user backend</name>
<description>Allow login through OpenID</description>
- <version>0.1</version>
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>2</require>
diff --git a/apps/user_openid/appinfo/version b/apps/user_openid/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/user_openid/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/user_webfinger/appinfo/info.xml b/apps/user_webfinger/appinfo/info.xml
index d47fb723a3a..fe1d4371863 100644
--- a/apps/user_webfinger/appinfo/info.xml
+++ b/apps/user_webfinger/appinfo/info.xml
@@ -3,7 +3,6 @@
<id>user_webfinger</id>
<name>Webfinger</name>
<description>Provide WebFinger for all users so they get a user address like user@owncloudinstance which can be used for external applications. Other apps can provide information for webfinger requests, such as remoteStorage compatibility.</description>
- <version>0.3</version>
<licence>AGPL or MIT</licence>
<author>Michiel de Jong, Florian Hülsmann</author>
<require>2</require>
diff --git a/apps/user_webfinger/appinfo/version b/apps/user_webfinger/appinfo/version
new file mode 100644
index 00000000000..1d71ef97443
--- /dev/null
+++ b/apps/user_webfinger/appinfo/version
@@ -0,0 +1 @@
+0.3 \ No newline at end of file
diff --git a/core/ajax/translations.php b/core/ajax/translations.php
index 2e436f8d84e..a6433b1964a 100644
--- a/core/ajax/translations.php
+++ b/core/ajax/translations.php
@@ -26,7 +26,7 @@ require_once('../../lib/base.php');
$app = $_POST["app"];
-$l = new OC_L10N( $app );
+$l = OC_L10N::get( $app );
OC_JSON::success(array('data' => $l->getTranslations()));
?>
diff --git a/core/css/styles.css b/core/css/styles.css
index 5cc15f4b5b6..5e3bbfcf182 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -49,7 +49,7 @@ input[type="checkbox"] { width:auto; }
#body-login input[type="text"], #body-login input[type="password"] { width: 13em; }
#body-login input.login { width: auto; float: right; }
#remember_login { margin:.8em .2em 0 1em; }
-.searchbox input[type="search"] { position:fixed; font-size:1.2em; top:.4em; right:3em; padding:.2em .5em .2em 1.5em; background:#fff url('../img/actions/search.svg') no-repeat .5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; opacity:.3; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
+.searchbox input[type="search"] { position:fixed; font-size:1.2em; top:.4em; right:3em; padding:.2em .5em .2em 1.5em; background:#fff url('../img/actions/search.svg') no-repeat .5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; }
input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; }
input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text-shadow:#ffeedd 0 1px 0; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; }
@@ -106,8 +106,9 @@ label.infield { cursor: text !important; }
#notification { z-index:101; cursor:pointer; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position:fixed; left:50%; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; }
-.action, .selectedActions a, #logout { opacity:.5; -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
+.action, .selectedActions a { opacity:.5; -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
.action { width: 16px; height: 16px; }
+#logout { opacity:.8; }
.action:hover, .selectedActions a:hover, #logout:hover { opacity:1; }
table:not(.nostyle) tr { -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; }
diff --git a/core/js/js.js b/core/js/js.js
index 7e8ca6164c6..e3941fba6d5 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -297,7 +297,10 @@ function object(o) {
* Fills height of window. (more precise than height: 100%;)
*/
function fillHeight(selector) {
- var height = parseFloat($(window).height())-parseFloat(selector.css('top'));
+ if (selector.length == 0) {
+ return;
+ }
+ var height = parseFloat($(window).height())-selector.offset().top;
selector.css('height', height + 'px');
if(selector.outerHeight() > selector.height())
selector.css('height', height-(selector.outerHeight()-selector.height()) + 'px');
@@ -307,8 +310,11 @@ function fillHeight(selector) {
* Fills height and width of window. (more precise than height: 100%; or width: 100%;)
*/
function fillWindow(selector) {
+ if (selector.length == 0) {
+ return;
+ }
fillHeight(selector);
- var width = parseFloat($(window).width())-parseFloat(selector.css('left'));
+ var width = parseFloat($(window).width())-selector.offset().left;
selector.css('width', width + 'px');
if(selector.outerWidth() > selector.width())
selector.css('width', width-(selector.outerWidth()-selector.width()) + 'px');
diff --git a/core/lostpassword/index.php b/core/lostpassword/index.php
index a9b7d10804f..89bb6cfa794 100644
--- a/core/lostpassword/index.php
+++ b/core/lostpassword/index.php
@@ -20,7 +20,7 @@ if (isset($_POST['user'])) {
$tmpl = new OC_Template('core/lostpassword', 'email');
$tmpl->assign('link', $link);
$msg = $tmpl->fetchPage();
- $l = new OC_L10N('core');
+ $l = OC_L10N::get('core');
$from = 'lostpassword-noreply@' . $_SERVER['HTTP_HOST'];
mail($email, $l->t('Owncloud password reset'), $msg, 'From:' . $from);
}
diff --git a/core/strings.php b/core/strings.php
index 9b4290db476..8c3f64ef14f 100644
--- a/core/strings.php
+++ b/core/strings.php
@@ -1,7 +1,7 @@
<?php
//some strings that are used in /lib but wont be translatable unless they are in /core too
-$l=new OC_L10N('core');
+$l=OC_L10N::get('core');
$l->t("Personal");
$l->t("Users");
$l->t("Apps");
diff --git a/files/ajax/upload.php b/files/ajax/upload.php
index f8b8f0e2e5f..af7a7acf702 100644
--- a/files/ajax/upload.php
+++ b/files/ajax/upload.php
@@ -14,7 +14,7 @@ if (!isset($_FILES['files'])) {
}
foreach ($_FILES['files']['error'] as $error) {
if ($error != 0) {
- $l=new OC_L10N('files');
+ $l=OC_L10N::get('files');
$errors = array(
UPLOAD_ERR_OK=>$l->t("There is no error, the file uploaded with success"),
UPLOAD_ERR_INI_SIZE=>$l->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
diff --git a/files/appinfo/app.php b/files/appinfo/app.php
index 0bf73d9a07e..1b495e52f40 100644
--- a/files/appinfo/app.php
+++ b/files/appinfo/app.php
@@ -1,7 +1,7 @@
<?php
-$l=new OC_L10N('files');
+$l=OC_L10N::get('files');
OC_App::register( array( "order" => 2, "id" => "files", "name" => "Files" ));
diff --git a/lib/app.php b/lib/app.php
index 1c81fbd4242..bd432109b23 100755
--- a/lib/app.php
+++ b/lib/app.php
@@ -35,6 +35,7 @@ class OC_App{
static private $adminForms = array();
static private $personalForms = array();
static private $appInfo = array();
+ static private $appTypes = array();
/**
* @brief loads all apps
@@ -85,11 +86,7 @@ class OC_App{
if(is_string($types)){
$types=array($types);
}
- $appData=self::getAppInfo($app);
- if(!isset($appData['types'])){
- return false;
- }
- $appTypes=$appData['types'];
+ $appTypes=self::getAppTypes($app);
foreach($types as $type){
if(array_search($type,$appTypes)!==false){
return true;
@@ -97,6 +94,32 @@ class OC_App{
}
return false;
}
+
+ /**
+ * get the types of an app
+ * @param string $app
+ * @return array
+ */
+ private static function getAppTypes($app){
+ //load the cache
+ if(count(self::$appTypes)==0){
+ self::$appTypes=OC_Appconfig::getValues(false,'types');
+ }
+
+ //get it from info.xml if we haven't cached it
+ if(!isset(self::$appTypes[$app])){
+ $appData=self::getAppInfo($app);
+ if(isset($appData['types'])){
+ self::$appTypes[$app]=$appData['types'];
+ }else{
+ self::$appTypes[$app]=array();
+ }
+
+ OC_Appconfig::setValue($app,'types',implode(',',self::$appTypes[$app]));
+ }
+
+ return explode(',',self::$appTypes[$app]);
+ }
/**
* get all enabled apps
@@ -139,13 +162,18 @@ class OC_App{
if(!is_numeric($app)){
OC_Installer::installShippedApp($app);
}else{
- $download=OC_OCSClient::getApplicationDownload($app,1);
- if(isset($download['downloadlink']) and $download['downloadlink']<>'') {
+ $download=OC_OCSClient::getApplicationDownload($app,1);
+ if(isset($download['downloadlink']) and $download['downloadlink']!='') {
$app=OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink']));
}
}
}
- OC_Appconfig::setValue( $app, 'enabled', 'yes' );
+ if($app!==false){
+ OC_Appconfig::setValue( $app, 'enabled', 'yes' );
+ return true;
+ }else{
+ return false;
+ }
}
/**
@@ -249,7 +277,7 @@ class OC_App{
* entries are sorted by the key 'order' ascending.
*/
public static function getSettingsNavigation(){
- $l=new OC_L10N('core');
+ $l=OC_L10N::get('core');
$settings = array();
// by default, settings only contain the help menu
@@ -302,6 +330,20 @@ class OC_App{
return $list;
}
+
+ /**
+ * get the last version of the app, either from appinfo/version or from appinfo/info.xml
+ */
+ public static function getAppVersion($appid){
+ $file=OC::$APPSROOT.'/apps/'.$appid.'/appinfo/version';
+ $version=@file_get_contents($file);
+ if($version){
+ return $version;
+ }else{
+ $appData=self::getAppInfo($appid);
+ return $appData['version'];
+ }
+ }
/**
* @brief Read app metadata from the info.xml file
@@ -436,12 +478,11 @@ class OC_App{
// The rest comes here
$versions = self::getAppVersions();
foreach( $versions as $app=>$installedVersion ){
- $appInfo=OC_App::getAppInfo($app);
- if (isset($appInfo['version'])) {
- $currentVersion=$appInfo['version'];
+ $currentVersion=OC_App::getAppVersion($app);
+ if ($currentVersion) {
if (version_compare($currentVersion, $installedVersion, '>')) {
OC_App::updateApp($app);
- OC_Appconfig::setValue($app,'installed_version',$appInfo['version']);
+ OC_Appconfig::setValue($app,'installed_version',OC_App::getAppVersion($app));
}
}
}
diff --git a/lib/appconfig.php b/lib/appconfig.php
index 2b5cef59adc..5aaaadd9c4a 100644
--- a/lib/appconfig.php
+++ b/lib/appconfig.php
@@ -163,4 +163,38 @@ class OC_Appconfig{
return true;
}
+
+ /**
+ * get multiply values, either the app or key can be used as wildcard by setting it to false
+ * @param app
+ * @param key
+ * @return array
+ */
+ public static function getValues($app,$key){
+ if($app!==false and $key!==false){
+ return false;
+ }
+ $where='WHERE';
+ $fields='configvalue';
+ $params=array();
+ if($app!==false){
+ $where.=' appid = ?';
+ $fields.=', configkey';
+ $params[]=$app;
+ $key='configkey';
+ }else{
+ $fields.=', appid';
+ $where.=' configkey = ?';
+ $params[]=$key;
+ $key='appid';
+ }
+ $queryString='SELECT '.$fields.' FROM *PREFIX*appconfig '.$where;
+ $query=OC_DB::prepare($queryString);
+ $result=$query->execute($params);
+ $values=array();
+ while($row=$result->fetchRow()){
+ $values[$row[$key]]=$row['configvalue'];
+ }
+ return $values;
+ }
}
diff --git a/lib/db.php b/lib/db.php
index 9364b9e0015..2f74cc6dd95 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -36,8 +36,26 @@ class OC_DB {
static private $affected=0;
static private $result=false;
static private $inTransaction=false;
+ static private $prefix=null;
+ static private $type=null;
/**
+ * check which backend we should use
+ * @return BACKEND_MDB2 or BACKEND_PDO
+ */
+ private static function getDBBackend(){
+ $backend=self::BACKEND_MDB2;
+ if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (instalation always needs to be done my mdb2)
+ $type = OC_Config::getValue( "dbtype", "sqlite" );
+ if($type=='sqlite3') $type='sqlite';
+ $drivers=PDO::getAvailableDrivers();
+ if(array_search($type,$drivers)!==false){
+ $backend=self::BACKEND_PDO;
+ }
+ }
+ }
+
+ /**
* @brief connects to the database
* @returns true if connection can be established or nothing (die())
*
@@ -48,15 +66,7 @@ class OC_DB {
return;
}
if(is_null($backend)){
- $backend=self::BACKEND_MDB2;
- if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (instalation always needs to be done my mdb2)
- $type = OC_Config::getValue( "dbtype", "sqlite" );
- if($type=='sqlite3') $type='sqlite';
- $drivers=PDO::getAvailableDrivers();
- if(array_search($type,$drivers)!==false){
- $backend=self::BACKEND_PDO;
- }
- }
+ $backend=self::getDBBackend();
}
if($backend==self::BACKEND_PDO){
self::connectPDO();
@@ -423,8 +433,14 @@ class OC_DB {
private static function processQuery( $query ){
self::connect();
// We need Database type and table prefix
- $type = OC_Config::getValue( "dbtype", "sqlite" );
- $prefix = OC_Config::getValue( "dbtableprefix", "oc_" );
+ if(is_null(self::$type)){
+ self::$type=OC_Config::getValue( "dbtype", "sqlite" );
+ }
+ $type = self::$type;
+ if(is_null(self::$prefix)){
+ self::$prefix=OC_Config::getValue( "dbtableprefix", "oc_" );
+ }
+ $prefix = self::$prefix;
// differences in escaping of table names ('`' for mysql) and getting the current timestamp
if( $type == 'sqlite' || $type == 'sqlite3' ){
@@ -485,7 +501,7 @@ class OC_DB {
}
/**
- * @breif replaces the owncloud tables with a new set
+ * @brief replaces the owncloud tables with a new set
* @param $file string path to the MDB2 xml db export file
*/
public static function replaceDB( $file ){
diff --git a/lib/filecache.php b/lib/filecache.php
index cdd91dcbfa4..24984c2ccff 100644
--- a/lib/filecache.php
+++ b/lib/filecache.php
@@ -281,6 +281,7 @@ class OC_FileCache{
/**
* get the file id as used in the cache
+ * unlike the public getId, full paths are used here (/usename/files/foo instead of /foo)
* @param string $path
* @return int
*/
@@ -303,6 +304,39 @@ class OC_FileCache{
return -1;
}
}
+
+ /**
+ * get the file id as used in the cache
+ * @param string path
+ * @param string root (optional)
+ * @return int
+ */
+ public static function getId($path,$root=''){
+ if(!$root){
+ $root=OC_Filesystem::getRoot();
+ }
+ if($root=='/'){
+ $root='';
+ }
+ $path=$root.$path;
+ return self::getFileId($path);
+ }
+
+ /**
+ * get the file path from the id, relative to the home folder of the user
+ * @param int id
+ * @param string user (optional)
+ * @return string
+ */
+ public static function getPath($id,$user=''){
+ if(!$user){
+ $user=OC_User::getUser();
+ }
+ $query=OC_DB::prepare('SELECT path FROM *PREFIX*fscache WHERE id=? AND user=?');
+ $result=$query->execute(array($id,$user));
+ $row=$result->fetchRow();
+ return $row['path'];
+ }
/**
* get the file id of the parent folder, taking into account '/' has no parent
diff --git a/lib/files.php b/lib/files.php
index 051cfd4b81c..a7b83149574 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -63,7 +63,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
$zip = new ZipArchive();
- $filename = get_temp_dir().'/ownCloud_'.mt_rand(10000,99999).'.zip';
+ $filename = OC_Helper::tmpFile('.zip');
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit("cannot open <$filename>\n");
}
@@ -84,7 +84,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0);
$zip = new ZipArchive();
- $filename = get_temp_dir().'/ownCloud_'.mt_rand(10000,99999).'.zip';
+ $filename = OC_Helper::tmpFile('.zip');
if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit("cannot open <$filename>\n");
}
@@ -104,15 +104,15 @@ class OC_Files {
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($filename));
}else{
- header('Content-Type: ' . OC_Filesystem::getMimeType($filename));
- header('Content-Length: ' . OC_Filesystem::filesize($filename));
+ $fileData=OC_FileCache::get($filename);
+ header('Content-Type: ' . $fileData['mimetype']);
+ header('Content-Length: ' . $fileData['size']);
}
}elseif($zip or !OC_Filesystem::file_exists($filename)){
header("HTTP/1.0 404 Not Found");
$tmpl = new OC_Template( '', '404', 'guest' );
$tmpl->assign('file',$filename);
$tmpl->printPage();
-// die('404 Not Found');
}else{
header("HTTP/1.0 403 Forbidden");
die('403 Forbidden');
@@ -225,7 +225,7 @@ class OC_Files {
*/
static function validateZipDownload($dir, $files) {
if(!OC_Config::getValue('allowZipDownload', true)) {
- $l = new OC_L10N('files');
+ $l = OC_L10N::get('files');
header("HTTP/1.0 409 Conflict");
$tmpl = new OC_Template( '', 'error', 'user' );
$errors = array(
@@ -250,7 +250,7 @@ class OC_Files {
$totalsize += OC_Filesystem::filesize($dir.'/'.$files);
}
if($totalsize > $zipLimit) {
- $l = new OC_L10N('files');
+ $l = OC_L10N::get('files');
header("HTTP/1.0 409 Conflict");
$tmpl = new OC_Template( '', 'error', 'user' );
$errors = array(
diff --git a/lib/filesystemview.php b/lib/filesystemview.php
index 9d530c7ad63..95873bd87cf 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -283,8 +283,12 @@ class OC_FilesystemView {
if(OC_Filesystem::isValidPath($path)){
$source=$this->fopen($path,'r');
if($source){
- $extention=substr($path,strrpos($path,'.'));
- $tmpFile=OC_Helper::tmpFile($extention);
+ $extension='';
+ $extOffset=strpos($path,'.');
+ if($extOffset !== false) {
+ $extension=substr($path,strrpos($path,'.'));
+ }
+ $tmpFile=OC_Helper::tmpFile($extension);
file_put_contents($tmpFile,$source);
return $tmpFile;
}
diff --git a/lib/helper.php b/lib/helper.php
index f5626bccaa7..2026286352a 100755
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -27,7 +27,7 @@
class OC_Helper {
private static $mimetypes=array();
private static $tmpFiles=array();
-
+
/**
* @brief Creates an url
* @param $app app
@@ -123,7 +123,7 @@ class OC_Helper {
}elseif( file_exists( OC::$SERVERROOT."/core/img/$image" )){
return OC::$WEBROOT."/core/img/$image";
}else{
- echo('image not found: image:'.$image.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
+ echo('image not found: image:'.$image.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
die();
}
}
@@ -188,7 +188,7 @@ class OC_Helper {
$bytes = round( $bytes / 1024, 1 );
return "$bytes GB";
}
-
+
/**
* @brief Make a computer file size
* @param $str file size in a fancy format
@@ -224,9 +224,9 @@ class OC_Helper {
$bytes = round($bytes, 2);
- return $bytes;
+ return $bytes;
}
-
+
/**
* @brief Recusive editing of file permissions
* @param $path path to file or folder
@@ -276,7 +276,7 @@ class OC_Helper {
copy($src, $dest);
}
}
-
+
/**
* @brief Recusive deletion of folders
* @param string $dir path to the folder
@@ -294,6 +294,9 @@ class OC_Helper {
}elseif(file_exists($dir)){
unlink($dir);
}
+ if(file_exists($dir)) {
+ return false;
+ }
}
/**
@@ -349,7 +352,7 @@ class OC_Helper {
}
return $mimeType;
}
-
+
/**
* @brief Checks $_REQUEST contains a var for the $s key. If so, returns the html-escaped value of this var; otherwise returns the default value provided by $d.
* @param $s name of the var to escape, if set.
@@ -357,16 +360,16 @@ class OC_Helper {
* @returns the print-safe value.
*
*/
-
+
//FIXME: should also check for value validation (i.e. the email is an email).
public static function init_var($s, $d="") {
$r = $d;
if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s]))
$r = stripslashes(htmlspecialchars($_REQUEST[$s]));
-
+
return $r;
}
-
+
/**
* returns "checked"-attribut if request contains selected radio element OR if radio element is the default one -- maybe?
* @param string $s Name of radio-button element name
@@ -422,7 +425,7 @@ class OC_Helper {
}
return false;
}
-
+
/**
* copy the contents of one stream to another
* @param resource source
@@ -439,7 +442,7 @@ class OC_Helper {
}
return $count;
}
-
+
/**
* create a temporary file with an unique filename
* @param string postfix
@@ -467,14 +470,25 @@ class OC_Helper {
self::$tmpFiles[]=$path;
return $path.'/';
}
-
+
/**
* remove all files created by self::tmpFile
*/
public static function cleanTmp(){
+ $leftoversFile='/tmp/oc-not-deleted';
+ if(file_exists($leftoversFile)){
+ $leftovers=file($leftoversFile);
+ foreach($leftovers as $file) {
+ self::rmdirr($file);
+ }
+ unlink($leftoversFile);
+ }
+
foreach(self::$tmpFiles as $file){
if(file_exists($file)){
- self::rmdirr($file);
+ if(!self::rmdirr($file)) {
+ file_put_contents($leftoversFile, $file."\n", FILE_APPEND);
+ }
}
}
}
diff --git a/lib/installer.php b/lib/installer.php
index 38e17130e3c..6edf4ce1b74 100644
--- a/lib/installer.php
+++ b/lib/installer.php
@@ -175,7 +175,7 @@ class OC_Installer{
}
//set the installed version
- OC_Appconfig::setValue($info['id'],'installed_version',$info['version']);
+ OC_Appconfig::setValue($info['id'],'installed_version',OC_App::getAppVersion($info['id']));
OC_Appconfig::setValue($info['id'],'enabled','no');
return $info['id'];
}
@@ -297,7 +297,7 @@ class OC_Installer{
include(OC::$APPSROOT."/apps/$app/appinfo/install.php");
}
$info=OC_App::getAppInfo($app);
- OC_Appconfig::setValue($app,'installed_version',$info['version']);
+ OC_Appconfig::setValue($app,'installed_version',OC_App::getAppVersion($app));
return $info;
}
}
diff --git a/lib/json.php b/lib/json.php
index cedf79fd7c3..0d208ce12a2 100644
--- a/lib/json.php
+++ b/lib/json.php
@@ -24,7 +24,7 @@ class OC_JSON{
*/
public static function checkAppEnabled($app){
if( !OC_App::isEnabled($app)){
- $l = new OC_L10N('core');
+ $l = OC_L10N::get('core');
self::error(array( 'data' => array( 'message' => $l->t('Application is not enabled') )));
exit();
}
@@ -35,7 +35,7 @@ class OC_JSON{
*/
public static function checkLoggedIn(){
if( !OC_User::isLoggedIn()){
- $l = new OC_L10N('core');
+ $l = OC_L10N::get('core');
self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
}
@@ -47,7 +47,7 @@ class OC_JSON{
public static function checkAdminUser(){
self::checkLoggedIn();
if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )){
- $l = new OC_L10N('core');
+ $l = OC_L10N::get('core');
self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit();
}
diff --git a/lib/l10n.php b/lib/l10n.php
index 636326f9864..c0ecdbd1b70 100644
--- a/lib/l10n.php
+++ b/lib/l10n.php
@@ -25,6 +25,11 @@
*/
class OC_L10N{
/**
+ * cached instances
+ */
+ protected static $instances=array();
+
+ /**
* cache
*/
protected static $cache = array();
@@ -46,6 +51,21 @@ class OC_L10N{
'date' => 'd.m.Y',
'datetime' => 'd.m.Y H:i:s',
'time' => 'H:i:s');
+
+ /**
+ * get an L10N instance
+ * @return OC_L10N
+ */
+ public static function get($app,$lang=null){
+ if(is_null($lang)){
+ if(!isset(self::$instances[$app])){
+ self::$instances[$app]=new OC_L10N($app);
+ }
+ return self::$instances[$app];
+ }else{
+ return new OC_L10N($app,$lang);
+ }
+ }
/**
* @brief The constructor
@@ -261,17 +281,14 @@ class OC_L10N{
public static function findAvailableLanguages($app=null){
$available=array('en');//english is always available
$dir = self::findI18nDir($app);
- if(file_exists($dir)){
- $dh = opendir($dir);
- while(($file = readdir($dh)) !== false){
- if(substr($file, -4, 4) == '.php' and (strlen($file) == 6 || strlen($file) == 9)){
+ if(is_dir($dir)){
+ $files=scandir($dir);
+ foreach($files as $file){
+ if(substr($file, -4, 4) == '.php'){
$i = substr($file, 0, -4);
- if($i != ''){
- $available[] = $i;
- }
+ $available[] = $i;
}
}
- closedir($dh);
}
return $available;
}
diff --git a/lib/migrate.php b/lib/migrate.php
index dff3abe9e93..f46d860e806 100644
--- a/lib/migrate.php
+++ b/lib/migrate.php
@@ -25,8 +25,8 @@
* provides an interface to migrate users and whole ownclouds
*/
class OC_Migrate{
-
-
+
+
// Array of OC_Migration_Provider objects
static private $providers=array();
// User id of the user to import/export
@@ -47,7 +47,7 @@ class OC_Migrate{
static private $zippath=false;
// Holds the OC_Migration_Content object
static private $content=false;
-
+
/**
* register a new migration provider
* @param OC_Migrate_Provider $provider
@@ -55,28 +55,28 @@ class OC_Migrate{
public static function registerProvider($provider){
self::$providers[]=$provider;
}
-
- /**
- * @breif finds and loads the providers
+
+ /**
+ * @brief finds and loads the providers
*/
static private function findProviders(){
// Find the providers
$apps = OC_App::getAllApps();
-
+
foreach($apps as $app){
$path = OC::$SERVERROOT . '/apps/' . $app . '/appinfo/migrate.php';
if( file_exists( $path ) ){
- include( $path );
- }
- }
+ include( $path );
+ }
+ }
}
-
+
/**
- * @breif exports a user, or owncloud instance
+ * @brief exports a user, or owncloud instance
* @param optional $uid string user id of user to export if export type is user, defaults to current
* @param ootional $type string type of export, defualts to user
* @param otional $path string path to zip output folder
- * @return false on error, path to zip on success
+ * @return false on error, path to zip on success
*/
public static function export( $uid=null, $type='user', $path=null ){
$datadir = OC_Config::getValue( 'datadirectory' );
@@ -84,47 +84,48 @@ class OC_Migrate{
$types = array( 'user', 'instance', 'system', 'userfiles' );
if( !in_array( $type, $types ) ){
OC_Log::write( 'migration', 'Invalid export type', OC_Log::ERROR );
- return json_encode( array( array( 'success' => false ) ) );
+ return json_encode( array( array( 'success' => false ) ) );
}
self::$exporttype = $type;
// Userid?
if( self::$exporttype == 'user' ){
// Check user exists
- if( !is_null($uid) ){
- if( !OC_User_Database::userExists( $uid ) ){
+ if( !is_null($uid) ){
+ $db = new OC_User_Database;
+ if( !$db->userExists( $uid ) ){
OC_Log::write('migration', 'User: '.$uid.' is not in the database and so cannot be exported.', OC_Log::ERROR);
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
self::$uid = $uid;
} else {
- self::$uid = OC_User::getUser();
- }
+ self::$uid = OC_User::getUser();
+ }
}
// Calculate zipname
if( self::$exporttype == 'user' ){
- $zipname = 'oc_export_' . self::$uid . '_' . date("y-m-d_H-i-s") . '.zip';
+ $zipname = 'oc_export_' . self::$uid . '_' . date("y-m-d_H-i-s") . '.zip';
} else {
$zipname = 'oc_export_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '.zip';
}
// Calculate path
if( self::$exporttype == 'user' ){
- self::$zippath = $datadir . '/' . self::$uid . '/' . $zipname;
+ self::$zippath = $datadir . '/' . self::$uid . '/' . $zipname;
} else {
if( !is_null( $path ) ){
// Validate custom path
if( !file_exists( $path ) || !is_writeable( $path ) ){
OC_Log::write( 'migration', 'Path supplied is invalid.', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
- self::$zippath = $path . $zipname;
+ self::$zippath = $path . $zipname;
} else {
// Default path
- self::$zippath = get_temp_dir() . '/' . $zipname;
+ self::$zippath = get_temp_dir() . '/' . $zipname;
}
}
// Create the zip object
if( !self::createZip() ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Do the export
self::findProviders();
@@ -134,20 +135,20 @@ class OC_Migrate{
// Connect to the db
self::$dbpath = $datadir . '/' . self::$uid . '/migration.db';
if( !self::connectDB() ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
self::$content = new OC_Migration_Content( self::$zip, self::$MDB2 );
// Export the app info
- $exportdata = self::exportAppData();
+ $exportdata = self::exportAppData();
// Add the data dir to the zip
self::$content->addDir( $datadir . '/' . self::$uid, true, '/' );
- break;
+ break;
case 'instance':
self::$content = new OC_Migration_Content( self::$zip );
// Creates a zip that is compatable with the import function
$dbfile = tempnam( "/tmp", "owncloud_export_data_" );
OC_DB::getDbStructure( $dbfile, 'MDB2_SCHEMA_DUMP_ALL');
-
+
// Now add in *dbname* and *dbprefix*
$dbexport = file_get_contents( $dbfile );
$dbnamestring = "<database>\n\n <name>" . OC_Config::getValue( "dbname", "owncloud" );
@@ -158,14 +159,14 @@ class OC_Migrate{
self::$content->addFromString( $dbexport, "dbexport.xml" );
// Add user data
foreach(OC_User::getUsers() as $user){
- self::$content->addDir( $datadir . '/' . $user . '/', true, "/userdata/" );
+ self::$content->addDir( $datadir . '/' . $user . '/', true, "/userdata/" );
}
break;
case 'userfiles':
self::$content = new OC_Migration_Content( self::$zip );
// Creates a zip with all of the users files
foreach(OC_User::getUsers() as $user){
- self::$content->addDir( $datadir . '/' . $user . '/', true, "/" );
+ self::$content->addDir( $datadir . '/' . $user . '/', true, "/" );
}
break;
case 'system':
@@ -178,70 +179,70 @@ class OC_Migrate{
break;
}
if( !$info = self::getExportInfo( $exportdata ) ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Add the export info json to the export zip
self::$content->addFromString( $info, 'export_info.json' );
if( !self::$content->finish() ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
- return json_encode( array( 'success' => true, 'data' => self::$zippath ) );
+ return json_encode( array( 'success' => true, 'data' => self::$zippath ) );
}
-
+
/**
- * @breif imports a user, or owncloud instance
+ * @brief imports a user, or owncloud instance
* @param $path string path to zip
* @param optional $type type of import (user or instance)
- * @param optional $uid userid of new user
+ * @param optional $uid userid of new user
*/
public static function import( $path, $type='user', $uid=null ){
OC_Util::checkAdminUser();
$datadir = OC_Config::getValue( 'datadirectory' );
// Extract the zip
if( !$extractpath = self::extractZip( $path ) ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Get export_info.json
$scan = scandir( $extractpath );
// Check for export_info.json
if( !in_array( 'export_info.json', $scan ) ){
OC_Log::write( 'migration', 'Invalid import file, export_info.json note found', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
$json = json_decode( file_get_contents( $extractpath . 'export_info.json' ) );
if( $json->exporttype != $type ){
OC_Log::write( 'migration', 'Invalid import file', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
self::$exporttype = $type;
-
+
// Have we got a user if type is user
if( self::$exporttype == 'user' ){
if( !$uid ){
self::$uid = $json->exporteduser;
- } else {
+ } else {
self::$uid = $uid;
}
}
-
+
// Handle export types
switch( self::$exporttype ){
case 'user':
// Check user availability
if( OC_User::userExists( self::$uid ) ){
OC_Log::write( 'migration', 'User already exists', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
$run = true;
OC_Hook::emit( "OC_User", "pre_createUser", array( "run" => &$run, "uid" => self::$uid, "password" => $json->hash ));
if( !$run ){
// Something stopped the user creation
OC_Log::write( 'migration', 'User creation failed', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Create the user
if( !self::createUser( self::$uid, $json->hash ) ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Emit the post_createUser hook (password is already hashed, will cause problems
OC_Hook::emit( "OC_User", "post_createUser", array( "uid" => self::$uid, "password" => $json->hash ));
@@ -249,19 +250,19 @@ class OC_Migrate{
$path = $datadir . '/' . self::$uid;
if( !mkdir( $path, 0755, true ) ){
OC_Log::write( 'migration', 'Failed to create users data dir: '.$path, OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Copy data
if( !self::copy_r( $extractpath . $json->exporteduser, $datadir . '/' . self::$uid ) ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
- // Import user app data
+ // Import user app data
if( !$appsimported = self::importAppData( $extractpath . $json->exporteduser . '/migration.db', $json, self::$uid ) ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// All done!
if( !self::unlink_r( $extractpath ) ){
- OC_Log::write( 'migration', 'Failed to delete the extracted zip', OC_Log::ERROR );
+ OC_Log::write( 'migration', 'Failed to delete the extracted zip', OC_Log::ERROR );
}
return json_encode( array( 'success' => true, 'data' => $appsimported ) );
break;
@@ -270,59 +271,59 @@ class OC_Migrate{
* EXPERIMENTAL
// Check for new data dir and dbexport before doing anything
// TODO
-
+
// Delete current data folder.
OC_Log::write( 'migration', "Deleting current data dir", OC_Log::INFO );
if( !self::unlink_r( $datadir, false ) ){
OC_Log::write( 'migration', 'Failed to delete the current data dir', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
-
+
// Copy over data
if( !self::copy_r( $extractpath . 'userdata', $datadir ) ){
OC_Log::write( 'migration', 'Failed to copy over data directory', OC_Log::ERROR );
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
-
+
// Import the db
if( !OC_DB::replaceDB( $extractpath . 'dbexport.xml' ) ){
- return json_encode( array( 'success' => false ) );
+ return json_encode( array( 'success' => false ) );
}
// Done
- return json_encode( 'success' => true );
+ return json_encode( 'success' => true );
*/
- break;
+ break;
}
-
+
}
-
+
/**
- * @breif recursively deletes a directory
+ * @brief recursively deletes a directory
* @param $dir string path of dir to delete
* $param optional $deleteRootToo bool delete the root directory
* @return bool
*/
- private static function unlink_r( $dir, $deleteRootToo=true ){
- if( !$dh = @opendir( $dir ) ){
- return false;
- }
+ private static function unlink_r( $dir, $deleteRootToo=true ){
+ if( !$dh = @opendir( $dir ) ){
+ return false;
+ }
while (false !== ($obj = readdir($dh))){
- if($obj == '.' || $obj == '..') {
- continue;
- }
- if (!@unlink($dir . '/' . $obj)){
- self::unlink_r($dir.'/'.$obj, true);
- }
- }
- closedir($dh);
- if ( $deleteRootToo ) {
- @rmdir($dir);
- }
- return true;
- }
-
+ if($obj == '.' || $obj == '..') {
+ continue;
+ }
+ if (!@unlink($dir . '/' . $obj)){
+ self::unlink_r($dir.'/'.$obj, true);
+ }
+ }
+ closedir($dh);
+ if ( $deleteRootToo ) {
+ @rmdir($dir);
+ }
+ return true;
+ }
+
/**
- * @breif copies recursively
+ * @brief copies recursively
* @param $path string path to source folder
* @param $dest string path to destination
* @return bool
@@ -349,12 +350,12 @@ class OC_Migrate{
return copy( $path, $dest );
} else {
return false;
- }
+ }
}
-
+
/**
- * @breif tries to extract the import zip
- * @param $path string path to the zip
+ * @brief tries to extract the import zip
+ * @param $path string path to the zip
* @return string path to extract location (with a trailing slash) or false on failure
*/
static private function extractZip( $path ){
@@ -362,20 +363,20 @@ class OC_Migrate{
// Validate path
if( !file_exists( $path ) ){
OC_Log::write( 'migration', 'Zip not found', OC_Log::ERROR );
- return false;
+ return false;
}
if ( self::$zip->open( $path ) != TRUE ) {
OC_Log::write( 'migration', "Failed to open zip file", OC_Log::ERROR );
return false;
}
- $to = get_temp_dir() . '/oc_import_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '/';
+ $to = get_temp_dir() . '/oc_import_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '/';
if( !self::$zip->extractTo( $to ) ){
- return false;
+ return false;
}
- self::$zip->close();
+ self::$zip->close();
return $to;
}
-
+
/**
* @brief connects to a MDB2 database scheme
* @returns bool
@@ -393,16 +394,16 @@ class OC_Migrate{
return true;
}
-
+
/**
- * @breif creates a migration.db in the users data dir with their app data in
+ * @brief creates a migration.db in the users data dir with their app data in
* @return bool whether operation was successfull
*/
private static function exportAppData( ){
-
+
$success = true;
$return = array();
-
+
// Foreach provider
foreach( self::$providers as $provider ){
$success = true;
@@ -413,37 +414,37 @@ class OC_Migrate{
if( is_array( $tables ) ){
// Save the table names
foreach($tables as $table){
- $return['apps'][$provider->getID()]['tables'][] = $table;
- }
+ $return['apps'][$provider->getID()]['tables'][] = $table;
+ }
} else {
// It failed to create the tables
$success = false;
- }
+ }
}
-
+
// Run the export function?
if( $success ){
// Set the provider properties
$provider->setData( self::$uid, self::$content );
- $return['apps'][$provider->getID()]['success'] = $provider->export();
+ $return['apps'][$provider->getID()]['success'] = $provider->export();
} else {
- $return['apps'][$provider->getID()]['success'] = false;
- $return['apps'][$provider->getID()]['message'] = 'failed to create the app tables';
+ $return['apps'][$provider->getID()]['success'] = false;
+ $return['apps'][$provider->getID()]['message'] = 'failed to create the app tables';
}
-
+
// Now add some app info the the return array
$appinfo = OC_App::getAppInfo( $provider->getID() );
- $return['apps'][$provider->getID()]['version'] = $appinfo['version'];
-
+ $return['apps'][$provider->getID()]['version'] = OC_App::getAppVersion($provider->getID());
+
}
-
+
return $return;
-
+
}
-
-
+
+
/**
- * @breif generates json containing export info, and merges any data supplied
+ * @brief generates json containing export info, and merges any data supplied
* @param optional $array array of data to include in the returned json
* @return bool
*/
@@ -464,11 +465,11 @@ class OC_Migrate{
OC_Log::write( 'migration', 'Failed to get the users password hash', OC_log::ERROR);
return false;
}
- $info['hash'] = $hash;
- $info['exporteduser'] = self::$uid;
+ $info['hash'] = $hash;
+ $info['exporteduser'] = self::$uid;
}
if( !is_array( $array ) ){
- OC_Log::write( 'migration', 'Supplied $array was not an array in getExportInfo()', OC_Log::ERROR );
+ OC_Log::write( 'migration', 'Supplied $array was not an array in getExportInfo()', OC_Log::ERROR );
}
// Merge in other data
$info = array_merge( $info, (array)$array );
@@ -476,9 +477,9 @@ class OC_Migrate{
$json = json_encode( $info );
return $json;
}
-
+
/**
- * @breif connects to migration.db, or creates if not found
+ * @brief connects to migration.db, or creates if not found
* @param $db optional path to migration.db, defaults to user data dir
* @return bool whether the operation was successful
*/
@@ -487,19 +488,19 @@ class OC_Migrate{
self::$dbpath = !is_null( $path ) ? $path : self::$dbpath;
if( !self::$dbpath ){
OC_Log::write( 'migration', 'connectDB() was called without dbpath being set', OC_Log::ERROR );
- return false;
+ return false;
}
// Already connected
if(!self::$MDB2){
require_once('MDB2.php');
-
+
$datadir = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
-
+
// DB type
if( class_exists( 'SQLite3' ) ){
$dbtype = 'sqlite3';
} else if( is_callable( 'sqlite_open' ) ){
- $dbtype = 'sqlite';
+ $dbtype = 'sqlite';
} else {
OC_Log::write( 'migration', 'SQLite not found', OC_Log::ERROR );
return false;
@@ -533,53 +534,53 @@ class OC_Migrate{
self::$MDB2->setFetchMode(MDB2_FETCHMODE_ASSOC);
}
return true;
-
+
}
-
+
/**
- * @breif creates the tables in migration.db from an apps database.xml
+ * @brief creates the tables in migration.db from an apps database.xml
* @param $appid string id of the app
* @return bool whether the operation was successful
*/
static private function createAppTables( $appid ){
-
+
if( !self::connectScheme() ){
- return false;
+ return false;
}
-
- // There is a database.xml file
+
+ // There is a database.xml file
$content = file_get_contents( OC::$SERVERROOT . '/apps/' . $appid . '/appinfo/database.xml' );
-
+
$file2 = 'static://db_scheme';
// TODO get the relative path to migration.db from the data dir
// For now just cheat
$path = pathinfo( self::$dbpath );
$content = str_replace( '*dbname*', self::$uid.'/migration', $content );
$content = str_replace( '*dbprefix*', '', $content );
-
+
$xml = new SimpleXMLElement($content);
foreach($xml->table as $table){
- $tables[] = (string)$table->name;
- }
-
+ $tables[] = (string)$table->name;
+ }
+
file_put_contents( $file2, $content );
-
+
// Try to create tables
$definition = self::$schema->parseDatabaseDefinitionFile( $file2 );
unlink( $file2 );
-
+
// Die in case something went wrong
if( $definition instanceof MDB2_Schema_Error ){
OC_Log::write( 'migration', 'Failed to parse database.xml for: '.$appid, OC_Log::FATAL );
OC_Log::write( 'migration', $definition->getMessage().': '.$definition->getUserInfo(), OC_Log::FATAL );
return false;
}
-
+
$definition['overwrite'] = true;
-
+
$ret = self::$schema->createDatabase( $definition );
-
+
// Die in case something went wrong
if( $ret instanceof MDB2_Error ){
OC_Log::write( 'migration', 'Failed to create tables for: '.$appid, OC_Log::FATAL );
@@ -591,7 +592,7 @@ class OC_Migrate{
}
/**
- * @breif tries to create the zip
+ * @brief tries to create the zip
* @param $path string path to zip destination
* @return bool
*/
@@ -600,18 +601,18 @@ class OC_Migrate{
// Check if properties are set
if( !self::$zippath ){
OC_Log::write('migration', 'createZip() called but $zip and/or $zippath have not been set', OC_Log::ERROR);
- return false;
+ return false;
}
if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== TRUE ) {
OC_Log::write('migration', 'Failed to create the zip with error: '.self::$zip->getStatusString(), OC_Log::ERROR);
return false;
} else {
- return true;
- }
+ return true;
+ }
}
-
+
/**
- * @breif returns an array of apps that support migration
+ * @brief returns an array of apps that support migration
* @return array
*/
static public function getApps(){
@@ -620,13 +621,13 @@ class OC_Migrate{
$path = OC::$SERVERROOT . '/apps/' . $app . '/lib/migrate.php';
if( file_exists( $path ) ){
$supportsmigration[] = $app;
- }
+ }
}
- return $supportsmigration;
+ return $supportsmigration;
}
-
+
/**
- * @breif imports a new user
+ * @brief imports a new user
* @param $db string path to migration.db
* @param $info object of migration info
* @param $uid optional uid to use
@@ -639,76 +640,76 @@ class OC_Migrate{
if(!self::connectDB( $db )){
OC_Log::write('migration','Failed to connect to migration.db',OC_Log::ERROR);
return false;
- }
+ }
} else {
- OC_Log::write('migration','Migration.db not found at: '.$db, OC_Log::FATAL );
+ OC_Log::write('migration','Migration.db not found at: '.$db, OC_Log::FATAL );
return false;
}
-
+
// Find providers
self::findProviders();
// Generate importinfo array
- $importinfo = array(
+ $importinfo = array(
'olduid' => $info->exporteduser,
'newuid' => self::$uid
);
-
+
foreach( self::$providers as $provider){
// Is the app in the export?
$id = $provider->getID();
if( isset( $info->apps->$id ) ){
// Is the app installed
if( !OC_App::isEnabled( $id ) ){
- OC_Log::write( 'migration', 'App: ' . $id . ' is not installed, can\'t import data.', OC_Log::INFO );
- $appsstatus[$id] = 'notsupported';
+ OC_Log::write( 'migration', 'App: ' . $id . ' is not installed, can\'t import data.', OC_Log::INFO );
+ $appsstatus[$id] = 'notsupported';
} else {
// Did it succeed on export?
if( $info->apps->$id->success ){
// Give the provider the content object
if( !self::connectDB( $db ) ){
- return false;
+ return false;
}
$content = new OC_Migration_Content( self::$zip, self::$MDB2 );
$provider->setData( self::$uid, $content, $info );
// Then do the import
if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ){
// Failed to import app
- OC_Log::write( 'migration', 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id, OC_Log::ERROR );
+ OC_Log::write( 'migration', 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id, OC_Log::ERROR );
}
} else {
// Add to failed list
- $appsstatus[$id] = false;
+ $appsstatus[$id] = false;
}
- }
- }
+ }
+ }
}
-
+
return $appsstatus;
-
+
}
-
+
/*
- * @breif creates a new user in the database
+ * @brief creates a new user in the database
* @param $uid string user_id of the user to be created
* @param $hash string hash of the user to be created
* @return bool result of user creation
*/
public static function createUser( $uid, $hash ){
-
+
// Check if userid exists
if(OC_User::userExists( $uid )){
return false;
}
-
+
// Create the user
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
$result = $query->execute( array( $uid, $hash));
if( !$result ){
- OC_Log::write('migration', 'Failed to create the new user "'.$uid."");
+ OC_Log::write('migration', 'Failed to create the new user "'.$uid."");
}
return $result ? true : false;
-
+
}
}
diff --git a/lib/migration/content.php b/lib/migration/content.php
index d304051f3e6..7ef88f36e43 100644
--- a/lib/migration/content.php
+++ b/lib/migration/content.php
@@ -33,7 +33,7 @@ class OC_Migration_Content{
private $tmpfiles=false;
/**
- * @breif sets up the
+ * @brief sets up the
* @param $zip ZipArchive object
* @param optional $db a MDB2 database object (required for exporttype user)
* @return bool
@@ -51,7 +51,7 @@ class OC_Migration_Content{
}
- // @breif prepares the db
+ // @brief prepares the db
// @param $query the sql query to prepare
public function prepare( $query ){
@@ -74,7 +74,7 @@ class OC_Migration_Content{
}
/**
- * @breif processes the db query
+ * @brief processes the db query
* @param $query the query to process
* @return string of processed query
*/
@@ -130,7 +130,7 @@ class OC_Migration_Content{
}
/**
- * @breif saves a sql data set into migration.db
+ * @brief saves a sql data set into migration.db
* @param $data a sql data set returned from self::prepare()->query()
* @param $options array of copyRows options
* @return void
@@ -175,7 +175,7 @@ class OC_Migration_Content{
}
/**
- * @breif adds a directory to the zip object
+ * @brief adds a directory to the zip object
* @param $dir string path of the directory to add
* @param $recursive bool
* @param $internaldir string path of folder to add dir to in zip
@@ -209,7 +209,7 @@ class OC_Migration_Content{
}
/**
- * @breif adds a file to the zip from a given string
+ * @brief adds a file to the zip from a given string
* @param $data string of data to add
* @param $path the relative path inside of the zip to save the file to
* @return bool
@@ -228,7 +228,7 @@ class OC_Migration_Content{
}
/**
- * @breif closes the zip, removes temp files
+ * @brief closes the zip, removes temp files
* @return bool
*/
public function finish(){
@@ -241,7 +241,7 @@ class OC_Migration_Content{
}
/**
- * @breif cleans up after the zip
+ * @brief cleans up after the zip
*/
private function cleanup(){
// Delete tmp files
@@ -249,4 +249,4 @@ class OC_Migration_Content{
unlink( $i );
}
}
-} \ No newline at end of file
+}
diff --git a/lib/migration/provider.php b/lib/migration/provider.php
index feae29f1354..91336f3019d 100644
--- a/lib/migration/provider.php
+++ b/lib/migration/provider.php
@@ -17,19 +17,19 @@ abstract class OC_Migration_Provider{
}
/**
- * @breif exports data for apps
+ * @brief exports data for apps
* @return array appdata to be exported
*/
abstract function export( );
/**
- * @breif imports data for the app
+ * @brief imports data for the app
* @return void
*/
abstract function import( );
/**
- * @breif sets the OC_Migration_Content object to $this->content
+ * @brief sets the OC_Migration_Content object to $this->content
* @param $content a OC_Migration_Content object
*/
public function setData( $uid, $content, $info=null ){
@@ -43,7 +43,7 @@ abstract class OC_Migration_Provider{
}
/**
- * @breif returns the appid of the provider
+ * @brief returns the appid of the provider
* @return string
*/
public function getID(){
diff --git a/lib/remote/cloud.php b/lib/remote/cloud.php
deleted file mode 100644
index a9c74e8bf5f..00000000000
--- a/lib/remote/cloud.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-/**
- * Class for connection to a remote owncloud installation
- *
- */
-class OC_REMOTE_CLOUD{
- private $path;
- private $connected=false;
- private $cookiefile=false;
-
- /**
- * make an api call to the remote cloud
- * @param string $action
- * @param array parameters
- * @param bool assoc when set to true, the result will be parsed as associative array
- *
- */
- private function apiCall($action,$parameters=false,$assoc=false){
- if(!$this->cookiefile){
- $this->cookiefile=get_temp_dir().'/remoteCloudCookie'.uniqid();
- }
- $url=$this->path.='/files/api.php';
- $fields_string="action=$action&";
- if(is_array($parameters)){
- foreach($parameters as $key=>$value){
- $fields_string.=$key.'='.$value.'&';
- }
- rtrim($fields_string,'&');
- }
- $ch=curl_init();
- curl_setopt($ch,CURLOPT_URL,$url);
- curl_setopt($ch,CURLOPT_POST,count($parameters));
- curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
- curl_setopt($ch, CURLOPT_COOKIEFILE,$this->cookiefile);
- curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookiefile);
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
- $result=curl_exec($ch);
- $result=trim($result);
- $info=curl_getinfo($ch);
- $httpCode=$info['http_code'];
- curl_close($ch);
- if($httpCode==200 or $httpCode==0){
- return json_decode($result,$assoc);
- }else{
- return false;
- }
- }
-
- public function __construct($path,$user,$password){
- $this->path=$path;
- $this->connected=$this->apiCall('login',array('username'=>$user,'password'=>$password));
- }
-
- /**
- * check if we are stull logged in on the remote cloud
- *
- */
- public function isLoggedIn(){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('checklogin');
- }
-
- public function __get($name){
- switch($name){
- case 'connected':
- return $this->connected;
- }
- }
-
- /**
- * disconnect from the remote cloud
- *
- */
- public function disconnect(){
- $this->connected=false;
- if(is_file($this->cookiefile)){
- unlink($this->cookiefile);
- }
- $this->cookiefile=false;
- }
-
- /**
- * create a new file or directory
- * @param string $dir
- * @param string $name
- * @param string $type
- */
- public function newFile($dir,$name,$type){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('new',array('dir'=>$dir,'name'=>$name,'type'=>$type),true);
- }
-
- /**
- * deletes a file or directory
- * @param string $dir
- * @param string $file
- */
- public function delete($dir,$name){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('delete',array('dir'=>$dir,'file'=>$name),true);
- }
-
- /**
- * moves a file or directory
- * @param string $sorceDir
- * @param string $sorceFile
- * @param string $targetDir
- * @param string $targetFile
- */
- public function move($sourceDir,$sourceFile,$targetDir,$targetFile){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('move',array('sourcedir'=>$sourceDir,'source'=>$sourceFile,'targetdir'=>$targetDir,'target'=>$targetFile),true);
- }
-
- /**
- * copies a file or directory
- * @param string $sorceDir
- * @param string $sorceFile
- * @param string $targetDir
- * @param string $targetFile
- */
- public function copy($sourceDir,$sourceFile,$targetDir,$targetFile){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('copy',array('sourcedir'=>$sourceDir,'source'=>$sourceFile,'targetdir'=>$targetDir,'target'=>$targetFile),true);
- }
-
- /**
- * get a file tree
- * @param string $dir
- */
- public function getTree($dir){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('gettree',array('dir'=>$dir),true);
- }
-
- /**
- * get the files inside a directory of the remote cloud
- * @param string $dir
- */
- public function getFiles($dir){
- if(!$this->connected){
- return false;
- }
- return $this->apiCall('getfiles',array('dir'=>$dir),true);
- }
-
- /**
- * get a remove file and save it in a temporary file and return the path of the temporary file
- * @param string $dir
- * @param string $file
- * @return string
- */
- public function getFile($dir, $file){
- if(!$this->connected){
- return false;
- }
- $ch=curl_init();
- if(!$this->cookiefile){
- $this->cookiefile=get_temp_dir().'/remoteCloudCookie'.uniqid();
- }
- $tmpfile=tempnam(get_temp_dir(),'remoteCloudFile');
- $fp=fopen($tmpfile,'w+');
- $url=$this->path.="/files/api.php?action=get&dir=$dir&file=$file";
- curl_setopt($ch,CURLOPT_URL,$url);
- curl_setopt($ch, CURLOPT_COOKIEFILE,$this->cookiefile);
- curl_setopt($ch, CURLOPT_COOKIEJAR,$this->cookiefile);
- curl_setopt($ch, CURLOPT_FILE, $fp);
- curl_exec($ch);
- fclose($fp);
- curl_close($ch);
- return $tmpfile;
- }
-
- public function sendFile($sourceDir,$sourceFile,$targetDir,$targetFile){
- $source=$sourceDir.'/'.$sourceFile;
- $tmp=OC_Filesystem::toTmpFile($source);
- return $this->sendTmpFile($tmp,$targetDir,$targetFile);
- }
-
- public function sendTmpFile($tmp,$targetDir,$targetFile){
- $token=sha1(uniqid().$tmp);
- $file=get_temp_dir().'/'.'remoteCloudFile'.$token;
- rename($tmp,$file);
- if( OC_Config::getValue( "forcessl", false ) or isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on') {
- $url = "https://". $_SERVER['SERVER_NAME'] . OC::$WEBROOT;
- }else{
- $url = "http://". $_SERVER['SERVER_NAME'] . OC::$WEBROOT;
- }
- return $this->apiCall('pull',array('dir'=>$targetDir,'file'=>$targetFile,'token'=>$token,'source'=>$url),true);
- }
-}
-
diff --git a/lib/search.php b/lib/search.php
index 6b33fa38140..12055418687 100644
--- a/lib/search.php
+++ b/lib/search.php
@@ -26,13 +26,22 @@
*/
class OC_Search{
static private $providers=array();
+ static private $registeredProviders=array();
+
+ /**
+ * remove all registered search providers
+ */
+ public static function clearProviders(){
+ self::$providers=array();
+ self::$registeredProviders=array();
+ }
/**
* register a new search provider to be used
* @param string $provider class name of a OC_Search_Provider
*/
- public static function registerProvider($provider){
- self::$providers[]=$provider;
+ public static function registerProvider($class,$options=array()){
+ self::$registeredProviders[]=array('class'=>$class,'options'=>$options);
}
/**
@@ -41,10 +50,25 @@ class OC_Search{
* @return array An array of OC_Search_Result's
*/
public static function search($query){
+ self::initProviders();
$results=array();
foreach(self::$providers as $provider){
- $results=array_merge($results, $provider::search($query));
+ $results=array_merge($results, $provider->search($query));
}
return $results;
}
+
+ /**
+ * create instances of all the registered search providers
+ */
+ private static function initProviders(){
+ if(count(self::$providers)>0){
+ return;
+ }
+ foreach(self::$registeredProviders as $provider){
+ $class=$provider['class'];
+ $options=$provider['options'];
+ self::$providers[]=new $class($options);
+ }
+ }
}
diff --git a/lib/search/provider.php b/lib/search/provider.php
index 9487ca51f2b..838ab696d04 100644
--- a/lib/search/provider.php
+++ b/lib/search/provider.php
@@ -2,11 +2,13 @@
/**
* provides search functionalty
*/
-interface OC_Search_Provider {
+class OC_Search_Provider {
+ public function __construct($options){}
+
/**
* search for $query
* @param string $query
* @return array An array of OC_Search_Result's
*/
- static function search($query);
+ public function search($query){}
}
diff --git a/lib/search/provider/file.php b/lib/search/provider/file.php
index 3bdb3bcd2af..a37af495599 100644
--- a/lib/search/provider/file.php
+++ b/lib/search/provider/file.php
@@ -1,7 +1,7 @@
<?php
-class OC_Search_Provider_File implements OC_Search_Provider{
- static function search($query){
+class OC_Search_Provider_File extends OC_Search_Provider{
+ function search($query){
$files=OC_FileCache::search($query,true);
$results=array();
foreach($files as $fileData){
diff --git a/lib/template.php b/lib/template.php
index 5bcf52b9321..cb39a10df31 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -76,7 +76,7 @@ function simple_file_size($bytes) {
}
function relative_modified_date($timestamp) {
- $l=new OC_L10N('template');
+ $l=OC_L10N::get('template');
$timediff = time() - $timestamp;
$diffminutes = round($timediff/60);
$diffhours = round($diffminutes/60);
@@ -155,7 +155,7 @@ class OC_Template{
$this->renderas = $renderas;
$this->application = $app;
$this->vars = array();
- $this->l10n = new OC_L10N($app);
+ $this->l10n = OC_L10N::get($app);
$this->findTemplate($name);
}
diff --git a/lib/updater.php b/lib/updater.php
index 196822ac35d..deb0f05945e 100644
--- a/lib/updater.php
+++ b/lib/updater.php
@@ -59,9 +59,9 @@ class OC_Updater{
public static function ShowUpdatingHint(){
$data=OC_Updater::check();
if(isset($data['version']) and $data['version']<>'') {
- $txt='<span style="color:#AA0000; font-weight:bold;">'.$data['versionstring'].' is available. Please click <a href="'.$data['web'].'">here</a> for more information</span>';
+ $txt='<span style="color:#AA0000; font-weight:bold;">'.$data['versionstring'].' is available. Get <a href="'.$data['web'].'">more information</a></span>';
}else{
- $txt='Your ownCloud is up to date';
+ $txt='up to date';
}
return($txt);
}
diff --git a/lib/user/database.php b/lib/user/database.php
index 3eade276dd9..c1bac1bb0b5 100644
--- a/lib/user/database.php
+++ b/lib/user/database.php
@@ -172,7 +172,7 @@ class OC_User_Database extends OC_User_Backend {
* @return boolean
*/
public function userExists($uid){
- $query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE uid = ?" );
+ $query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE uid LIKE ?" );
$result = $query->execute( array( $uid ));
return $result->numRows() > 0;
diff --git a/lib/user/dummy.php b/lib/user/dummy.php
new file mode 100644
index 00000000000..cfc96c5c52d
--- /dev/null
+++ b/lib/user/dummy.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+* ownCloud
+*
+* @author Frank Karlitschek
+* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+/**
+ * dummy user backend, does not keep state, only for testing use
+ */
+class OC_User_Dummy extends OC_User_Backend {
+ private $users=array();
+ /**
+ * @brief Create a new user
+ * @param $uid The username of the user to create
+ * @param $password The password of the new user
+ * @returns true/false
+ *
+ * Creates a new user. Basic checking of username is done in OC_User
+ * itself, not in its subclasses.
+ */
+ public function createUser($uid, $password){
+ if(isset($this->users[$uid])){
+ return false;
+ }else{
+ $this->users[$uid]=$password;
+ return true;
+ }
+ }
+
+ /**
+ * @brief delete a user
+ * @param $uid The username of the user to delete
+ * @returns true/false
+ *
+ * Deletes a user
+ */
+ public function deleteUser( $uid ){
+ if(isset($this->users[$uid])){
+ unset($this->users[$uid]);
+ return true;
+ }else{
+ return false;
+ }
+ }
+
+ /**
+ * @brief Set password
+ * @param $uid The username
+ * @param $password The new password
+ * @returns true/false
+ *
+ * Change the password of a user
+ */
+ public function setPassword($uid, $password){
+ if(isset($this->users[$uid])){
+ $this->users[$uid]=$password;
+ return true;
+ }else{
+ return false;
+ }
+ }
+
+ /**
+ * @brief Check if the password is correct
+ * @param $uid The username
+ * @param $password The password
+ * @returns true/false
+ *
+ * Check if the password is correct without logging in the user
+ */
+ public function checkPassword($uid, $password){
+ if(isset($this->users[$uid])){
+ return ($this->users[$uid]==$password);
+ }else{
+ return false;
+ }
+ }
+
+ /**
+ * @brief Get a list of all users
+ * @returns array with all uids
+ *
+ * Get a list of all users.
+ */
+ public function getUsers(){
+ return array_keys($this->users);
+ }
+
+ /**
+ * @brief check if a user exists
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function userExists($uid){
+ return isset($this->users[$uid]);
+ }
+}
diff --git a/lib/util.php b/lib/util.php
index 34f535d2d5c..2ea392ec31d 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -25,7 +25,7 @@ class OC_Util {
$success=@mkdir($CONFIG_DATADIRECTORY_ROOT);
if(!$success) {
$tmpl = new OC_Template( '', 'error', 'guest' );
- $tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' ")));
+ $tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'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' ")));
$tmpl->printPage();
exit;
}
diff --git a/settings/ajax/disableapp.php b/settings/ajax/disableapp.php
index 06dd3c2ac6b..53e9be379e1 100644
--- a/settings/ajax/disableapp.php
+++ b/settings/ajax/disableapp.php
@@ -6,4 +6,4 @@ OC_JSON::setContentTypeHeader();
OC_App::disable($_POST['appid']);
-?>
+OC_JSON::success();
diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php
index 639df2aecc0..cb116ebe4e8 100644
--- a/settings/ajax/enableapp.php
+++ b/settings/ajax/enableapp.php
@@ -5,6 +5,8 @@ require_once('../../lib/base.php');
OC_JSON::checkAdminUser();
OC_JSON::setContentTypeHeader();
-OC_App::enable($_POST['appid']);
-
-?>
+if(OC_App::enable($_POST['appid'])){
+ OC_JSON::success();
+}else{
+ OC_JSON::error();
+}
diff --git a/settings/ajax/lostpassword.php b/settings/ajax/lostpassword.php
index a2dfc033206..5874dec9647 100644
--- a/settings/ajax/lostpassword.php
+++ b/settings/ajax/lostpassword.php
@@ -5,7 +5,7 @@ require_once('../../lib/base.php');
OC_JSON::checkLoggedIn();
-$l=new OC_L10N('core');
+$l=OC_L10N::get('core');
// Get data
if( isset( $_POST['email'] ) ){
diff --git a/settings/ajax/openid.php b/settings/ajax/openid.php
index c4b119b448d..58d071255c2 100644
--- a/settings/ajax/openid.php
+++ b/settings/ajax/openid.php
@@ -3,7 +3,7 @@
// Init owncloud
require_once('../../lib/base.php');
-$l=new OC_L10N('settings');
+$l=OC_L10N::get('settings');
OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('user_openid');
diff --git a/settings/ajax/setlanguage.php b/settings/ajax/setlanguage.php
index dc1128de2e5..d8d1a860378 100644
--- a/settings/ajax/setlanguage.php
+++ b/settings/ajax/setlanguage.php
@@ -3,7 +3,7 @@
// Init owncloud
require_once('../../lib/base.php');
-$l=new OC_L10N('settings');
+$l=OC_L10N::get('settings');
OC_JSON::checkLoggedIn();
diff --git a/settings/js/apps.js b/settings/js/apps.js
index e2f882c6fec..12d09ac69db 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -28,10 +28,18 @@ $(document).ready(function(){
var active=$(this).data('active');
if(app){
if(active){
- $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:app});
+ $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:app},function(result){
+ if(!result || result.status!='success'){
+ OC.dialogs.alert('Error','Error while disabling app');
+ }
+ },'json');
$('#leftcontent li[data-id="'+app+'"]').removeClass('active');
}else{
- $.post(OC.filePath('settings','ajax','enableapp.php'),{appid:app});
+ $.post(OC.filePath('settings','ajax','enableapp.php'),{appid:app},function(result){
+ if(!result || result.status!='success'){
+ OC.dialogs.alert('Error','Error while enabling app');
+ }
+ },'json');
$('#leftcontent li[data-id="'+app+'"]').addClass('active');
}
active=!active;
diff --git a/settings/personal.php b/settings/personal.php
index 07030109de7..41499657ac7 100755
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -35,7 +35,7 @@ array_unshift($languageCodes,$lang);
$languageNames=include 'languageCodes.php';
$languages=array();
foreach($languageCodes as $lang){
- $l=new OC_L10N('settings',$lang);
+ $l=OC_L10N::get('settings',$lang);
if(substr($l->t('__language_name__'),0,1)!='_'){//first check if the language name is in the translation file
$languages[]=array('code'=>$lang,'name'=>$l->t('__language_name__'));
}elseif(isset($languageNames[$lang])){
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index d40da7eb773..986cfe55ae5 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -50,10 +50,8 @@
};?>
<p class="personalblock">
- <strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?><br />
- developed by the <a href="http://ownCloud.org/credits" target="_blank">ownCloud community</a><br />
- <?php echo(OC_Updater::ShowUpdatingHint()); ?><br />
- <a href="http://gitorious.org/owncloud" target="_blank">source code</a> licensed freely under <a href="http://www.gnu.org/licenses/agpl-3.0.html" target="_blank">AGPL</a>
+ <strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?> (<?php echo(OC_Updater::ShowUpdatingHint()); ?>)<br />
+ Developed by the <a href="http://ownCloud.org/contact" target="_blank">ownCloud community</a>, the <a href="http://gitorious.org/owncloud" target="_blank">source code</a> is freely licensed under the <a href="http://www.gnu.org/licenses/agpl-3.0.html" target="_blank"><abbr title="Affero General Public License">AGPL</abbr></a>.
</p>
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
new file mode 100644
index 00000000000..5dab5afb186
--- /dev/null
+++ b/tests/lib/user/backend.php
@@ -0,0 +1,89 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+abstract class Test_User_Backend extends UnitTestCase {
+ /**
+ * @var OC_User_Backend $backend
+ */
+ protected $backend;
+
+ /**
+ * get a new unique user name
+ * test cases can override this in order to clean up created user
+ * @return array
+ */
+ public function getUser(){
+ return uniqid('test_');
+ }
+
+ public function testAddRemove(){
+ //get the number of groups we start with, in case there are exising groups
+ $startCount=count($this->backend->getUsers());
+
+ $name1=$this->getUser();
+ $name2=$this->getUser();
+ $this->backend->createUser($name1,'');
+ $count=count($this->backend->getUsers())-$startCount;
+ $this->assertEqual(1,$count);
+ $this->assertTrue((array_search($name1,$this->backend->getUsers())!==false));
+ $this->assertFalse((array_search($name2,$this->backend->getUsers())!==false));
+ $this->backend->createUser($name2,'');
+ $count=count($this->backend->getUsers())-$startCount;
+ $this->assertEqual(2,$count);
+ $this->assertTrue((array_search($name1,$this->backend->getUsers())!==false));
+ $this->assertTrue((array_search($name2,$this->backend->getUsers())!==false));
+
+ $this->backend->deleteUser($name2);
+ $count=count($this->backend->getUsers())-$startCount;
+ $this->assertEqual(1,$count);
+ $this->assertTrue((array_search($name1,$this->backend->getUsers())!==false));
+ $this->assertFalse((array_search($name2,$this->backend->getUsers())!==false));
+ }
+
+ public function testLogin(){
+ $name1=$this->getUser();
+ $name2=$this->getUser();
+
+ $this->assertFalse($this->backend->userExists($name1));
+ $this->assertFalse($this->backend->userExists($name2));
+
+ $this->backend->createUser($name1,'pass1');
+ $this->backend->createUser($name2,'pass2');
+
+ $this->assertTrue($this->backend->userExists($name1));
+ $this->assertTrue($this->backend->userExists($name2));
+
+ $this->assertTrue($this->backend->checkPassword($name1,'pass1'));
+ $this->assertTrue($this->backend->checkPassword($name2,'pass2'));
+
+ $this->assertFalse($this->backend->checkPassword($name1,'pass2'));
+ $this->assertFalse($this->backend->checkPassword($name2,'pass1'));
+
+ $this->assertFalse($this->backend->checkPassword($name1,'dummy'));
+ $this->assertFalse($this->backend->checkPassword($name2,'foobar'));
+
+ $this->backend->setPassword($name1,'newpass1');
+ $this->assertFalse($this->backend->checkPassword($name1,'pass1'));
+ $this->assertTrue($this->backend->checkPassword($name1,'newpass1'));
+ $this->assertFalse($this->backend->checkPassword($name2,'newpass1'));
+ }
+}
diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php
new file mode 100644
index 00000000000..b2fcce93c5b
--- /dev/null
+++ b/tests/lib/user/database.php
@@ -0,0 +1,45 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class Test_User_Database extends Test_User_Backend {
+ private $user=array();
+ /**
+ * get a new unique user name
+ * test cases can override this in order to clean up created user
+ * @return array
+ */
+ public function getUser(){
+ $user=uniqid('test_');
+ $this->users[]=$user;
+ return $user;
+ }
+
+ public function setUp(){
+ $this->backend=new OC_User_Dummy();
+ }
+
+ public function tearDown(){
+ foreach($this->users as $user){
+ $this->backend->deleteUser($user);
+ }
+ }
+}
diff --git a/tests/lib/user/dummy.php b/tests/lib/user/dummy.php
new file mode 100644
index 00000000000..062f55ba079
--- /dev/null
+++ b/tests/lib/user/dummy.php
@@ -0,0 +1,27 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class Test_User_Dummy extends Test_User_Backend {
+ public function setUp(){
+ $this->backend=new OC_User_Dummy();
+ }
+}