fix merge conflicts

This commit is contained in:
Georg Ehrke 2012-04-15 12:43:07 +02:00
commit e292b1fcdb
115 changed files with 1064 additions and 587 deletions

View File

@ -1,5 +1,5 @@
<?php <?php
$l=new OC_L10N('admin_dependencies_chk'); $l=OC_L10N::get('admin_dependencies_chk');
OC_App::register( array( OC_App::register( array(
'order' => 14, 'order' => 14,

View File

@ -2,7 +2,6 @@
<info> <info>
<id>admin_dependencies_chk</id> <id>admin_dependencies_chk</id>
<name>Owncloud dependencies info</name> <name>Owncloud dependencies info</name>
<version>0.01</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Brice Maron (eMerzh)</author> <author>Brice Maron (eMerzh)</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.01

View File

@ -20,7 +20,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>. * 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'); $tmpl = new OC_Template( 'admin_dependencies_chk', 'settings');
$modules = array(); $modules = array();

View File

@ -3,7 +3,6 @@
<id>admin_migrate</id> <id>admin_migrate</id>
<name>ownCloud Instance Migration</name> <name>ownCloud Instance Migration</name>
<description>Import/Export your owncloud instance</description> <description>Import/Export your owncloud instance</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Thomas Schmidt and Tom Needham</author> <author>Thomas Schmidt and Tom Needham</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>bookmarks</id> <id>bookmarks</id>
<name>Bookmarks</name> <name>Bookmarks</name>
<description>Bookmark manager for ownCloud</description> <description>Bookmark manager for ownCloud</description>
<version>0.2</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Arthur Schiwon, Marvin Thomas Rabe</author> <author>Arthur Schiwon, Marvin Thomas Rabe</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.2

View File

@ -94,7 +94,7 @@ function addBookmark($url, $title, $tags='') {
} }
if(empty($title)) { if(empty($title)) {
$l = new OC_L10N('bookmarks'); $l = OC_L10N::get('bookmarks');
$title = $l->t('unnamed'); $title = $l->t('unnamed');
} }

View File

@ -20,8 +20,8 @@
* *
*/ */
class OC_Search_Provider_Bookmarks implements OC_Search_Provider{ class OC_Search_Provider_Bookmarks extends OC_Search_Provider{
static function search($query){ function search($query){
$results=array(); $results=array();
$offset = 0; $offset = 0;

View File

@ -1,7 +1,7 @@
<?php <?php
function createBookmarklet() { 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>' 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);})();">' . '<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>'; . $l->t('Read later') . '</a>';

View File

@ -7,7 +7,6 @@
*/ */
require_once('../../../../lib/base.php'); require_once('../../../../lib/base.php');
$l10n = new OC_L10N('calendar');
OC_JSON::checkLoggedIn(); OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar'); OC_JSON::checkAppEnabled('calendar');
$calendarcolor_options = OC_Calendar_Calendar::getCalendarColorOptions(); $calendarcolor_options = OC_Calendar_Calendar::getCalendarColorOptions();

View File

@ -7,7 +7,7 @@
*/ */
require_once('../../../../lib/base.php'); require_once('../../../../lib/base.php');
$l10n = new OC_L10N('calendar'); $l10n = OC_L10N::get('calendar');
OC_JSON::checkLoggedIn(); OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar'); OC_JSON::checkAppEnabled('calendar');
$output = new OC_TEMPLATE("calendar", "part.choosecalendar"); $output = new OC_TEMPLATE("calendar", "part.choosecalendar");

View File

@ -17,4 +17,4 @@ if($access != 'owner' && $access != 'rw'){
exit; exit;
} }
$result = OC_Calendar_Object::delete($id); $result = OC_Calendar_Object::delete($id);
OC_JSON::success(); OC_JSON::success();

View File

@ -8,8 +8,6 @@
require_once('../../../../lib/base.php'); require_once('../../../../lib/base.php');
$l10n = new OC_L10N('calendar');
OC_JSON::checkLoggedIn(); OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar'); OC_JSON::checkAppEnabled('calendar');

View File

@ -23,4 +23,4 @@ foreach($events as $event){
} }
OC_JSON::encodedPrint($output); OC_JSON::encodedPrint($output);
?> ?>

View File

@ -9,7 +9,6 @@
require_once('../../../../lib/base.php'); require_once('../../../../lib/base.php');
OC_JSON::checkLoggedIn(); OC_JSON::checkLoggedIn();
OC_Util::checkAppEnabled('calendar'); OC_Util::checkAppEnabled('calendar');
$l10n = new OC_L10N('calendar');
$tmpl = new OC_Template('calendar', 'part.import'); $tmpl = new OC_Template('calendar', 'part.import');
$tmpl->assign('path', $_POST['path']); $tmpl->assign('path', $_POST['path']);
$tmpl->assign('filename', $_POST['filename']); $tmpl->assign('filename', $_POST['filename']);

View File

@ -10,7 +10,7 @@ require_once('../../../../lib/base.php');
OC_JSON::checkLoggedIn(); OC_JSON::checkLoggedIn();
OC_JSON::checkAppEnabled('calendar'); OC_JSON::checkAppEnabled('calendar');
$l = new OC_L10N('calendar'); $l = OC_L10N::get('calendar');
$lat = $_GET['lat']; $lat = $_GET['lat'];
$lng = $_GET['long']; $lng = $_GET['long'];

View File

@ -9,7 +9,7 @@
// Init owncloud // Init owncloud
require_once('../../../../lib/base.php'); require_once('../../../../lib/base.php');
$l=new OC_L10N('calendar'); $l=OC_L10N::get('calendar');
// Check if we are a user // Check if we are a user
OC_JSON::checkLoggedIn(); OC_JSON::checkLoggedIn();

View File

@ -1,5 +1,5 @@
<?php <?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_App'] = 'apps/calendar/lib/app.php';
OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php'; OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php';
OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php'; OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php';

View File

@ -2,7 +2,6 @@
<info> <info>
<id>calendar</id> <id>calendar</id>
<name>Calendar</name> <name>Calendar</name>
<version>0.3</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Georg Ehrke, Bart Visscher, Jakob Sack</author> <author>Georg Ehrke, Bart Visscher, Jakob Sack</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.3

View File

@ -17,6 +17,10 @@ class OC_Calendar_App{
* @brief language object for calendar app * @brief language object for calendar app
*/ */
public static $l10n; public static $l10n;
/*
* @brief categories of the user
*/
protected static $categories = null; protected static $categories = null;
/* /*
@ -107,7 +111,11 @@ class OC_Calendar_App{
} }
return true; return true;
} }
/*
* @brief returns the default categories of ownCloud
* @return (array) $categories
*/
protected static function getDefaultCategories() protected static function getDefaultCategories()
{ {
return array( return array(
@ -128,14 +136,22 @@ class OC_Calendar_App{
self::$l10n->t('Work'), self::$l10n->t('Work'),
); );
} }
/*
* @brief returns the vcategories object of the user
* @return (object) $vcategories
*/
protected static function getVCategories() { protected static function getVCategories() {
if (is_null(self::$categories)) { if (is_null(self::$categories)) {
self::$categories = new OC_VCategories('calendar', null, self::getDefaultCategories()); self::$categories = new OC_VCategories('calendar', null, self::getDefaultCategories());
} }
return self::$categories; return self::$categories;
} }
/*
* @brief returns the categories of the vcategories object
* @return (array) $categories
*/
public static function getCategoryOptions() public static function getCategoryOptions()
{ {
$categories = self::getVCategories()->categories(); $categories = self::getVCategories()->categories();
@ -402,4 +418,4 @@ class OC_Calendar_App{
} }
return $output; return $output;
} }
} }

View File

@ -1,6 +1,6 @@
<?php <?php
class OC_Search_Provider_Calendar implements OC_Search_Provider{ class OC_Search_Provider_Calendar extends OC_Search_Provider{
static function search($query){ function search($query){
$calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser(), 1); $calendars = OC_Calendar_Calendar::allCalendars(OC_User::getUser(), 1);
if(count($calendars)==0 || !OC_App::isEnabled('calendar')){ if(count($calendars)==0 || !OC_App::isEnabled('calendar')){
//return false; //return false;

View File

@ -20,7 +20,7 @@ OC_App::addNavigationEntry( array(
'order' => 10, 'order' => 10,
'href' => OC_Helper::linkTo( 'contacts', 'index.php' ), 'href' => OC_Helper::linkTo( 'contacts', 'index.php' ),
'icon' => OC_Helper::imagePath( 'settings', 'users.svg' ), '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'); OC_APP::registerPersonal('contacts','settings');

View File

@ -2,7 +2,6 @@
<info> <info>
<id>contacts</id> <id>contacts</id>
<name>Contacts</name> <name>Contacts</name>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Jakob Sack</author> <author>Jakob Sack</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -9,7 +9,7 @@
/** /**
* This class manages our app actions * 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'); OC_Contacts_App::$categories = new OC_VCategories('contacts');
class OC_Contacts_App { class OC_Contacts_App {
public static $l10n; public static $l10n;

View File

@ -1,6 +1,6 @@
<?php <?php
class OC_Search_Provider_Contacts implements OC_Search_Provider{ class OC_Search_Provider_Contacts extends OC_Search_Provider{
static function search($query){ function search($query){
$addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1); $addressbooks = OC_Contacts_Addressbook::all(OC_User::getUser(), 1);
// if(count($calendars)==0 || !OC_App::isEnabled('contacts')){ // if(count($calendars)==0 || !OC_App::isEnabled('contacts')){
// //return false; // //return false;

View File

@ -1,5 +1,5 @@
<div id="firstrun"> <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"> <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('Import contacts') ?>" onclick="Contacts.UI.Addressbooks.doImport()" />
<input type="button" value="<?php echo $l->t('Add contact') ?>" onclick="Contacts.UI.Card.editNew()" /> <input type="button" value="<?php echo $l->t('Add contact') ?>" onclick="Contacts.UI.Card.editNew()" />

View File

@ -3,7 +3,6 @@
<id>external</id> <id>external</id>
<name>External</name> <name>External</name>
<description>Show external Application in the ownCloud menu</description> <description>Show external Application in the ownCloud menu</description>
<version>1.0</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Frank Karlitschek</author> <author>Frank Karlitschek</author>
<require>2</require> <require>2</require>

1
apps/external/appinfo/version vendored Normal file
View File

@ -0,0 +1 @@
1.0

View File

@ -3,7 +3,6 @@
<id>files_archive</id> <id>files_archive</id>
<name>Archive support</name> <name>Archive support</name>
<description>Transparent opening of archives</description> <description>Transparent opening of archives</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Robin Appelman</author> <author>Robin Appelman</author>
<require>3</require> <require>3</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>files_encryption</id> <id>files_encryption</id>
<name>Encryption</name> <name>Encryption</name>
<description>Server side encryption of files</description> <description>Server side encryption of files</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Robin Appelman</author> <author>Robin Appelman</author>
<require>3</require> <require>3</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>files_external</id> <id>files_external</id>
<name>External storage support</name> <name>External storage support</name>
<description>Mount external storage sources</description> <description>Mount external storage sources</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Robin Appelman</author> <author>Robin Appelman</author>
<require>3</require> <require>3</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>files_imageviewer</id> <id>files_imageviewer</id>
<name>Image Viewer</name> <name>Image Viewer</name>
<description>Simple image viewer for owncloud</description> <description>Simple image viewer for owncloud</description>
<version>1.0</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Robin Appelman</author> <author>Robin Appelman</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
1.0

View File

@ -3,7 +3,6 @@
<id>files_pdfviewer</id> <id>files_pdfviewer</id>
<name>PDF Viewer</name> <name>PDF Viewer</name>
<description>Inline PDF viewer (pdfjs-based)</description> <description>Inline PDF viewer (pdfjs-based)</description>
<version>0.1</version>
<licence>GPL</licence> <licence>GPL</licence>
<author>Joan Creus</author> <author>Joan Creus</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>files_sharing</id> <id>files_sharing</id>
<name>Share Files</name> <name>Share Files</name>
<description>File sharing between users</description> <description>File sharing between users</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Michael Gapczynski</author> <author>Michael Gapczynski</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -62,6 +62,8 @@ if ($source !== false) {
$tmpl->assign("fileList", $list->fetchPage()); $tmpl->assign("fileList", $list->fetchPage());
$tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage()); $tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage());
$tmpl->assign("readonly", true); $tmpl->assign("readonly", true);
$tmpl->assign("allowZipDownload", false);
$tmpl->assign("dir", 'shared dir');
$tmpl->printPage(); $tmpl->printPage();
} else { } else {
//get time mimetype and set the headers //get time mimetype and set the headers

View File

@ -2,8 +2,11 @@ $(document).ready(function() {
var shared_status = {}; var shared_status = {};
if (typeof FileActions !== 'undefined') { if (typeof FileActions !== 'undefined') {
FileActions.register('all', 'Share', function(filename) { 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; var icon;
if (typeof filename == 'undefined') {
return false;
}
var file = $('#dir').val()+'/'+filename; var file = $('#dir').val()+'/'+filename;
if(shared_status[file]) if(shared_status[file])
return shared_status[file].icon; return shared_status[file].icon;
@ -145,7 +148,7 @@ $(document).ready(function() {
data: data, data: data,
success: function(token) { success: function(token) {
if (token) { if (token) {
showPublicLink(token); showPublicLink(token, source.substr(source.lastIndexOf('/')));
} }
} }
}); });
@ -203,7 +206,7 @@ function createDropdown(filename, files) {
if (users) { if (users) {
$.each(users, function(index, row) { $.each(users, function(index, row) {
if (row.uid_shared_with == 'public') { if (row.uid_shared_with == 'public') {
showPublicLink(row.token); showPublicLink(row.token, '/'+filename);
} else if (isNaN(index)) { } else if (isNaN(index)) {
addUser(row.uid_shared_with, row.permissions, index.substr(0, index.lastIndexOf('-'))); addUser(row.uid_shared_with, row.permissions, index.substr(0, index.lastIndexOf('-')));
} else { } else {
@ -234,9 +237,9 @@ function addUser(uid_shared_with, permissions, parentFolder) {
$(user).appendTo('#shared_list'); $(user).appendTo('#shared_list');
} }
function showPublicLink(token) { function showPublicLink(token, file) {
$('#makelink').attr('checked', true); $('#makelink').attr('checked', true);
$('#link').data('token', token); $('#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'); $('#link').show('blind');
} }

View File

@ -3,7 +3,6 @@
<id>files_texteditor</id> <id>files_texteditor</id>
<name>Text Editor</name> <name>Text Editor</name>
<description>Simple plain text editor based on Ace editor.</description> <description>Simple plain text editor based on Ace editor.</description>
<version>0.3</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Tom Needham</author> <author>Tom Needham</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.3

View File

@ -59,7 +59,7 @@ function setSyntaxMode(ext){
var SyntaxMode = require("ace/mode/"+filetype[ext]).Mode; var SyntaxMode = require("ace/mode/"+filetype[ext]).Mode;
window.aceEditor.getSession().setMode(new SyntaxMode()); window.aceEditor.getSession().setMode(new SyntaxMode());
}); });
} }
} }
function showControls(filename,writeperms){ function showControls(filename,writeperms){
@ -69,17 +69,16 @@ function showControls(filename,writeperms){
if(writeperms=="true"){ if(writeperms=="true"){
editorbarhtml += '<button id="editor_save">'+t('files_texteditor','Save')+'</button><div class="separator"></div>'; 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 // Change breadcrumb classes
$('#controls .last').removeClass('last'); $('#controls .last').removeClass('last');
$('#controls').append(editorbarhtml); $('#controls').append(editorbarhtml);
$('#editorcontrols').fadeIn('slow'); $('#editorcontrols').fadeIn('slow');
} }
function bindControlEvents(){ 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); $('#editor_close').die('click',hideFileEditor).live('click',hideFileEditor);
$('#gotolineval').die('keyup', goToLine).live('keyup', goToLine);
$('#editorsearchval').die('keyup', doSearch).live('keyup', doSearch); $('#editorsearchval').die('keyup', doSearch).live('keyup', doSearch);
$('#clearsearchbtn').die('click', resetSearch).live('click', resetSearch); $('#clearsearchbtn').die('click', resetSearch).live('click', resetSearch);
$('#nextsearchbtn').die('click', nextSearchResult).live('click', nextSearchResult); $('#nextsearchbtn').die('click', nextSearchResult).live('click', nextSearchResult);
@ -91,19 +90,12 @@ function editorIsShown(){
return is_editor_shown; 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 //resets the search
function resetSearch(){ function resetSearch(){
$('#editorsearchval').val(''); $('#editorsearchval').val('');
$('#nextsearchbtn').remove(); $('#nextsearchbtn').remove();
$('#clearsearchbtn').remove(); $('#clearsearchbtn').remove();
window.aceEditor.gotoLine(0); window.aceEditor.gotoLine(0);
} }
// moves the cursor to the next search resukt // moves the cursor to the next search resukt
@ -111,10 +103,10 @@ function nextSearchResult(){
window.aceEditor.findNext(); window.aceEditor.findNext();
} }
// Performs the initial search // Performs the initial search
function doSearch(){ function doSearch(){
// check if search box empty? // check if search box empty?
if($('#editorsearchval').val()==''){ if($('#editorsearchval').val()==''){
// Hide clear button // Hide clear button
window.aceEditor.gotoLine(0); window.aceEditor.gotoLine(0);
$('#nextsearchbtn').remove(); $('#nextsearchbtn').remove();
$('#clearsearchbtn').remove(); $('#clearsearchbtn').remove();
@ -129,7 +121,7 @@ function doSearch(){
caseSensitive: false, caseSensitive: false,
wholeWord: false, wholeWord: false,
regExp: false regExp: false
}); });
// Show next and clear buttons // Show next and clear buttons
// check if already there // check if already there
if($('#nextsearchbtn').length==0){ if($('#nextsearchbtn').length==0){
@ -161,16 +153,16 @@ function doFileSave(){
// Save failed // Save failed
$('#editor_save').text(t('files_texteditor','Save')); $('#editor_save').text(t('files_texteditor','Save'));
$('#editor_save').after('<p id="save_result" style="float: left">Failed to save file</p>'); $('#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 { } else {
// Save OK // Save OK
// Update mtime // Update mtime
$('#editor').attr('data-mtime',jsondata.data.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); $("#editor_save").live('click',doFileSave);
// Update titles // Update titles
$('#editor').attr('data-edited', 'false'); $('#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'; document.title = $('#editor').attr('data-filename')+' - ownCloud';
} }
},'json'); },'json');
@ -223,7 +215,7 @@ function showFileEditor(dir,filename){
window.aceEditor.getSession().on('change', function(){ window.aceEditor.getSession().on('change', function(){
if($('#editor').attr('data-edited')!='true'){ if($('#editor').attr('data-edited')!='true'){
$('#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'; document.title = $('#editor').attr('data-filename')+' * - ownCloud';
} }
}); });
@ -243,7 +235,7 @@ function showFileEditor(dir,filename){
// Fades out the editor. // Fades out the editor.
function hideFileEditor(){ function hideFileEditor(){
if($('#editor').attr('data-edited') == 'true'){ if($('#editor').attr('data-edited') == 'true'){
// Hide, not remove // Hide, not remove
$('#editorcontrols').fadeOut('slow',function(){ $('#editorcontrols').fadeOut('slow',function(){
// Check if there is a folder in the breadcrumb // Check if there is a folder in the breadcrumb
if($('.crumb.ui-droppable').length){ if($('.crumb.ui-droppable').length){
@ -255,7 +247,7 @@ function hideFileEditor(){
// Reset document title // Reset document title
document.title = "ownCloud"; document.title = "ownCloud";
$('.actions,#file_access_panel').fadeIn('slow'); $('.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').text(t('files_texteditor','There were unsaved changes, click here to go back'));
$('#notification').data('reopeneditor',true); $('#notification').data('reopeneditor',true);
@ -273,7 +265,7 @@ function hideFileEditor(){
// Reset document title // Reset document title
document.title = "ownCloud"; document.title = "ownCloud";
$('.actions,#file_access_panel').fadeIn('slow'); $('.actions,#file_access_panel').fadeIn('slow');
$('table').fadeIn('slow'); $('table').fadeIn('slow');
}); });
is_editor_shown = false; is_editor_shown = false;
} }
@ -287,7 +279,7 @@ function reopenEditor(){
$('#editor').fadeIn('fast'); $('#editor').fadeIn('fast');
$('#editorcontrols').fadeIn('fast', function(){ $('#editorcontrols').fadeIn('fast', function(){
}); });
}); });
is_editor_shown = true; is_editor_shown = true;
} }

View File

@ -2,7 +2,6 @@
<info> <info>
<id>files_versioning</id> <id>files_versioning</id>
<name>Versioning and Backup</name> <name>Versioning and Backup</name>
<version>1.0.0</version>
<licence>GPLv2</licence> <licence>GPLv2</licence>
<author>Craig Roberts</author> <author>Craig Roberts</author>
<require>3</require> <require>3</require>

View File

@ -0,0 +1 @@
1.0.0

View File

@ -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_Sharing'] = 'apps/gallery/lib/sharing.php';
OC::$CLASSPATH['OC_Gallery_Hooks_Handlers'] = 'apps/gallery/lib/hooks_handlers.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( OC_App::register(array(
'order' => 20, 'order' => 20,
@ -41,8 +41,8 @@ OC_App::addNavigationEntry( array(
'icon' => OC_Helper::imagePath('core', 'places/picture.svg'), 'icon' => OC_Helper::imagePath('core', 'places/picture.svg'),
'name' => $l->t('Pictures'))); 'name' => $l->t('Pictures')));
class OC_GallerySearchProvider implements OC_Search_Provider{ class OC_GallerySearchProvider extends OC_Search_Provider{
static function search($query){ function search($query){
$stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?'); $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?');
$result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%')); $result = $stmt->execute(array(OC_User::getUser(),'%'.$query.'%'));
$results=array(); $results=array();

View File

@ -2,7 +2,6 @@
<info> <info>
<id>gallery</id> <id>gallery</id>
<name>Pictures</name> <name>Pictures</name>
<version>0.4</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Bartek Przybylski</author> <author>Bartek Przybylski</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.4

View File

@ -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.mousewheel-3.0.4.pack');
OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack'); OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' ); 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> <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"> <div id="controls">

View File

@ -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.mousewheel-3.0.4.pack');
OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack'); OC_Util::addScript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' ); OC_Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
$l = new OC_L10N('gallery'); $l = OC_L10N::get('gallery');
?> ?>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {

View File

@ -20,7 +20,7 @@
* *
*/ */
$l=new OC_L10N('media'); $l=OC_L10N::get('media');
require_once('apps/media/lib_media.php'); require_once('apps/media/lib_media.php');

View File

@ -3,7 +3,6 @@
<id>media</id> <id>media</id>
<name>Media</name> <name>Media</name>
<description>Media player and server for ownCloud</description> <description>Media player and server for ownCloud</description>
<version>0.3</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Robin Appelman</author> <author>Robin Appelman</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.3

View File

@ -82,8 +82,8 @@ class OC_MEDIA{
} }
} }
class OC_MediaSearchProvider implements OC_Search_Provider{ class OC_MediaSearchProvider extends OC_Search_Provider{
static function search($query){ function search($query){
require_once('lib_collection.php'); require_once('lib_collection.php');
$artists=OC_MEDIA_COLLECTION::getArtists($query); $artists=OC_MEDIA_COLLECTION::getArtists($query);
$albums=OC_MEDIA_COLLECTION::getAlbums(0,$query); $albums=OC_MEDIA_COLLECTION::getAlbums(0,$query);

View File

@ -3,7 +3,6 @@
<id>remoteStorage</id> <id>remoteStorage</id>
<name>remoteStorage compatibility</name> <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> <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> <licence>AGPL or MIT</licence>
<author>Michiel de Jong</author> <author>Michiel de Jong</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.6

View File

@ -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/user_ldap.php');
require_once('apps/user_ldap/group_ldap.php');
OC_APP::registerAdmin('user_ldap','settings'); OC_APP::registerAdmin('user_ldap','settings');
@ -33,6 +35,7 @@ define('OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME', 'uid');
// register user backend // register user backend
OC_User::useBackend( 'LDAP' ); OC_User::useBackend( 'LDAP' );
OC_Group::useBackend( 'LDAP' );
// add settings page to navigation // add settings page to navigation
$entry = array( $entry = array(

View File

@ -3,7 +3,6 @@
<id>user_ldap</id> <id>user_ldap</id>
<name>LDAP user backend</name> <name>LDAP user backend</name>
<description>Authenticate Users by LDAP</description> <description>Authenticate Users by LDAP</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Dominik Schmidt</author> <author>Dominik Schmidt</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -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);
}
}
}

118
apps/user_ldap/lib_ldap.php Normal file
View File

@ -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;
}
}
}
}

View File

@ -1,10 +1,9 @@
<?php <?php
/** /**
* ownCloud * ownCloud
* *
* @author Frank Karlitschek * @author Arthur Schiwon
* @copyright 2010 Frank Karlitschek karlitschek@kde.org * @copyright 2012 Arthur Schiwon blizzz@owncloud.com
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@ -21,20 +20,17 @@
* *
*/ */
/** class Test_Group_Ldap extends UnitTestCase {
* Class for connecting multiply ownCloud installations function setUp(){
* OC_Group::clearBackends();
*/
class OC_Connect{
static private $clouds=array();
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()));
}
} }

View File

@ -94,10 +94,6 @@ class OC_USER_LDAP extends OC_User_Backend {
if( !$this->ldap_dc ) if( !$this->ldap_dc )
return false; return false;
$email = OC_Preferences::getValue($uid, 'settings', 'email', '');
if ( !empty( $email ) )
return false;
$email = $this->ldap_dc[$this->ldap_email_attr][0]; $email = $this->ldap_dc[$this->ldap_email_attr][0];
OC_Preferences::setValue($uid, 'settings', 'email', $email); OC_Preferences::setValue($uid, 'settings', 'email', $email);
} }

View File

@ -3,7 +3,6 @@
<id>user_migrate</id> <id>user_migrate</id>
<name>User Account Migration</name> <name>User Account Migration</name>
<description>Migrate your user accounts</description> <description>Migrate your user accounts</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Tom Needham</author> <author>Tom Needham</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>user_openid</id> <id>user_openid</id>
<name>OpenID user backend</name> <name>OpenID user backend</name>
<description>Allow login through OpenID</description> <description>Allow login through OpenID</description>
<version>0.1</version>
<licence>AGPL</licence> <licence>AGPL</licence>
<author>Robin Appelman</author> <author>Robin Appelman</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.1

View File

@ -3,7 +3,6 @@
<id>user_webfinger</id> <id>user_webfinger</id>
<name>Webfinger</name> <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> <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> <licence>AGPL or MIT</licence>
<author>Michiel de Jong, Florian Hülsmann</author> <author>Michiel de Jong, Florian Hülsmann</author>
<require>2</require> <require>2</require>

View File

@ -0,0 +1 @@
0.3

View File

@ -26,7 +26,7 @@ require_once('../../lib/base.php');
$app = $_POST["app"]; $app = $_POST["app"];
$l = new OC_L10N( $app ); $l = OC_L10N::get( $app );
OC_JSON::success(array('data' => $l->getTranslations())); OC_JSON::success(array('data' => $l->getTranslations()));
?> ?>

View File

@ -49,7 +49,7 @@ input[type="checkbox"] { width:auto; }
#body-login input[type="text"], #body-login input[type="password"] { width: 13em; } #body-login input[type="text"], #body-login input[type="password"] { width: 13em; }
#body-login input.login { width: auto; float: right; } #body-login input.login { width: auto; float: right; }
#remember_login { margin:.8em .2em 0 1em; } #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"].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; } 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; } #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; } .action { width: 16px; height: 16px; }
#logout { opacity:.8; }
.action:hover, .selectedActions a:hover, #logout:hover { opacity:1; } .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; } table:not(.nostyle) tr { -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; }

View File

@ -297,7 +297,10 @@ function object(o) {
* Fills height of window. (more precise than height: 100%;) * Fills height of window. (more precise than height: 100%;)
*/ */
function fillHeight(selector) { 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'); selector.css('height', height + 'px');
if(selector.outerHeight() > selector.height()) if(selector.outerHeight() > selector.height())
selector.css('height', height-(selector.outerHeight()-selector.height()) + 'px'); 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%;) * Fills height and width of window. (more precise than height: 100%; or width: 100%;)
*/ */
function fillWindow(selector) { function fillWindow(selector) {
if (selector.length == 0) {
return;
}
fillHeight(selector); fillHeight(selector);
var width = parseFloat($(window).width())-parseFloat(selector.css('left')); var width = parseFloat($(window).width())-selector.offset().left;
selector.css('width', width + 'px'); selector.css('width', width + 'px');
if(selector.outerWidth() > selector.width()) if(selector.outerWidth() > selector.width())
selector.css('width', width-(selector.outerWidth()-selector.width()) + 'px'); selector.css('width', width-(selector.outerWidth()-selector.width()) + 'px');

View File

@ -20,7 +20,7 @@ if (isset($_POST['user'])) {
$tmpl = new OC_Template('core/lostpassword', 'email'); $tmpl = new OC_Template('core/lostpassword', 'email');
$tmpl->assign('link', $link); $tmpl->assign('link', $link);
$msg = $tmpl->fetchPage(); $msg = $tmpl->fetchPage();
$l = new OC_L10N('core'); $l = OC_L10N::get('core');
$from = 'lostpassword-noreply@' . $_SERVER['HTTP_HOST']; $from = 'lostpassword-noreply@' . $_SERVER['HTTP_HOST'];
mail($email, $l->t('Owncloud password reset'), $msg, 'From:' . $from); mail($email, $l->t('Owncloud password reset'), $msg, 'From:' . $from);
} }

View File

@ -1,7 +1,7 @@
<?php <?php
//some strings that are used in /lib but wont be translatable unless they are in /core too //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("Personal");
$l->t("Users"); $l->t("Users");
$l->t("Apps"); $l->t("Apps");

View File

@ -14,7 +14,7 @@ if (!isset($_FILES['files'])) {
} }
foreach ($_FILES['files']['error'] as $error) { foreach ($_FILES['files']['error'] as $error) {
if ($error != 0) { if ($error != 0) {
$l=new OC_L10N('files'); $l=OC_L10N::get('files');
$errors = array( $errors = array(
UPLOAD_ERR_OK=>$l->t("There is no error, the file uploaded with success"), 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'), UPLOAD_ERR_INI_SIZE=>$l->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),

View File

@ -1,7 +1,7 @@
<?php <?php
$l=new OC_L10N('files'); $l=OC_L10N::get('files');
OC_App::register( array( "order" => 2, "id" => "files", "name" => "Files" )); OC_App::register( array( "order" => 2, "id" => "files", "name" => "Files" ));

View File

@ -35,6 +35,7 @@ class OC_App{
static private $adminForms = array(); static private $adminForms = array();
static private $personalForms = array(); static private $personalForms = array();
static private $appInfo = array(); static private $appInfo = array();
static private $appTypes = array();
/** /**
* @brief loads all apps * @brief loads all apps
@ -85,11 +86,7 @@ class OC_App{
if(is_string($types)){ if(is_string($types)){
$types=array($types); $types=array($types);
} }
$appData=self::getAppInfo($app); $appTypes=self::getAppTypes($app);
if(!isset($appData['types'])){
return false;
}
$appTypes=$appData['types'];
foreach($types as $type){ foreach($types as $type){
if(array_search($type,$appTypes)!==false){ if(array_search($type,$appTypes)!==false){
return true; return true;
@ -97,6 +94,32 @@ class OC_App{
} }
return false; 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 * get all enabled apps
@ -139,13 +162,18 @@ class OC_App{
if(!is_numeric($app)){ if(!is_numeric($app)){
OC_Installer::installShippedApp($app); OC_Installer::installShippedApp($app);
}else{ }else{
$download=OC_OCSClient::getApplicationDownload($app,1); $download=OC_OCSClient::getApplicationDownload($app,1);
if(isset($download['downloadlink']) and $download['downloadlink']<>'') { if(isset($download['downloadlink']) and $download['downloadlink']!='') {
$app=OC_Installer::installApp(array('source'=>'http','href'=>$download['downloadlink'])); $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. * entries are sorted by the key 'order' ascending.
*/ */
public static function getSettingsNavigation(){ public static function getSettingsNavigation(){
$l=new OC_L10N('core'); $l=OC_L10N::get('core');
$settings = array(); $settings = array();
// by default, settings only contain the help menu // by default, settings only contain the help menu
@ -302,6 +330,20 @@ class OC_App{
return $list; 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 * @brief Read app metadata from the info.xml file
@ -436,12 +478,11 @@ class OC_App{
// The rest comes here // The rest comes here
$versions = self::getAppVersions(); $versions = self::getAppVersions();
foreach( $versions as $app=>$installedVersion ){ foreach( $versions as $app=>$installedVersion ){
$appInfo=OC_App::getAppInfo($app); $currentVersion=OC_App::getAppVersion($app);
if (isset($appInfo['version'])) { if ($currentVersion) {
$currentVersion=$appInfo['version'];
if (version_compare($currentVersion, $installedVersion, '>')) { if (version_compare($currentVersion, $installedVersion, '>')) {
OC_App::updateApp($app); OC_App::updateApp($app);
OC_Appconfig::setValue($app,'installed_version',$appInfo['version']); OC_Appconfig::setValue($app,'installed_version',OC_App::getAppVersion($app));
} }
} }
} }

View File

@ -163,4 +163,38 @@ class OC_Appconfig{
return true; 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;
}
} }

View File

@ -36,7 +36,25 @@ class OC_DB {
static private $affected=0; static private $affected=0;
static private $result=false; static private $result=false;
static private $inTransaction=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 * @brief connects to the database
* @returns true if connection can be established or nothing (die()) * @returns true if connection can be established or nothing (die())
@ -48,15 +66,7 @@ class OC_DB {
return; return;
} }
if(is_null($backend)){ if(is_null($backend)){
$backend=self::BACKEND_MDB2; $backend=self::getDBBackend();
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;
}
}
} }
if($backend==self::BACKEND_PDO){ if($backend==self::BACKEND_PDO){
self::connectPDO(); self::connectPDO();
@ -423,8 +433,14 @@ class OC_DB {
private static function processQuery( $query ){ private static function processQuery( $query ){
self::connect(); self::connect();
// We need Database type and table prefix // We need Database type and table prefix
$type = OC_Config::getValue( "dbtype", "sqlite" ); if(is_null(self::$type)){
$prefix = OC_Config::getValue( "dbtableprefix", "oc_" ); 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 // differences in escaping of table names ('`' for mysql) and getting the current timestamp
if( $type == 'sqlite' || $type == 'sqlite3' ){ 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 * @param $file string path to the MDB2 xml db export file
*/ */
public static function replaceDB( $file ){ public static function replaceDB( $file ){

View File

@ -281,6 +281,7 @@ class OC_FileCache{
/** /**
* get the file id as used in the cache * 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 * @param string $path
* @return int * @return int
*/ */
@ -303,6 +304,39 @@ class OC_FileCache{
return -1; 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 * get the file id of the parent folder, taking into account '/' has no parent

View File

@ -63,7 +63,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time')); $executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0); set_time_limit(0);
$zip = new ZipArchive(); $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) { if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit("cannot open <$filename>\n"); exit("cannot open <$filename>\n");
} }
@ -84,7 +84,7 @@ class OC_Files {
$executionTime = intval(ini_get('max_execution_time')); $executionTime = intval(ini_get('max_execution_time'));
set_time_limit(0); set_time_limit(0);
$zip = new ZipArchive(); $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) { if ($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) {
exit("cannot open <$filename>\n"); exit("cannot open <$filename>\n");
} }
@ -104,15 +104,15 @@ class OC_Files {
header('Content-Type: application/zip'); header('Content-Type: application/zip');
header('Content-Length: ' . filesize($filename)); header('Content-Length: ' . filesize($filename));
}else{ }else{
header('Content-Type: ' . OC_Filesystem::getMimeType($filename)); $fileData=OC_FileCache::get($filename);
header('Content-Length: ' . OC_Filesystem::filesize($filename)); header('Content-Type: ' . $fileData['mimetype']);
header('Content-Length: ' . $fileData['size']);
} }
}elseif($zip or !OC_Filesystem::file_exists($filename)){ }elseif($zip or !OC_Filesystem::file_exists($filename)){
header("HTTP/1.0 404 Not Found"); header("HTTP/1.0 404 Not Found");
$tmpl = new OC_Template( '', '404', 'guest' ); $tmpl = new OC_Template( '', '404', 'guest' );
$tmpl->assign('file',$filename); $tmpl->assign('file',$filename);
$tmpl->printPage(); $tmpl->printPage();
// die('404 Not Found');
}else{ }else{
header("HTTP/1.0 403 Forbidden"); header("HTTP/1.0 403 Forbidden");
die('403 Forbidden'); die('403 Forbidden');
@ -225,7 +225,7 @@ class OC_Files {
*/ */
static function validateZipDownload($dir, $files) { static function validateZipDownload($dir, $files) {
if(!OC_Config::getValue('allowZipDownload', true)) { if(!OC_Config::getValue('allowZipDownload', true)) {
$l = new OC_L10N('files'); $l = OC_L10N::get('files');
header("HTTP/1.0 409 Conflict"); header("HTTP/1.0 409 Conflict");
$tmpl = new OC_Template( '', 'error', 'user' ); $tmpl = new OC_Template( '', 'error', 'user' );
$errors = array( $errors = array(
@ -250,7 +250,7 @@ class OC_Files {
$totalsize += OC_Filesystem::filesize($dir.'/'.$files); $totalsize += OC_Filesystem::filesize($dir.'/'.$files);
} }
if($totalsize > $zipLimit) { if($totalsize > $zipLimit) {
$l = new OC_L10N('files'); $l = OC_L10N::get('files');
header("HTTP/1.0 409 Conflict"); header("HTTP/1.0 409 Conflict");
$tmpl = new OC_Template( '', 'error', 'user' ); $tmpl = new OC_Template( '', 'error', 'user' );
$errors = array( $errors = array(

View File

@ -283,8 +283,12 @@ class OC_FilesystemView {
if(OC_Filesystem::isValidPath($path)){ if(OC_Filesystem::isValidPath($path)){
$source=$this->fopen($path,'r'); $source=$this->fopen($path,'r');
if($source){ if($source){
$extention=substr($path,strrpos($path,'.')); $extension='';
$tmpFile=OC_Helper::tmpFile($extention); $extOffset=strpos($path,'.');
if($extOffset !== false) {
$extension=substr($path,strrpos($path,'.'));
}
$tmpFile=OC_Helper::tmpFile($extension);
file_put_contents($tmpFile,$source); file_put_contents($tmpFile,$source);
return $tmpFile; return $tmpFile;
} }

View File

@ -27,7 +27,7 @@
class OC_Helper { class OC_Helper {
private static $mimetypes=array(); private static $mimetypes=array();
private static $tmpFiles=array(); private static $tmpFiles=array();
/** /**
* @brief Creates an url * @brief Creates an url
* @param $app app * @param $app app
@ -123,7 +123,7 @@ class OC_Helper {
}elseif( file_exists( OC::$SERVERROOT."/core/img/$image" )){ }elseif( file_exists( OC::$SERVERROOT."/core/img/$image" )){
return OC::$WEBROOT."/core/img/$image"; return OC::$WEBROOT."/core/img/$image";
}else{ }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(); die();
} }
} }
@ -188,7 +188,7 @@ class OC_Helper {
$bytes = round( $bytes / 1024, 1 ); $bytes = round( $bytes / 1024, 1 );
return "$bytes GB"; return "$bytes GB";
} }
/** /**
* @brief Make a computer file size * @brief Make a computer file size
* @param $str file size in a fancy format * @param $str file size in a fancy format
@ -224,9 +224,9 @@ class OC_Helper {
$bytes = round($bytes, 2); $bytes = round($bytes, 2);
return $bytes; return $bytes;
} }
/** /**
* @brief Recusive editing of file permissions * @brief Recusive editing of file permissions
* @param $path path to file or folder * @param $path path to file or folder
@ -276,7 +276,7 @@ class OC_Helper {
copy($src, $dest); copy($src, $dest);
} }
} }
/** /**
* @brief Recusive deletion of folders * @brief Recusive deletion of folders
* @param string $dir path to the folder * @param string $dir path to the folder
@ -294,6 +294,9 @@ class OC_Helper {
}elseif(file_exists($dir)){ }elseif(file_exists($dir)){
unlink($dir); unlink($dir);
} }
if(file_exists($dir)) {
return false;
}
} }
/** /**
@ -349,7 +352,7 @@ class OC_Helper {
} }
return $mimeType; 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. * @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. * @param $s name of the var to escape, if set.
@ -357,16 +360,16 @@ class OC_Helper {
* @returns the print-safe value. * @returns the print-safe value.
* *
*/ */
//FIXME: should also check for value validation (i.e. the email is an email). //FIXME: should also check for value validation (i.e. the email is an email).
public static function init_var($s, $d="") { public static function init_var($s, $d="") {
$r = $d; $r = $d;
if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s]))
$r = stripslashes(htmlspecialchars($_REQUEST[$s])); $r = stripslashes(htmlspecialchars($_REQUEST[$s]));
return $r; return $r;
} }
/** /**
* returns "checked"-attribut if request contains selected radio element OR if radio element is the default one -- maybe? * 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 * @param string $s Name of radio-button element name
@ -422,7 +425,7 @@ class OC_Helper {
} }
return false; return false;
} }
/** /**
* copy the contents of one stream to another * copy the contents of one stream to another
* @param resource source * @param resource source
@ -439,7 +442,7 @@ class OC_Helper {
} }
return $count; return $count;
} }
/** /**
* create a temporary file with an unique filename * create a temporary file with an unique filename
* @param string postfix * @param string postfix
@ -467,14 +470,25 @@ class OC_Helper {
self::$tmpFiles[]=$path; self::$tmpFiles[]=$path;
return $path.'/'; return $path.'/';
} }
/** /**
* remove all files created by self::tmpFile * remove all files created by self::tmpFile
*/ */
public static function cleanTmp(){ 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){ foreach(self::$tmpFiles as $file){
if(file_exists($file)){ if(file_exists($file)){
self::rmdirr($file); if(!self::rmdirr($file)) {
file_put_contents($leftoversFile, $file."\n", FILE_APPEND);
}
} }
} }
} }

View File

@ -175,7 +175,7 @@ class OC_Installer{
} }
//set the installed version //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'); OC_Appconfig::setValue($info['id'],'enabled','no');
return $info['id']; return $info['id'];
} }
@ -297,7 +297,7 @@ class OC_Installer{
include(OC::$APPSROOT."/apps/$app/appinfo/install.php"); include(OC::$APPSROOT."/apps/$app/appinfo/install.php");
} }
$info=OC_App::getAppInfo($app); $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; return $info;
} }
} }

View File

@ -24,7 +24,7 @@ class OC_JSON{
*/ */
public static function checkAppEnabled($app){ public static function checkAppEnabled($app){
if( !OC_App::isEnabled($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') ))); self::error(array( 'data' => array( 'message' => $l->t('Application is not enabled') )));
exit(); exit();
} }
@ -35,7 +35,7 @@ class OC_JSON{
*/ */
public static function checkLoggedIn(){ public static function checkLoggedIn(){
if( !OC_User::isLoggedIn()){ if( !OC_User::isLoggedIn()){
$l = new OC_L10N('core'); $l = OC_L10N::get('core');
self::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit(); exit();
} }
@ -47,7 +47,7 @@ class OC_JSON{
public static function checkAdminUser(){ public static function checkAdminUser(){
self::checkLoggedIn(); self::checkLoggedIn();
if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )){ 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') ))); self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
exit(); exit();
} }

View File

@ -24,6 +24,11 @@
* This class is for i18n and l10n * This class is for i18n and l10n
*/ */
class OC_L10N{ class OC_L10N{
/**
* cached instances
*/
protected static $instances=array();
/** /**
* cache * cache
*/ */
@ -46,6 +51,21 @@ class OC_L10N{
'date' => 'd.m.Y', 'date' => 'd.m.Y',
'datetime' => 'd.m.Y H:i:s', 'datetime' => 'd.m.Y H:i:s',
'time' => '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 * @brief The constructor
@ -261,17 +281,14 @@ class OC_L10N{
public static function findAvailableLanguages($app=null){ public static function findAvailableLanguages($app=null){
$available=array('en');//english is always available $available=array('en');//english is always available
$dir = self::findI18nDir($app); $dir = self::findI18nDir($app);
if(file_exists($dir)){ if(is_dir($dir)){
$dh = opendir($dir); $files=scandir($dir);
while(($file = readdir($dh)) !== false){ foreach($files as $file){
if(substr($file, -4, 4) == '.php' and (strlen($file) == 6 || strlen($file) == 9)){ if(substr($file, -4, 4) == '.php'){
$i = substr($file, 0, -4); $i = substr($file, 0, -4);
if($i != ''){ $available[] = $i;
$available[] = $i;
}
} }
} }
closedir($dh);
} }
return $available; return $available;
} }

View File

@ -25,8 +25,8 @@
* provides an interface to migrate users and whole ownclouds * provides an interface to migrate users and whole ownclouds
*/ */
class OC_Migrate{ class OC_Migrate{
// Array of OC_Migration_Provider objects // Array of OC_Migration_Provider objects
static private $providers=array(); static private $providers=array();
// User id of the user to import/export // User id of the user to import/export
@ -47,7 +47,7 @@ class OC_Migrate{
static private $zippath=false; static private $zippath=false;
// Holds the OC_Migration_Content object // Holds the OC_Migration_Content object
static private $content=false; static private $content=false;
/** /**
* register a new migration provider * register a new migration provider
* @param OC_Migrate_Provider $provider * @param OC_Migrate_Provider $provider
@ -55,28 +55,28 @@ class OC_Migrate{
public static function registerProvider($provider){ public static function registerProvider($provider){
self::$providers[]=$provider; self::$providers[]=$provider;
} }
/** /**
* @breif finds and loads the providers * @brief finds and loads the providers
*/ */
static private function findProviders(){ static private function findProviders(){
// Find the providers // Find the providers
$apps = OC_App::getAllApps(); $apps = OC_App::getAllApps();
foreach($apps as $app){ foreach($apps as $app){
$path = OC::$SERVERROOT . '/apps/' . $app . '/appinfo/migrate.php'; $path = OC::$SERVERROOT . '/apps/' . $app . '/appinfo/migrate.php';
if( file_exists( $path ) ){ 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 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 ootional $type string type of export, defualts to user
* @param otional $path string path to zip output folder * @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 ){ public static function export( $uid=null, $type='user', $path=null ){
$datadir = OC_Config::getValue( 'datadirectory' ); $datadir = OC_Config::getValue( 'datadirectory' );
@ -84,47 +84,48 @@ class OC_Migrate{
$types = array( 'user', 'instance', 'system', 'userfiles' ); $types = array( 'user', 'instance', 'system', 'userfiles' );
if( !in_array( $type, $types ) ){ if( !in_array( $type, $types ) ){
OC_Log::write( 'migration', 'Invalid export type', OC_Log::ERROR ); 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; self::$exporttype = $type;
// Userid? // Userid?
if( self::$exporttype == 'user' ){ if( self::$exporttype == 'user' ){
// Check user exists // Check user exists
if( !is_null($uid) ){ if( !is_null($uid) ){
if( !OC_User_Database::userExists( $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); 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; self::$uid = $uid;
} else { } else {
self::$uid = OC_User::getUser(); self::$uid = OC_User::getUser();
} }
} }
// Calculate zipname // Calculate zipname
if( self::$exporttype == 'user' ){ 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 { } else {
$zipname = 'oc_export_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '.zip'; $zipname = 'oc_export_' . self::$exporttype . '_' . date("y-m-d_H-i-s") . '.zip';
} }
// Calculate path // Calculate path
if( self::$exporttype == 'user' ){ if( self::$exporttype == 'user' ){
self::$zippath = $datadir . '/' . self::$uid . '/' . $zipname; self::$zippath = $datadir . '/' . self::$uid . '/' . $zipname;
} else { } else {
if( !is_null( $path ) ){ if( !is_null( $path ) ){
// Validate custom path // Validate custom path
if( !file_exists( $path ) || !is_writeable( $path ) ){ if( !file_exists( $path ) || !is_writeable( $path ) ){
OC_Log::write( 'migration', 'Path supplied is invalid.', OC_Log::ERROR ); 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 { } else {
// Default path // Default path
self::$zippath = get_temp_dir() . '/' . $zipname; self::$zippath = get_temp_dir() . '/' . $zipname;
} }
} }
// Create the zip object // Create the zip object
if( !self::createZip() ){ if( !self::createZip() ){
return json_encode( array( 'success' => false ) ); return json_encode( array( 'success' => false ) );
} }
// Do the export // Do the export
self::findProviders(); self::findProviders();
@ -134,20 +135,20 @@ class OC_Migrate{
// Connect to the db // Connect to the db
self::$dbpath = $datadir . '/' . self::$uid . '/migration.db'; self::$dbpath = $datadir . '/' . self::$uid . '/migration.db';
if( !self::connectDB() ){ 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 ); self::$content = new OC_Migration_Content( self::$zip, self::$MDB2 );
// Export the app info // Export the app info
$exportdata = self::exportAppData(); $exportdata = self::exportAppData();
// Add the data dir to the zip // Add the data dir to the zip
self::$content->addDir( $datadir . '/' . self::$uid, true, '/' ); self::$content->addDir( $datadir . '/' . self::$uid, true, '/' );
break; break;
case 'instance': case 'instance':
self::$content = new OC_Migration_Content( self::$zip ); self::$content = new OC_Migration_Content( self::$zip );
// Creates a zip that is compatable with the import function // Creates a zip that is compatable with the import function
$dbfile = tempnam( "/tmp", "owncloud_export_data_" ); $dbfile = tempnam( "/tmp", "owncloud_export_data_" );
OC_DB::getDbStructure( $dbfile, 'MDB2_SCHEMA_DUMP_ALL'); OC_DB::getDbStructure( $dbfile, 'MDB2_SCHEMA_DUMP_ALL');
// Now add in *dbname* and *dbprefix* // Now add in *dbname* and *dbprefix*
$dbexport = file_get_contents( $dbfile ); $dbexport = file_get_contents( $dbfile );
$dbnamestring = "<database>\n\n <name>" . OC_Config::getValue( "dbname", "owncloud" ); $dbnamestring = "<database>\n\n <name>" . OC_Config::getValue( "dbname", "owncloud" );
@ -158,14 +159,14 @@ class OC_Migrate{
self::$content->addFromString( $dbexport, "dbexport.xml" ); self::$content->addFromString( $dbexport, "dbexport.xml" );
// Add user data // Add user data
foreach(OC_User::getUsers() as $user){ foreach(OC_User::getUsers() as $user){
self::$content->addDir( $datadir . '/' . $user . '/', true, "/userdata/" ); self::$content->addDir( $datadir . '/' . $user . '/', true, "/userdata/" );
} }
break; break;
case 'userfiles': case 'userfiles':
self::$content = new OC_Migration_Content( self::$zip ); self::$content = new OC_Migration_Content( self::$zip );
// Creates a zip with all of the users files // Creates a zip with all of the users files
foreach(OC_User::getUsers() as $user){ foreach(OC_User::getUsers() as $user){
self::$content->addDir( $datadir . '/' . $user . '/', true, "/" ); self::$content->addDir( $datadir . '/' . $user . '/', true, "/" );
} }
break; break;
case 'system': case 'system':
@ -178,70 +179,70 @@ class OC_Migrate{
break; break;
} }
if( !$info = self::getExportInfo( $exportdata ) ){ 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 // Add the export info json to the export zip
self::$content->addFromString( $info, 'export_info.json' ); self::$content->addFromString( $info, 'export_info.json' );
if( !self::$content->finish() ){ 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 $path string path to zip
* @param optional $type type of import (user or instance) * @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 ){ public static function import( $path, $type='user', $uid=null ){
OC_Util::checkAdminUser(); OC_Util::checkAdminUser();
$datadir = OC_Config::getValue( 'datadirectory' ); $datadir = OC_Config::getValue( 'datadirectory' );
// Extract the zip // Extract the zip
if( !$extractpath = self::extractZip( $path ) ){ if( !$extractpath = self::extractZip( $path ) ){
return json_encode( array( 'success' => false ) ); return json_encode( array( 'success' => false ) );
} }
// Get export_info.json // Get export_info.json
$scan = scandir( $extractpath ); $scan = scandir( $extractpath );
// Check for export_info.json // Check for export_info.json
if( !in_array( 'export_info.json', $scan ) ){ if( !in_array( 'export_info.json', $scan ) ){
OC_Log::write( 'migration', 'Invalid import file, export_info.json note found', OC_Log::ERROR ); 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' ) ); $json = json_decode( file_get_contents( $extractpath . 'export_info.json' ) );
if( $json->exporttype != $type ){ if( $json->exporttype != $type ){
OC_Log::write( 'migration', 'Invalid import file', OC_Log::ERROR ); 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; self::$exporttype = $type;
// Have we got a user if type is user // Have we got a user if type is user
if( self::$exporttype == 'user' ){ if( self::$exporttype == 'user' ){
if( !$uid ){ if( !$uid ){
self::$uid = $json->exporteduser; self::$uid = $json->exporteduser;
} else { } else {
self::$uid = $uid; self::$uid = $uid;
} }
} }
// Handle export types // Handle export types
switch( self::$exporttype ){ switch( self::$exporttype ){
case 'user': case 'user':
// Check user availability // Check user availability
if( OC_User::userExists( self::$uid ) ){ if( OC_User::userExists( self::$uid ) ){
OC_Log::write( 'migration', 'User already exists', OC_Log::ERROR ); OC_Log::write( 'migration', 'User already exists', OC_Log::ERROR );
return json_encode( array( 'success' => false ) ); return json_encode( array( 'success' => false ) );
} }
$run = true; $run = true;
OC_Hook::emit( "OC_User", "pre_createUser", array( "run" => &$run, "uid" => self::$uid, "password" => $json->hash )); OC_Hook::emit( "OC_User", "pre_createUser", array( "run" => &$run, "uid" => self::$uid, "password" => $json->hash ));
if( !$run ){ if( !$run ){
// Something stopped the user creation // Something stopped the user creation
OC_Log::write( 'migration', 'User creation failed', OC_Log::ERROR ); 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 // Create the user
if( !self::createUser( self::$uid, $json->hash ) ){ 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 // 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 )); 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; $path = $datadir . '/' . self::$uid;
if( !mkdir( $path, 0755, true ) ){ if( !mkdir( $path, 0755, true ) ){
OC_Log::write( 'migration', 'Failed to create users data dir: '.$path, OC_Log::ERROR ); 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 // Copy data
if( !self::copy_r( $extractpath . $json->exporteduser, $datadir . '/' . self::$uid ) ){ 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 ) ){ 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! // All done!
if( !self::unlink_r( $extractpath ) ){ 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 ) ); return json_encode( array( 'success' => true, 'data' => $appsimported ) );
break; break;
@ -270,59 +271,59 @@ class OC_Migrate{
* EXPERIMENTAL * EXPERIMENTAL
// Check for new data dir and dbexport before doing anything // Check for new data dir and dbexport before doing anything
// TODO // TODO
// Delete current data folder. // Delete current data folder.
OC_Log::write( 'migration', "Deleting current data dir", OC_Log::INFO ); OC_Log::write( 'migration', "Deleting current data dir", OC_Log::INFO );
if( !self::unlink_r( $datadir, false ) ){ if( !self::unlink_r( $datadir, false ) ){
OC_Log::write( 'migration', 'Failed to delete the current data dir', OC_Log::ERROR ); 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 // Copy over data
if( !self::copy_r( $extractpath . 'userdata', $datadir ) ){ if( !self::copy_r( $extractpath . 'userdata', $datadir ) ){
OC_Log::write( 'migration', 'Failed to copy over data directory', OC_Log::ERROR ); 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 // Import the db
if( !OC_DB::replaceDB( $extractpath . 'dbexport.xml' ) ){ if( !OC_DB::replaceDB( $extractpath . 'dbexport.xml' ) ){
return json_encode( array( 'success' => false ) ); return json_encode( array( 'success' => false ) );
} }
// Done // 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 $dir string path of dir to delete
* $param optional $deleteRootToo bool delete the root directory * $param optional $deleteRootToo bool delete the root directory
* @return bool * @return bool
*/ */
private static function unlink_r( $dir, $deleteRootToo=true ){ private static function unlink_r( $dir, $deleteRootToo=true ){
if( !$dh = @opendir( $dir ) ){ if( !$dh = @opendir( $dir ) ){
return false; return false;
} }
while (false !== ($obj = readdir($dh))){ while (false !== ($obj = readdir($dh))){
if($obj == '.' || $obj == '..') { if($obj == '.' || $obj == '..') {
continue; continue;
} }
if (!@unlink($dir . '/' . $obj)){ if (!@unlink($dir . '/' . $obj)){
self::unlink_r($dir.'/'.$obj, true); self::unlink_r($dir.'/'.$obj, true);
} }
} }
closedir($dh); closedir($dh);
if ( $deleteRootToo ) { if ( $deleteRootToo ) {
@rmdir($dir); @rmdir($dir);
} }
return true; return true;
} }
/** /**
* @breif copies recursively * @brief copies recursively
* @param $path string path to source folder * @param $path string path to source folder
* @param $dest string path to destination * @param $dest string path to destination
* @return bool * @return bool
@ -349,12 +350,12 @@ class OC_Migrate{
return copy( $path, $dest ); return copy( $path, $dest );
} else { } else {
return false; return false;
} }
} }
/** /**
* @breif tries to extract the import zip * @brief tries to extract the import zip
* @param $path string path to the zip * @param $path string path to the zip
* @return string path to extract location (with a trailing slash) or false on failure * @return string path to extract location (with a trailing slash) or false on failure
*/ */
static private function extractZip( $path ){ static private function extractZip( $path ){
@ -362,20 +363,20 @@ class OC_Migrate{
// Validate path // Validate path
if( !file_exists( $path ) ){ if( !file_exists( $path ) ){
OC_Log::write( 'migration', 'Zip not found', OC_Log::ERROR ); OC_Log::write( 'migration', 'Zip not found', OC_Log::ERROR );
return false; return false;
} }
if ( self::$zip->open( $path ) != TRUE ) { if ( self::$zip->open( $path ) != TRUE ) {
OC_Log::write( 'migration', "Failed to open zip file", OC_Log::ERROR ); OC_Log::write( 'migration', "Failed to open zip file", OC_Log::ERROR );
return false; 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 ) ){ if( !self::$zip->extractTo( $to ) ){
return false; return false;
} }
self::$zip->close(); self::$zip->close();
return $to; return $to;
} }
/** /**
* @brief connects to a MDB2 database scheme * @brief connects to a MDB2 database scheme
* @returns bool * @returns bool
@ -393,16 +394,16 @@ class OC_Migrate{
return true; 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 * @return bool whether operation was successfull
*/ */
private static function exportAppData( ){ private static function exportAppData( ){
$success = true; $success = true;
$return = array(); $return = array();
// Foreach provider // Foreach provider
foreach( self::$providers as $provider ){ foreach( self::$providers as $provider ){
$success = true; $success = true;
@ -413,37 +414,37 @@ class OC_Migrate{
if( is_array( $tables ) ){ if( is_array( $tables ) ){
// Save the table names // Save the table names
foreach($tables as $table){ foreach($tables as $table){
$return['apps'][$provider->getID()]['tables'][] = $table; $return['apps'][$provider->getID()]['tables'][] = $table;
} }
} else { } else {
// It failed to create the tables // It failed to create the tables
$success = false; $success = false;
} }
} }
// Run the export function? // Run the export function?
if( $success ){ if( $success ){
// Set the provider properties // Set the provider properties
$provider->setData( self::$uid, self::$content ); $provider->setData( self::$uid, self::$content );
$return['apps'][$provider->getID()]['success'] = $provider->export(); $return['apps'][$provider->getID()]['success'] = $provider->export();
} else { } else {
$return['apps'][$provider->getID()]['success'] = false; $return['apps'][$provider->getID()]['success'] = false;
$return['apps'][$provider->getID()]['message'] = 'failed to create the app tables'; $return['apps'][$provider->getID()]['message'] = 'failed to create the app tables';
} }
// Now add some app info the the return array // Now add some app info the the return array
$appinfo = OC_App::getAppInfo( $provider->getID() ); $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; 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 * @param optional $array array of data to include in the returned json
* @return bool * @return bool
*/ */
@ -464,11 +465,11 @@ class OC_Migrate{
OC_Log::write( 'migration', 'Failed to get the users password hash', OC_log::ERROR); OC_Log::write( 'migration', 'Failed to get the users password hash', OC_log::ERROR);
return false; return false;
} }
$info['hash'] = $hash; $info['hash'] = $hash;
$info['exporteduser'] = self::$uid; $info['exporteduser'] = self::$uid;
} }
if( !is_array( $array ) ){ 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 // Merge in other data
$info = array_merge( $info, (array)$array ); $info = array_merge( $info, (array)$array );
@ -476,9 +477,9 @@ class OC_Migrate{
$json = json_encode( $info ); $json = json_encode( $info );
return $json; 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 * @param $db optional path to migration.db, defaults to user data dir
* @return bool whether the operation was successful * @return bool whether the operation was successful
*/ */
@ -487,19 +488,19 @@ class OC_Migrate{
self::$dbpath = !is_null( $path ) ? $path : self::$dbpath; self::$dbpath = !is_null( $path ) ? $path : self::$dbpath;
if( !self::$dbpath ){ if( !self::$dbpath ){
OC_Log::write( 'migration', 'connectDB() was called without dbpath being set', OC_Log::ERROR ); OC_Log::write( 'migration', 'connectDB() was called without dbpath being set', OC_Log::ERROR );
return false; return false;
} }
// Already connected // Already connected
if(!self::$MDB2){ if(!self::$MDB2){
require_once('MDB2.php'); require_once('MDB2.php');
$datadir = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); $datadir = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
// DB type // DB type
if( class_exists( 'SQLite3' ) ){ if( class_exists( 'SQLite3' ) ){
$dbtype = 'sqlite3'; $dbtype = 'sqlite3';
} else if( is_callable( 'sqlite_open' ) ){ } else if( is_callable( 'sqlite_open' ) ){
$dbtype = 'sqlite'; $dbtype = 'sqlite';
} else { } else {
OC_Log::write( 'migration', 'SQLite not found', OC_Log::ERROR ); OC_Log::write( 'migration', 'SQLite not found', OC_Log::ERROR );
return false; return false;
@ -533,53 +534,53 @@ class OC_Migrate{
self::$MDB2->setFetchMode(MDB2_FETCHMODE_ASSOC); self::$MDB2->setFetchMode(MDB2_FETCHMODE_ASSOC);
} }
return true; 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 * @param $appid string id of the app
* @return bool whether the operation was successful * @return bool whether the operation was successful
*/ */
static private function createAppTables( $appid ){ static private function createAppTables( $appid ){
if( !self::connectScheme() ){ 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' ); $content = file_get_contents( OC::$SERVERROOT . '/apps/' . $appid . '/appinfo/database.xml' );
$file2 = 'static://db_scheme'; $file2 = 'static://db_scheme';
// TODO get the relative path to migration.db from the data dir // TODO get the relative path to migration.db from the data dir
// For now just cheat // For now just cheat
$path = pathinfo( self::$dbpath ); $path = pathinfo( self::$dbpath );
$content = str_replace( '*dbname*', self::$uid.'/migration', $content ); $content = str_replace( '*dbname*', self::$uid.'/migration', $content );
$content = str_replace( '*dbprefix*', '', $content ); $content = str_replace( '*dbprefix*', '', $content );
$xml = new SimpleXMLElement($content); $xml = new SimpleXMLElement($content);
foreach($xml->table as $table){ foreach($xml->table as $table){
$tables[] = (string)$table->name; $tables[] = (string)$table->name;
} }
file_put_contents( $file2, $content ); file_put_contents( $file2, $content );
// Try to create tables // Try to create tables
$definition = self::$schema->parseDatabaseDefinitionFile( $file2 ); $definition = self::$schema->parseDatabaseDefinitionFile( $file2 );
unlink( $file2 ); unlink( $file2 );
// Die in case something went wrong // Die in case something went wrong
if( $definition instanceof MDB2_Schema_Error ){ if( $definition instanceof MDB2_Schema_Error ){
OC_Log::write( 'migration', 'Failed to parse database.xml for: '.$appid, OC_Log::FATAL ); 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 ); OC_Log::write( 'migration', $definition->getMessage().': '.$definition->getUserInfo(), OC_Log::FATAL );
return false; return false;
} }
$definition['overwrite'] = true; $definition['overwrite'] = true;
$ret = self::$schema->createDatabase( $definition ); $ret = self::$schema->createDatabase( $definition );
// Die in case something went wrong // Die in case something went wrong
if( $ret instanceof MDB2_Error ){ if( $ret instanceof MDB2_Error ){
OC_Log::write( 'migration', 'Failed to create tables for: '.$appid, OC_Log::FATAL ); 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 * @param $path string path to zip destination
* @return bool * @return bool
*/ */
@ -600,18 +601,18 @@ class OC_Migrate{
// Check if properties are set // Check if properties are set
if( !self::$zippath ){ if( !self::$zippath ){
OC_Log::write('migration', 'createZip() called but $zip and/or $zippath have not been set', OC_Log::ERROR); 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 ) { if ( self::$zip->open( self::$zippath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE ) !== TRUE ) {
OC_Log::write('migration', 'Failed to create the zip with error: '.self::$zip->getStatusString(), OC_Log::ERROR); OC_Log::write('migration', 'Failed to create the zip with error: '.self::$zip->getStatusString(), OC_Log::ERROR);
return false; return false;
} else { } else {
return true; return true;
} }
} }
/** /**
* @breif returns an array of apps that support migration * @brief returns an array of apps that support migration
* @return array * @return array
*/ */
static public function getApps(){ static public function getApps(){
@ -620,13 +621,13 @@ class OC_Migrate{
$path = OC::$SERVERROOT . '/apps/' . $app . '/lib/migrate.php'; $path = OC::$SERVERROOT . '/apps/' . $app . '/lib/migrate.php';
if( file_exists( $path ) ){ if( file_exists( $path ) ){
$supportsmigration[] = $app; $supportsmigration[] = $app;
} }
} }
return $supportsmigration; return $supportsmigration;
} }
/** /**
* @breif imports a new user * @brief imports a new user
* @param $db string path to migration.db * @param $db string path to migration.db
* @param $info object of migration info * @param $info object of migration info
* @param $uid optional uid to use * @param $uid optional uid to use
@ -639,76 +640,76 @@ class OC_Migrate{
if(!self::connectDB( $db )){ if(!self::connectDB( $db )){
OC_Log::write('migration','Failed to connect to migration.db',OC_Log::ERROR); OC_Log::write('migration','Failed to connect to migration.db',OC_Log::ERROR);
return false; return false;
} }
} else { } 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; return false;
} }
// Find providers // Find providers
self::findProviders(); self::findProviders();
// Generate importinfo array // Generate importinfo array
$importinfo = array( $importinfo = array(
'olduid' => $info->exporteduser, 'olduid' => $info->exporteduser,
'newuid' => self::$uid 'newuid' => self::$uid
); );
foreach( self::$providers as $provider){ foreach( self::$providers as $provider){
// Is the app in the export? // Is the app in the export?
$id = $provider->getID(); $id = $provider->getID();
if( isset( $info->apps->$id ) ){ if( isset( $info->apps->$id ) ){
// Is the app installed // Is the app installed
if( !OC_App::isEnabled( $id ) ){ if( !OC_App::isEnabled( $id ) ){
OC_Log::write( 'migration', 'App: ' . $id . ' is not installed, can\'t import data.', OC_Log::INFO ); OC_Log::write( 'migration', 'App: ' . $id . ' is not installed, can\'t import data.', OC_Log::INFO );
$appsstatus[$id] = 'notsupported'; $appsstatus[$id] = 'notsupported';
} else { } else {
// Did it succeed on export? // Did it succeed on export?
if( $info->apps->$id->success ){ if( $info->apps->$id->success ){
// Give the provider the content object // Give the provider the content object
if( !self::connectDB( $db ) ){ if( !self::connectDB( $db ) ){
return false; return false;
} }
$content = new OC_Migration_Content( self::$zip, self::$MDB2 ); $content = new OC_Migration_Content( self::$zip, self::$MDB2 );
$provider->setData( self::$uid, $content, $info ); $provider->setData( self::$uid, $content, $info );
// Then do the import // Then do the import
if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ){ if( !$appsstatus[$id] = $provider->import( $info->apps->$id, $importinfo ) ){
// Failed to import app // Failed to import app
OC_Log::write( 'migration', 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id, OC_Log::ERROR ); OC_Log::write( 'migration', 'Failed to import app data for user: ' . self::$uid . ' for app: ' . $id, OC_Log::ERROR );
} }
} else { } else {
// Add to failed list // Add to failed list
$appsstatus[$id] = false; $appsstatus[$id] = false;
} }
} }
} }
} }
return $appsstatus; 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 $uid string user_id of the user to be created
* @param $hash string hash of the user to be created * @param $hash string hash of the user to be created
* @return bool result of user creation * @return bool result of user creation
*/ */
public static function createUser( $uid, $hash ){ public static function createUser( $uid, $hash ){
// Check if userid exists // Check if userid exists
if(OC_User::userExists( $uid )){ if(OC_User::userExists( $uid )){
return false; return false;
} }
// Create the user // Create the user
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" ); $query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
$result = $query->execute( array( $uid, $hash)); $result = $query->execute( array( $uid, $hash));
if( !$result ){ 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; return $result ? true : false;
} }
} }

View File

@ -33,7 +33,7 @@ class OC_Migration_Content{
private $tmpfiles=false; private $tmpfiles=false;
/** /**
* @breif sets up the * @brief sets up the
* @param $zip ZipArchive object * @param $zip ZipArchive object
* @param optional $db a MDB2 database object (required for exporttype user) * @param optional $db a MDB2 database object (required for exporttype user)
* @return bool * @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 // @param $query the sql query to prepare
public function prepare( $query ){ 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 * @param $query the query to process
* @return string of processed query * @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 $data a sql data set returned from self::prepare()->query()
* @param $options array of copyRows options * @param $options array of copyRows options
* @return void * @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 $dir string path of the directory to add
* @param $recursive bool * @param $recursive bool
* @param $internaldir string path of folder to add dir to in zip * @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 $data string of data to add
* @param $path the relative path inside of the zip to save the file to * @param $path the relative path inside of the zip to save the file to
* @return bool * @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 * @return bool
*/ */
public function finish(){ 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(){ private function cleanup(){
// Delete tmp files // Delete tmp files
@ -249,4 +249,4 @@ class OC_Migration_Content{
unlink( $i ); unlink( $i );
} }
} }
} }

View File

@ -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 * @return array appdata to be exported
*/ */
abstract function export( ); abstract function export( );
/** /**
* @breif imports data for the app * @brief imports data for the app
* @return void * @return void
*/ */
abstract function import( ); 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 * @param $content a OC_Migration_Content object
*/ */
public function setData( $uid, $content, $info=null ){ 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 * @return string
*/ */
public function getID(){ public function getID(){

View File

@ -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);
}
}

View File

@ -26,13 +26,22 @@
*/ */
class OC_Search{ class OC_Search{
static private $providers=array(); 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 * register a new search provider to be used
* @param string $provider class name of a OC_Search_Provider * @param string $provider class name of a OC_Search_Provider
*/ */
public static function registerProvider($provider){ public static function registerProvider($class,$options=array()){
self::$providers[]=$provider; self::$registeredProviders[]=array('class'=>$class,'options'=>$options);
} }
/** /**
@ -41,10 +50,25 @@ class OC_Search{
* @return array An array of OC_Search_Result's * @return array An array of OC_Search_Result's
*/ */
public static function search($query){ public static function search($query){
self::initProviders();
$results=array(); $results=array();
foreach(self::$providers as $provider){ foreach(self::$providers as $provider){
$results=array_merge($results, $provider::search($query)); $results=array_merge($results, $provider->search($query));
} }
return $results; 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);
}
}
} }

View File

@ -2,11 +2,13 @@
/** /**
* provides search functionalty * provides search functionalty
*/ */
interface OC_Search_Provider { class OC_Search_Provider {
public function __construct($options){}
/** /**
* search for $query * search for $query
* @param string $query * @param string $query
* @return array An array of OC_Search_Result's * @return array An array of OC_Search_Result's
*/ */
static function search($query); public function search($query){}
} }

View File

@ -1,7 +1,7 @@
<?php <?php
class OC_Search_Provider_File implements OC_Search_Provider{ class OC_Search_Provider_File extends OC_Search_Provider{
static function search($query){ function search($query){
$files=OC_FileCache::search($query,true); $files=OC_FileCache::search($query,true);
$results=array(); $results=array();
foreach($files as $fileData){ foreach($files as $fileData){

View File

@ -76,7 +76,7 @@ function simple_file_size($bytes) {
} }
function relative_modified_date($timestamp) { function relative_modified_date($timestamp) {
$l=new OC_L10N('template'); $l=OC_L10N::get('template');
$timediff = time() - $timestamp; $timediff = time() - $timestamp;
$diffminutes = round($timediff/60); $diffminutes = round($timediff/60);
$diffhours = round($diffminutes/60); $diffhours = round($diffminutes/60);
@ -155,7 +155,7 @@ class OC_Template{
$this->renderas = $renderas; $this->renderas = $renderas;
$this->application = $app; $this->application = $app;
$this->vars = array(); $this->vars = array();
$this->l10n = new OC_L10N($app); $this->l10n = OC_L10N::get($app);
$this->findTemplate($name); $this->findTemplate($name);
} }

Some files were not shown because too many files have changed in this diff Show More