diff options
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(); + } +} |