Merge branch 'master' into calendar_sharing
This commit is contained in:
commit
d15959d573
File diff suppressed because it is too large
Load Diff
|
@ -10,7 +10,7 @@ ob_start();
|
||||||
require_once('../../../../lib/base.php');
|
require_once('../../../../lib/base.php');
|
||||||
OC_JSON::checkLoggedIn();
|
OC_JSON::checkLoggedIn();
|
||||||
OC_Util::checkAppEnabled('calendar');
|
OC_Util::checkAppEnabled('calendar');
|
||||||
$nl = "\n";
|
$nl = "\n\r";
|
||||||
$progressfile = OC::$APPSROOT . '/apps/calendar/import_tmp/' . md5(session_id()) . '.txt';
|
$progressfile = OC::$APPSROOT . '/apps/calendar/import_tmp/' . md5(session_id()) . '.txt';
|
||||||
if(is_writable('import_tmp/')){
|
if(is_writable('import_tmp/')){
|
||||||
$progressfopen = fopen($progressfile, 'w');
|
$progressfopen = fopen($progressfile, 'w');
|
||||||
|
|
|
@ -11,7 +11,7 @@ OC_Util::checkLoggedIn();
|
||||||
OC_Util::checkAppEnabled('calendar');
|
OC_Util::checkAppEnabled('calendar');
|
||||||
$cal = isset($_GET['calid']) ? $_GET['calid'] : NULL;
|
$cal = isset($_GET['calid']) ? $_GET['calid'] : NULL;
|
||||||
$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL;
|
$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL;
|
||||||
$nl = "\n";
|
$nl = "\n\r";
|
||||||
if(isset($cal)){
|
if(isset($cal)){
|
||||||
$calendar = OC_Calendar_App::getCalendar($cal);
|
$calendar = OC_Calendar_App::getCalendar($cal);
|
||||||
$calobjects = OC_Calendar_Object::all($cal);
|
$calobjects = OC_Calendar_Object::all($cal);
|
||||||
|
|
|
@ -19,6 +19,11 @@
|
||||||
* 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/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
function bailOut($msg) {
|
||||||
|
OC_JSON::error(array('data' => array('message' => $msg)));
|
||||||
|
OC_Log::write('contacts','ajax/saveproperty.php: '.$msg, OC_Log::DEBUG);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
// Init owncloud
|
// Init owncloud
|
||||||
require_once('../../../lib/base.php');
|
require_once('../../../lib/base.php');
|
||||||
|
@ -27,7 +32,10 @@ require_once('../../../lib/base.php');
|
||||||
OC_JSON::checkLoggedIn();
|
OC_JSON::checkLoggedIn();
|
||||||
OC_JSON::checkAppEnabled('contacts');
|
OC_JSON::checkAppEnabled('contacts');
|
||||||
|
|
||||||
$id = $_GET['id'];
|
$id = isset($_GET['id'])?$_GET['id']:null;
|
||||||
|
if(!$id) {
|
||||||
|
bailOut(OC_Contacts_App::$l10n->t('id is not set.'));
|
||||||
|
}
|
||||||
$card = OC_Contacts_App::getContactObject( $id );
|
$card = OC_Contacts_App::getContactObject( $id );
|
||||||
|
|
||||||
OC_Contacts_VCard::delete($id);
|
OC_Contacts_VCard::delete($id);
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
#contacts_propertymenu_button { position:absolute;top:15px;right:150px; background:url('../../../core/img/actions/add.svg') no-repeat center; }
|
#contacts_propertymenu_button { position:absolute;top:15px;right:150px; background:url('../../../core/img/actions/add.svg') no-repeat center; }
|
||||||
#contacts_propertymenu { background-color: #fff; position:absolute;top:40px;right:150px; overflow:hidden; text-overflow:ellipsis; /*border: thin solid #1d2d44;*/ -moz-box-shadow:0 0 10px #000; -webkit-box-shadow:0 0 10px #000; box-shadow:0 0 10px #000; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; }
|
#contacts_propertymenu { background-color: #fff; position:absolute;top:40px;right:150px; overflow:hidden; text-overflow:ellipsis; /*border: thin solid #1d2d44;*/ -moz-box-shadow:0 0 10px #000; -webkit-box-shadow:0 0 10px #000; box-shadow:0 0 10px #000; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; }
|
||||||
#contacts_propertymenu li { display: block; font-weight: bold; height: 20px; width: 100px; }
|
#contacts_propertymenu li { display: block; font-weight: bold; height: 20px; width: 100px; }
|
||||||
/*#contacts_propertymenu li:first-child { border-top: thin solid #1d2d44; -moz-border-radius-topleft:0.5em; -webkit-border-top-left-radius:0.5em; border-top-left-radius:0.5em; -moz-border-radius-topright:0.5em; -webkit-border-top-right-radius:0.5em; border-top-right-radius:0.5em; }
|
|
||||||
#contacts_propertymenu li:last-child { border-bottom: thin solid #1d2d44; -moz-border-radius-bottomleft:0.5em; -webkit-border-bottom-left-radius:0.5em; border-bottom-left-radius:0.5em; -moz-border-radius-bottomright:0.5em; -webkit-border-bottom-right-radius:0.5em; border-bottom-right-radius:0.5em; }*/
|
|
||||||
#contacts_propertymenu li a { padding: 3px; display: block }
|
#contacts_propertymenu li a { padding: 3px; display: block }
|
||||||
#contacts_propertymenu li:hover { background-color: #1d2d44; }
|
#contacts_propertymenu li:hover { background-color: #1d2d44; }
|
||||||
#contacts_propertymenu li a:hover { color: #fff }
|
#contacts_propertymenu li a:hover { color: #fff }
|
||||||
|
@ -25,54 +23,12 @@
|
||||||
#card input[type="text"],input[type="email"],input[type="tel"],input[type="date"], select { background-color: #f8f8f8; border: 0 !important; -webkit-appearance:none !important; -moz-appearance:none !important; -webkit-box-sizing:none !important; -moz-box-sizing:none !important; box-sizing:none !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; float: left; }
|
#card input[type="text"],input[type="email"],input[type="tel"],input[type="date"], select { background-color: #f8f8f8; border: 0 !important; -webkit-appearance:none !important; -moz-appearance:none !important; -webkit-box-sizing:none !important; -moz-box-sizing:none !important; box-sizing:none !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; float: left; }
|
||||||
#card input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,input[type="email"]:hover,input[type="tel"]:hover,input[type="date"]:hover,input[type="date"],input[type="date"]:hover,input[type="date"]:active,input[type="date"]:active,input[type="date"]:active,input[type="email"]:active,input[type="tel"]:active, select:hover, select:focus, select:active { border: 0 !important; -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; float: left; }
|
#card input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,input[type="email"]:hover,input[type="tel"]:hover,input[type="date"]:hover,input[type="date"],input[type="date"]:hover,input[type="date"]:active,input[type="date"]:active,input[type="date"]:active,input[type="email"]:active,input[type="tel"]:active, select:hover, select:focus, select:active { border: 0 !important; -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #fff, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #fff, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; float: left; }
|
||||||
input[type="text"]:invalid,input[type="email"]:invalid,input[type="tel"]:invalid,input[type="date"]:invalid { background-color: #ffc0c0 !important; }
|
input[type="text"]:invalid,input[type="email"]:invalid,input[type="tel"]:invalid,input[type="date"]:invalid { background-color: #ffc0c0 !important; }
|
||||||
/*input[type="text"]:valid,input[type="email"]:valid,input[type="tel"]:valid,input[type="date"]:valid { background-color: #b1d28f !important; }*/
|
dl.form { width: 100%; float: left; clear: right; margin: 0; padding: 0; }
|
||||||
dl.form
|
.form dt { display: table-cell; clear: left; float: left; width: 7em; margin: 0; padding: 0.8em 0.5em 0 0; font-weight: bold; text-align:right; text-overflow:ellipsis; o-text-overflow: ellipsis; vertical-align: text-bottom;/* white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap;*/ }
|
||||||
{
|
.form dd { display: table-cell; clear: right; float: left; margin: 0; padding: 0px; white-space: nowrap; vertical-align: text-bottom; }
|
||||||
width: 100%;
|
|
||||||
float: left;
|
|
||||||
clear: right;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form dt
|
|
||||||
{
|
|
||||||
display: table-cell;
|
|
||||||
clear: left;
|
|
||||||
float: left;
|
|
||||||
width: 7em;
|
|
||||||
/*overflow: hidden;*/
|
|
||||||
margin: 0;
|
|
||||||
padding: 0.8em 0.5em 0 0;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align:right;
|
|
||||||
text-overflow:ellipsis;
|
|
||||||
o-text-overflow: ellipsis;
|
|
||||||
vertical-align: text-bottom;
|
|
||||||
/*
|
|
||||||
white-space: pre-wrap;
|
|
||||||
white-space: -moz-pre-wrap !important;
|
|
||||||
white-space: -pre-wrap;
|
|
||||||
white-space: -o-pre-wrap;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.form dd
|
|
||||||
{
|
|
||||||
display: table-cell;
|
|
||||||
clear: right;
|
|
||||||
float: left;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0px;
|
|
||||||
white-space: nowrap;
|
|
||||||
vertical-align: text-bottom;
|
|
||||||
/*min-width: 20em;*/
|
|
||||||
/*background-color: yellow;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading { background: url('../../../core/img/loading.gif') no-repeat center !important; /*cursor: progress; */ cursor: wait; }
|
.loading { background: url('../../../core/img/loading.gif') no-repeat center !important; /*cursor: progress; */ cursor: wait; }
|
||||||
|
|
||||||
/*.add { cursor: pointer; width: 25px; height: 25px; margin: 0px; float: right; position:relative; content: "\+"; font-weight: bold; color: #666; font-size: large; bottom: 0px; right: 0px; clear: both; text-align: center; vertical-align: bottom; display: none; }*/
|
|
||||||
|
|
||||||
.listactions { height: 1em; width:60px; float: left; clear: right; }
|
.listactions { height: 1em; width:60px; float: left; clear: right; }
|
||||||
.add,.edit,.delete,.mail, .globe { cursor: pointer; width: 20px; height: 20px; margin: 0; float: left; position:relative; display: none; }
|
.add,.edit,.delete,.mail, .globe { cursor: pointer; width: 20px; height: 20px; margin: 0; float: left; position:relative; display: none; }
|
||||||
.add { background:url('../../../core/img/actions/add.svg') no-repeat center; clear: both; }
|
.add { background:url('../../../core/img/actions/add.svg') no-repeat center; clear: both; }
|
||||||
|
@ -82,75 +38,21 @@ dl.form
|
||||||
/*.globe { background:url('../img/globe.svg') no-repeat center; }*/
|
/*.globe { background:url('../img/globe.svg') no-repeat center; }*/
|
||||||
.globe { background:url('../../../core/img/actions/public.svg') no-repeat center; }
|
.globe { background:url('../../../core/img/actions/public.svg') no-repeat center; }
|
||||||
|
|
||||||
#messagebox_msg { font-weight: bold; font-size: 1.2em; }
|
#edit_name_dialog { padding:0; }
|
||||||
|
#edit_name_dialog > input { width: 15em; }
|
||||||
/* Name editor */
|
#edit_address_dialog { /*width: 30em;*/ }
|
||||||
#edit_name_dialog {
|
#edit_address_dialog > input { width: 15em; }
|
||||||
/*width: 25em;*/
|
|
||||||
padding:0;
|
|
||||||
}
|
|
||||||
#edit_name_dialog > input {
|
|
||||||
width: 15em;
|
|
||||||
}
|
|
||||||
/* Address editor */
|
|
||||||
#edit_address_dialog {
|
|
||||||
/*width: 30em;*/
|
|
||||||
}
|
|
||||||
#edit_address_dialog > input {
|
|
||||||
width: 15em;
|
|
||||||
}
|
|
||||||
#edit_photo_dialog_img { display: block; width: 150; height: 200; border: thin solid black; }
|
#edit_photo_dialog_img { display: block; width: 150; height: 200; border: thin solid black; }
|
||||||
#fn { float: left; }
|
#fn { float: left; }
|
||||||
/**
|
/**
|
||||||
* Create classes form, floateven and floatodd which flows left and right respectively.
|
* Create classes form, floateven and floatodd which flows left and right respectively.
|
||||||
*/
|
*/
|
||||||
.contactsection {
|
.contactsection { float: left; min-width: 30em; max-width: 40em; margin: 0.5em; border: thin solid lightgray; -webkit-border-radius: 0.5em; -moz-border-radius: 0.5em; border-radius: 0.5em; background-color: #f8f8f8; }
|
||||||
float: left;
|
|
||||||
min-width: 30em;
|
|
||||||
max-width: 40em;
|
|
||||||
margin: 0.5em;
|
|
||||||
border: thin solid lightgray;
|
|
||||||
-webkit-border-radius: 0.5em;
|
|
||||||
-moz-border-radius: 0.5em;
|
|
||||||
border-radius: 0.5em;
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contactpart legend {
|
.contactpart legend { width:auto; padding:.3em; border:1px solid #ddd; font-weight:bold; cursor:pointer; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; }
|
||||||
/*background: #fff;
|
#cropbox { margin: auto; }
|
||||||
font-weight: bold;
|
|
||||||
left: 1em;
|
|
||||||
border: thin solid gray;
|
|
||||||
-webkit-border-radius: 0.5em;
|
|
||||||
-moz-border-radius: 0.5em;
|
|
||||||
border-radius: 0.5em;
|
|
||||||
padding: 3px;*/
|
|
||||||
width:auto; padding:.3em; border:1px solid #ddd; font-weight:bold; cursor:pointer; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -webkit-box-shadow:0 1px 1px #fff, 0 1px 1px #fff inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em;
|
|
||||||
}
|
|
||||||
/*#contacts_details_photo {
|
|
||||||
cursor: pointer;
|
|
||||||
z-index:1;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#cropbox {
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Photo editor */
|
#contacts_details_photo { border-radius: 0.5em; border: thin solid #bbb; padding: 0.5em; margin: 1em 1em 1em 7em; cursor: pointer; background: url(../../../core/img/loading.gif) no-repeat center center; clear: right; }
|
||||||
/*#contacts_details_photo_wrapper {
|
|
||||||
z-index: 1000;
|
|
||||||
}*/
|
|
||||||
#contacts_details_photo {
|
|
||||||
border-radius: 0.5em;
|
|
||||||
border: thin solid #bbb;
|
|
||||||
padding: 0.5em;
|
|
||||||
margin: 1em 1em 1em 7em;
|
|
||||||
cursor: pointer;
|
|
||||||
/*background: #f8f8f8;*/
|
|
||||||
background: url(../../../core/img/loading.gif) no-repeat center center;
|
|
||||||
clear: right;
|
|
||||||
}
|
|
||||||
#contacts_details_photo:hover { background: #fff; }
|
#contacts_details_photo:hover { background: #fff; }
|
||||||
#contacts_details_photo_progress { margin: 0.3em 0.3em 0.3em 7em; clear: left; }
|
#contacts_details_photo_progress { margin: 0.3em 0.3em 0.3em 7em; clear: left; }
|
||||||
/* Address editor */
|
/* Address editor */
|
||||||
|
@ -168,13 +70,6 @@ dl.addresscard dd > ul { margin: 0.3em; padding: 0.3em; }
|
||||||
#adr_zipcode {}
|
#adr_zipcode {}
|
||||||
#adr_country {}
|
#adr_country {}
|
||||||
|
|
||||||
.delimiter {
|
|
||||||
height: 10px;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*input[type="text"] { float: left; max-width: 15em; }
|
|
||||||
input[type="radio"] { float: left; -khtml-appearance: none; width: 20px; height: 20px; vertical-align: middle; }*/
|
|
||||||
#file_upload_target, #crop_target { display:none; }
|
#file_upload_target, #crop_target { display:none; }
|
||||||
|
|
||||||
#file_upload_start { opacity:0; filter:alpha(opacity=0); z-index:1; position:absolute; left:0; top:0; cursor:pointer; width:0; height:0;}
|
#file_upload_start { opacity:0; filter:alpha(opacity=0); z-index:1; position:absolute; left:0; top:0; cursor:pointer; width:0; height:0;}
|
||||||
|
|
|
@ -213,19 +213,27 @@ Contacts={
|
||||||
honpre:'',
|
honpre:'',
|
||||||
honsuf:'',
|
honsuf:'',
|
||||||
data:undefined,
|
data:undefined,
|
||||||
update:function() {
|
update:function(id) {
|
||||||
// Make sure proper DOM is loaded.
|
// Make sure proper DOM is loaded.
|
||||||
console.log('Card.update(), #n: ' + $('#n').length);
|
var newid;
|
||||||
|
console.log('Card.update(), id: ' + id);
|
||||||
console.log('Card.update(), #contacts: ' + $('#contacts li').length);
|
console.log('Card.update(), #contacts: ' + $('#contacts li').length);
|
||||||
if($('#n').length == 0 && $('#contacts li').length > 0) {
|
if(id == undefined) {
|
||||||
|
newid = $('#contacts li:first-child').data('id');
|
||||||
|
} else {
|
||||||
|
newid = id;
|
||||||
|
}
|
||||||
|
if($('#contacts li').length > 0) {
|
||||||
$.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{},function(jsondata){
|
$.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{},function(jsondata){
|
||||||
if(jsondata.status == 'success'){
|
if(jsondata.status == 'success'){
|
||||||
$('#rightcontent').html(jsondata.data.page);
|
$('#rightcontent').html(jsondata.data.page);
|
||||||
Contacts.UI.loadHandlers();
|
Contacts.UI.loadHandlers();
|
||||||
if($('#contacts li').length > 0) {
|
if($('#contacts li').length > 0) {
|
||||||
var firstid = $('#contacts li:first-child').data('id');
|
//var newid = $('#contacts li:first-child').data('id');
|
||||||
console.log('trying to load: ' + firstid);
|
//$('#contacts li:first-child').addClass('active');
|
||||||
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':firstid},function(jsondata){
|
$('#leftcontent li[data-id="'+newid+'"]').addClass('active');
|
||||||
|
console.log('trying to load: ' + newid);
|
||||||
|
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':newid},function(jsondata){
|
||||||
if(jsondata.status == 'success'){
|
if(jsondata.status == 'success'){
|
||||||
Contacts.UI.Card.loadContact(jsondata.data);
|
Contacts.UI.Card.loadContact(jsondata.data);
|
||||||
} else{
|
} else{
|
||||||
|
@ -300,35 +308,49 @@ Contacts={
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
delete: function() {
|
delete:function() {
|
||||||
$('#contacts_deletecard').tipsy('hide');
|
$('#contacts_deletecard').tipsy('hide');
|
||||||
$.getJSON('ajax/deletecard.php',{'id':this.id},function(jsondata){
|
OC.dialogs.confirm(t('contacts', 'Are you sure you want to delete this contact?'), t('contacts', 'Warning'), function(answer) {
|
||||||
if(jsondata.status == 'success'){
|
if(answer == true) {
|
||||||
$('#leftcontent [data-id="'+jsondata.data.id+'"]').remove();
|
$.getJSON('ajax/deletecard.php',{'id':Contacts.UI.Card.id},function(jsondata){
|
||||||
$('#rightcontent').data('id','');
|
if(jsondata.status == 'success'){
|
||||||
//$('#rightcontent').empty();
|
var newid = '';
|
||||||
this.id = this.fn = this.fullname = this.shortname = this.famname = this.givname = this.addname = this.honpre = this.honsuf = '';
|
var curlistitem = $('#leftcontent [data-id="'+jsondata.data.id+'"]');
|
||||||
this.data = undefined;
|
var newlistitem = curlistitem.prev();
|
||||||
// Load first in list.
|
console.log('Previous: ' + newlistitem);
|
||||||
if($('#contacts li').length > 0) {
|
if(newlistitem == undefined) {
|
||||||
Contacts.UI.Card.update();
|
newlistitem = curlistitem.next();
|
||||||
} else {
|
|
||||||
// load intro page
|
|
||||||
$.getJSON('ajax/loadintro.php',{},function(jsondata){
|
|
||||||
if(jsondata.status == 'success'){
|
|
||||||
id = '';
|
|
||||||
$('#rightcontent').data('id','');
|
|
||||||
$('#rightcontent').html(jsondata.data.page);
|
|
||||||
}
|
}
|
||||||
else{
|
curlistitem.remove();
|
||||||
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
|
if(newlistitem != undefined) {
|
||||||
|
newid = newlistitem.data('id');
|
||||||
}
|
}
|
||||||
});
|
$('#rightcontent').data('id',newid);
|
||||||
}
|
//$('#rightcontent').empty();
|
||||||
}
|
this.id = this.fn = this.fullname = this.shortname = this.famname = this.givname = this.addname = this.honpre = this.honsuf = '';
|
||||||
else{
|
this.data = undefined;
|
||||||
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
|
// Load first in list.
|
||||||
//alert(jsondata.data.message);
|
if($('#contacts li').length > 0) {
|
||||||
|
Contacts.UI.Card.update(newid);
|
||||||
|
} else {
|
||||||
|
// load intro page
|
||||||
|
$.getJSON('ajax/loadintro.php',{},function(jsondata){
|
||||||
|
if(jsondata.status == 'success'){
|
||||||
|
id = '';
|
||||||
|
$('#rightcontent').data('id','');
|
||||||
|
$('#rightcontent').html(jsondata.data.page);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
|
||||||
|
//alert(jsondata.data.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
|
@ -1232,6 +1254,7 @@ $(document).ready(function(){
|
||||||
*/
|
*/
|
||||||
$('#leftcontent li').live('click',function(){
|
$('#leftcontent li').live('click',function(){
|
||||||
var id = $(this).data('id');
|
var id = $(this).data('id');
|
||||||
|
$(this).addClass('active');
|
||||||
var oldid = $('#rightcontent').data('id');
|
var oldid = $('#rightcontent').data('id');
|
||||||
if(oldid != 0){
|
if(oldid != 0){
|
||||||
$('#leftcontent li[data-id="'+oldid+'"]').removeClass('active');
|
$('#leftcontent li[data-id="'+oldid+'"]').removeClass('active');
|
||||||
|
|
|
@ -56,13 +56,6 @@ $id = isset($_['id']) ? $_['id'] : '';
|
||||||
<dd style="display:none;" class="propertycontainer" id="nickname_value" data-element="NICKNAME"><input id="nickname" required="required" name="value[NICKNAME]" type="text" class="contacts_property" style="width:16em;" name="value" value="" placeholder="<?php echo $l->t('Enter nickname'); ?>" /><a class="action delete" onclick="$(this).tipsy('hide');Contacts.UI.Card.deleteProperty(this, 'single');" title="<?php echo $l->t('Delete'); ?>"></a></dd>
|
<dd style="display:none;" class="propertycontainer" id="nickname_value" data-element="NICKNAME"><input id="nickname" required="required" name="value[NICKNAME]" type="text" class="contacts_property" style="width:16em;" name="value" value="" placeholder="<?php echo $l->t('Enter nickname'); ?>" /><a class="action delete" onclick="$(this).tipsy('hide');Contacts.UI.Card.deleteProperty(this, 'single');" title="<?php echo $l->t('Delete'); ?>"></a></dd>
|
||||||
<dt style="display:none;" id="bday_label" data-element="BDAY"><label for="bday"><?php echo $l->t('Birthday'); ?></label></dt>
|
<dt style="display:none;" id="bday_label" data-element="BDAY"><label for="bday"><?php echo $l->t('Birthday'); ?></label></dt>
|
||||||
<dd style="display:none;" class="propertycontainer" id="bday_value" data-element="BDAY"><input id="bday" required="required" name="value" type="text" class="contacts_property" value="" placeholder="<?php echo $l->t('dd-mm-yyyy'); ?>" /><a class="action delete" onclick="$(this).tipsy('hide');Contacts.UI.Card.deleteProperty(this, 'single');" title="<?php echo $l->t('Delete'); ?>"></a></dd>
|
<dd style="display:none;" class="propertycontainer" id="bday_value" data-element="BDAY"><input id="bday" required="required" name="value" type="text" class="contacts_property" value="" placeholder="<?php echo $l->t('dd-mm-yyyy'); ?>" /><a class="action delete" onclick="$(this).tipsy('hide');Contacts.UI.Card.deleteProperty(this, 'single');" title="<?php echo $l->t('Delete'); ?>"></a></dd>
|
||||||
<!-- dt id="categories_label" data-element="CATEGORIES"><label for="categories"><?php echo $l->t('Categories'); ?></label></dt>
|
|
||||||
<dd class="propertycontainer" id="categories_value" data-element="CATEGORIES">
|
|
||||||
<select class="contacts_property" multiple="multiple" id="categories" name="value[]">
|
|
||||||
<?php echo html_select_options($_['categories'], array(), array('combine'=>true)) ?>
|
|
||||||
</select>
|
|
||||||
<a class="action edit" onclick="$(this).tipsy('hide');OCCategories.edit();" title="<?php echo $l->t('Edit categories'); ?>"></a>
|
|
||||||
</dd -->
|
|
||||||
<dt style="display:none;" id="categories_label" data-element="CATEGORIES"><label for="categories"><?php echo $l->t('Categories'); ?></label></dt>
|
<dt style="display:none;" id="categories_label" data-element="CATEGORIES"><label for="categories"><?php echo $l->t('Categories'); ?></label></dt>
|
||||||
<dd style="display:none;" class="propertycontainer" id="categories_value" data-element="CATEGORIES"><input id="categories" required="required" name="value[CATEGORIES]" type="text" class="contacts_property" style="width:16em;" name="value" value="" placeholder="<?php echo $l->t('Categories'); ?>" /><a class="action delete" onclick="$(this).tipsy('hide');Contacts.UI.Card.deleteProperty(this, 'single');" title="<?php echo $l->t('Delete'); ?>"></a><a class="action edit" onclick="$(this).tipsy('hide');OCCategories.edit();" title="<?php echo $l->t('Edit categories'); ?>"></a></dd>
|
<dd style="display:none;" class="propertycontainer" id="categories_value" data-element="CATEGORIES"><input id="categories" required="required" name="value[CATEGORIES]" type="text" class="contacts_property" style="width:16em;" name="value" value="" placeholder="<?php echo $l->t('Categories'); ?>" /><a class="action delete" onclick="$(this).tipsy('hide');Contacts.UI.Card.deleteProperty(this, 'single');" title="<?php echo $l->t('Delete'); ?>"></a><a class="action edit" onclick="$(this).tipsy('hide');OCCategories.edit();" title="<?php echo $l->t('Edit categories'); ?>"></a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -131,6 +124,7 @@ $(document).ready(function(){
|
||||||
if('<?php echo $id; ?>'!='') {
|
if('<?php echo $id; ?>'!='') {
|
||||||
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':'<?php echo $id; ?>'},function(jsondata){
|
$.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':'<?php echo $id; ?>'},function(jsondata){
|
||||||
if(jsondata.status == 'success'){
|
if(jsondata.status == 'success'){
|
||||||
|
$('#leftcontent li[data-id="<?php echo $id; ?>"]').addClass('active');
|
||||||
Contacts.UI.Card.loadContact(jsondata.data);
|
Contacts.UI.Card.loadContact(jsondata.data);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
OC::$CLASSPATH['OC_Archive'] = 'apps/files_archive/lib/archive.php';
|
OC::$CLASSPATH['OC_Archive'] = 'apps/files_archive/lib/archive.php';
|
||||||
foreach(array('ZIP') as $type){
|
OC::$CLASSPATH['Archive_Tar'] = '3rdparty/Archive/Tar.php';
|
||||||
|
foreach(array('ZIP','TAR') as $type){
|
||||||
OC::$CLASSPATH['OC_Archive_'.$type] = 'apps/files_archive/lib/'.strtolower($type).'.php';
|
OC::$CLASSPATH['OC_Archive_'.$type] = 'apps/files_archive/lib/'.strtolower($type).'.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,5 +11,9 @@ $(document).ready(function() {
|
||||||
window.location='index.php?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
|
window.location='index.php?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
|
||||||
});
|
});
|
||||||
FileActions.setDefault('application/zip','Open');
|
FileActions.setDefault('application/zip','Open');
|
||||||
|
FileActions.register('application/x-gzip','Open','',function(filename){
|
||||||
|
window.location='index.php?dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
|
||||||
|
});
|
||||||
|
FileActions.setDefault('application/x-gzip','Open');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -17,6 +17,15 @@ abstract class OC_Archive{
|
||||||
switch($ext){
|
switch($ext){
|
||||||
case '.zip':
|
case '.zip':
|
||||||
return new OC_Archive_ZIP($path);
|
return new OC_Archive_ZIP($path);
|
||||||
|
case '.gz':
|
||||||
|
case '.bz':
|
||||||
|
case '.bz2':
|
||||||
|
if(strpos($path,'.tar.')){
|
||||||
|
return new OC_Archive_TAR($path);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '.tgz':
|
||||||
|
return new OC_Archive_TAR($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +86,13 @@ abstract class OC_Archive{
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
abstract function extractFile($path,$dest);
|
abstract function extractFile($path,$dest);
|
||||||
|
/**
|
||||||
|
* extract the archive
|
||||||
|
* @param string path
|
||||||
|
* @param string dest
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
abstract function extract($dest);
|
||||||
/**
|
/**
|
||||||
* check if a file or folder exists in the archive
|
* check if a file or folder exists in the archive
|
||||||
* @param string path
|
* @param string path
|
||||||
|
|
|
@ -125,7 +125,7 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
|
||||||
self::$rootView=new OC_FilesystemView('');
|
self::$rootView=new OC_FilesystemView('');
|
||||||
}
|
}
|
||||||
self::$enableAutomount=false;//prevent recursion
|
self::$enableAutomount=false;//prevent recursion
|
||||||
$supported=array('zip');
|
$supported=array('zip','tar.gz','tar.bz2','tgz');
|
||||||
foreach($supported as $type){
|
foreach($supported as $type){
|
||||||
$ext='.'.$type.'/';
|
$ext='.'.$type.'/';
|
||||||
if(($pos=strpos(strtolower($path),$ext))!==false){
|
if(($pos=strpos(strtolower($path),$ext))!==false){
|
||||||
|
@ -139,4 +139,8 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
|
||||||
}
|
}
|
||||||
self::$enableAutomount=true;
|
self::$enableAutomount=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function rename($path1,$path2){
|
||||||
|
return $this->archive->rename($path1,$path2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,277 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class OC_Archive_TAR extends OC_Archive{
|
||||||
|
const PLAIN=0;
|
||||||
|
const GZIP=1;
|
||||||
|
const BZIP=2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Archive_Tar tar
|
||||||
|
*/
|
||||||
|
private $tar=null;
|
||||||
|
private $path;
|
||||||
|
|
||||||
|
function __construct($source){
|
||||||
|
$types=array(null,'gz','bz');
|
||||||
|
$this->path=$source;
|
||||||
|
$this->tar=new Archive_Tar($source,$types[self::getTarType($source)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* try to detect the type of tar compression
|
||||||
|
* @param string file
|
||||||
|
* @return str
|
||||||
|
*/
|
||||||
|
static public function getTarType($file){
|
||||||
|
if(strpos($file,'.')){
|
||||||
|
$extention=substr($file,strrpos($file,'.'));
|
||||||
|
switch($extention){
|
||||||
|
case 'gz':
|
||||||
|
case 'tgz':
|
||||||
|
return self::GZIP;
|
||||||
|
case 'bz':
|
||||||
|
case 'bz2':
|
||||||
|
return self::BZIP;
|
||||||
|
default:
|
||||||
|
return self::PLAIN;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return self::PLAIN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add an empty folder to the archive
|
||||||
|
* @param string path
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function addFolder($path){
|
||||||
|
$tmpBase=get_temp_dir().'/';
|
||||||
|
if(substr($path,-1,1)!='/'){
|
||||||
|
$path.='/';
|
||||||
|
}
|
||||||
|
if($this->fileExists($path)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
mkdir($tmpBase.$path);
|
||||||
|
$result=$this->tar->addModify(array($tmpBase.$path),'',$tmpBase);
|
||||||
|
rmdir($tmpBase.$path);
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* add a file to the archive
|
||||||
|
* @param string path
|
||||||
|
* @param string source either a local file or string data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function addFile($path,$source=''){
|
||||||
|
if($this->fileExists($path)){
|
||||||
|
$this->remove($path);
|
||||||
|
}
|
||||||
|
if(file_exists($source)){
|
||||||
|
$header=array();
|
||||||
|
$dummy='';
|
||||||
|
$this->tar->_openAppend();
|
||||||
|
$result=$this->tar->_addfile($source,$header,$dummy,$dummy,$path);
|
||||||
|
}else{
|
||||||
|
$result=$this->tar->addString($path,$source);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rename a file or folder in the archive
|
||||||
|
* @param string source
|
||||||
|
* @param string dest
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function rename($source,$dest){
|
||||||
|
//no proper way to delete, rename entire archive, rename file and remake archive
|
||||||
|
$tmp=OC_Helper::tmpFolder();
|
||||||
|
$this->tar->extract($tmp);
|
||||||
|
rename($tmp.$source,$tmp.$dest);
|
||||||
|
$this->tar=null;
|
||||||
|
unlink($this->path);
|
||||||
|
$types=array(null,'gz','bz');
|
||||||
|
$this->tar=new Archive_Tar($this->path,$types[self::getTarType($this->path)]);
|
||||||
|
$this->tar->createModify(array($tmp),'',$tmp.'/');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getHeader($file){
|
||||||
|
$headers=$this->tar->listContent();
|
||||||
|
foreach($headers as $header){
|
||||||
|
if($file==$header['filename'] or $file.'/'==$header['filename']){
|
||||||
|
return $header;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the uncompressed size of a file in the archive
|
||||||
|
* @param string path
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
function filesize($path){
|
||||||
|
$stat=$this->getHeader($path);
|
||||||
|
return $stat['size'];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* get the last modified time of a file in the archive
|
||||||
|
* @param string path
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
function mtime($path){
|
||||||
|
$stat=$this->getHeader($path);
|
||||||
|
return $stat['mtime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the files in a folder
|
||||||
|
* @param path
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getFolder($path){
|
||||||
|
$files=$this->getFiles();
|
||||||
|
$folderContent=array();
|
||||||
|
$pathLength=strlen($path);
|
||||||
|
foreach($files as $file){
|
||||||
|
if(substr($file,0,$pathLength)==$path and $file!=$path){
|
||||||
|
if(strrpos(substr($file,0,-1),'/')<=$pathLength){
|
||||||
|
$folderContent[]=substr($file,$pathLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $folderContent;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*get all files in the archive
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getFiles(){
|
||||||
|
$headers=$this->tar->listContent();
|
||||||
|
$files=array();
|
||||||
|
foreach($headers as $header){
|
||||||
|
$files[]=$header['filename'];
|
||||||
|
}
|
||||||
|
return $files;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* get the content of a file
|
||||||
|
* @param string path
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function getFile($path){
|
||||||
|
return $this->tar->extractInString($path);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* extract a single file from the archive
|
||||||
|
* @param string path
|
||||||
|
* @param string dest
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function extractFile($path,$dest){
|
||||||
|
$tmp=OC_Helper::tmpFolder();
|
||||||
|
if(!$this->fileExists($path)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$success=$this->tar->extractList(array($path),$tmp);
|
||||||
|
if($success){
|
||||||
|
rename($tmp.$path,$dest);
|
||||||
|
}
|
||||||
|
OC_Helper::rmdirr($tmp);
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* extract the archive
|
||||||
|
* @param string path
|
||||||
|
* @param string dest
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function extract($dest){
|
||||||
|
return $this->tar->extract($dest);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* check if a file or folder exists in the archive
|
||||||
|
* @param string path
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function fileExists($path){
|
||||||
|
return $this->getHeader($path)!==null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* remove a file or folder from the archive
|
||||||
|
* @param string path
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function remove($path){
|
||||||
|
if(!$this->fileExists($path)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//no proper way to delete, extract entire archive, delete file and remake archive
|
||||||
|
$tmp=OC_Helper::tmpFolder();
|
||||||
|
$this->tar->extract($tmp);
|
||||||
|
OC_Helper::rmdirr($tmp.$path);
|
||||||
|
$this->tar=null;
|
||||||
|
unlink($this->path);
|
||||||
|
$this->reopen();
|
||||||
|
$this->tar->createModify(array($tmp),'',$tmp);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* get a file handler
|
||||||
|
* @param string path
|
||||||
|
* @param string mode
|
||||||
|
* @return resource
|
||||||
|
*/
|
||||||
|
function getStream($path,$mode){
|
||||||
|
if(strrpos($path,'.')!==false){
|
||||||
|
$ext=substr($path,strrpos($path,'.'));
|
||||||
|
}else{
|
||||||
|
$ext='';
|
||||||
|
}
|
||||||
|
$tmpFile=OC_Helper::tmpFile($ext);
|
||||||
|
if($this->fileExists($path)){
|
||||||
|
$this->extractFile($path,$tmpFile);
|
||||||
|
}elseif($mode=='r' or $mode=='rb'){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($mode=='r' or $mode=='rb'){
|
||||||
|
return fopen($tmpFile,$mode);
|
||||||
|
}else{
|
||||||
|
OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack');
|
||||||
|
self::$tempFiles[$tmpFile]=$path;
|
||||||
|
return fopen('close://'.$tmpFile,$mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static $tempFiles=array();
|
||||||
|
/**
|
||||||
|
* write back temporary files
|
||||||
|
*/
|
||||||
|
function writeBack($tmpFile){
|
||||||
|
if(isset(self::$tempFiles[$tmpFile])){
|
||||||
|
$this->addFile(self::$tempFiles[$tmpFile],$tmpFile);
|
||||||
|
unlink($tmpFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reopen the archive to ensure everything is written
|
||||||
|
*/
|
||||||
|
private function reopen(){
|
||||||
|
if($this->tar){
|
||||||
|
$this->tar->_close();
|
||||||
|
$this->tar=null;
|
||||||
|
}
|
||||||
|
$types=array(null,'gz','bz');
|
||||||
|
$this->tar=new Archive_Tar($this->path,$types[self::getTarType($this->path)]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,6 @@ class OC_Archive_ZIP extends OC_Archive{
|
||||||
* @var ZipArchive zip
|
* @var ZipArchive zip
|
||||||
*/
|
*/
|
||||||
private $zip=null;
|
private $zip=null;
|
||||||
private $contents=array();
|
|
||||||
private $success=false;
|
private $success=false;
|
||||||
private $path;
|
private $path;
|
||||||
|
|
||||||
|
@ -56,7 +55,9 @@ class OC_Archive_ZIP extends OC_Archive{
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function rename($source,$dest){
|
function rename($source,$dest){
|
||||||
return $this->zip->renameName($source,$dest);
|
$source=$this->stripPath($source);
|
||||||
|
$dest=$this->stripPath($dest);
|
||||||
|
$this->zip->renameName($source,$dest);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* get the uncompressed size of a file in the archive
|
* get the uncompressed size of a file in the archive
|
||||||
|
@ -99,15 +100,11 @@ class OC_Archive_ZIP extends OC_Archive{
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function getFiles(){
|
function getFiles(){
|
||||||
if(count($this->contents)){
|
|
||||||
return $this->contents;
|
|
||||||
}
|
|
||||||
$fileCount=$this->zip->numFiles;
|
$fileCount=$this->zip->numFiles;
|
||||||
$files=array();
|
$files=array();
|
||||||
for($i=0;$i<$fileCount;$i++){
|
for($i=0;$i<$fileCount;$i++){
|
||||||
$files[]=$this->zip->getNameIndex($i);
|
$files[]=$this->zip->getNameIndex($i);
|
||||||
}
|
}
|
||||||
$this->contents=$files;
|
|
||||||
return $files;
|
return $files;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -128,13 +125,22 @@ class OC_Archive_ZIP extends OC_Archive{
|
||||||
$fp = $this->zip->getStream($path);
|
$fp = $this->zip->getStream($path);
|
||||||
file_put_contents($dest,$fp);
|
file_put_contents($dest,$fp);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* extract the archive
|
||||||
|
* @param string path
|
||||||
|
* @param string dest
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function extract($dest){
|
||||||
|
return $this->zip->extractTo($dest);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* check if a file or folder exists in the archive
|
* check if a file or folder exists in the archive
|
||||||
* @param string path
|
* @param string path
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function fileExists($path){
|
function fileExists($path){
|
||||||
return $this->zip->locateName($path)!==false;
|
return ($this->zip->locateName($path)!==false) or ($this->zip->locateName($path.'/')!==false);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* remove a file or folder from the archive
|
* remove a file or folder from the archive
|
||||||
|
@ -142,7 +148,11 @@ class OC_Archive_ZIP extends OC_Archive{
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function remove($path){
|
function remove($path){
|
||||||
return $this->zip->deleteName($path);
|
if($this->fileExists($path.'/')){
|
||||||
|
return $this->zip->deleteName($path.'/');
|
||||||
|
}else{
|
||||||
|
return $this->zip->deleteName($path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* get a file handler
|
* get a file handler
|
||||||
|
@ -179,4 +189,12 @@ class OC_Archive_ZIP extends OC_Archive{
|
||||||
unlink($tmpFile);
|
unlink($tmpFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function stripPath($path){
|
||||||
|
if(substr($path,0,1)=='/'){
|
||||||
|
return substr($path,1);
|
||||||
|
}else{
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,10 +27,10 @@ abstract class Test_Archive extends UnitTestCase {
|
||||||
$this->instance=$this->getExisting();
|
$this->instance=$this->getExisting();
|
||||||
$allFiles=$this->instance->getFiles();
|
$allFiles=$this->instance->getFiles();
|
||||||
$expected=array('lorem.txt','logo-wide.png','dir/','dir/lorem.txt');
|
$expected=array('lorem.txt','logo-wide.png','dir/','dir/lorem.txt');
|
||||||
$this->assertEqual(4,count($allFiles));
|
$this->assertEqual(4,count($allFiles),'only found '.count($allFiles).' out of 4 expected files');
|
||||||
foreach($expected as $file){
|
foreach($expected as $file){
|
||||||
$this->assertNotIdentical(false,array_search($file,$allFiles),'cant find '.$file.' in archive');
|
$this->assertNotIdentical(false,array_search($file,$allFiles),'cant find '.$file.' in archive');
|
||||||
$this->assertTrue($this->instance->fileExists($file));
|
$this->assertTrue($this->instance->fileExists($file),'file '.$file.' does not exist in archive');
|
||||||
}
|
}
|
||||||
$this->assertFalse($this->instance->fileExists('non/existing/file'));
|
$this->assertFalse($this->instance->fileExists('non/existing/file'));
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@ abstract class Test_Archive extends UnitTestCase {
|
||||||
$this->instance->addFile('lorem.txt',$textFile);
|
$this->instance->addFile('lorem.txt',$textFile);
|
||||||
$this->assertEqual(1,count($this->instance->getFiles()));
|
$this->assertEqual(1,count($this->instance->getFiles()));
|
||||||
$this->assertTrue($this->instance->fileExists('lorem.txt'));
|
$this->assertTrue($this->instance->fileExists('lorem.txt'));
|
||||||
|
$this->assertFalse($this->instance->fileExists('lorem.txt/'));
|
||||||
|
|
||||||
$this->assertEqual(file_get_contents($textFile),$this->instance->getFile('lorem.txt'));
|
$this->assertEqual(file_get_contents($textFile),$this->instance->getFile('lorem.txt'));
|
||||||
$this->instance->addFile('lorem.txt','foobar');
|
$this->instance->addFile('lorem.txt','foobar');
|
||||||
|
@ -94,4 +95,39 @@ abstract class Test_Archive extends UnitTestCase {
|
||||||
$this->assertTrue($this->instance->fileExists('lorem.txt'));
|
$this->assertTrue($this->instance->fileExists('lorem.txt'));
|
||||||
$this->assertEqual(file_get_contents($dir.'/lorem.txt'),$this->instance->getFile('lorem.txt'));
|
$this->assertEqual(file_get_contents($dir.'/lorem.txt'),$this->instance->getFile('lorem.txt'));
|
||||||
}
|
}
|
||||||
|
public function testFolder(){
|
||||||
|
$this->instance=$this->getNew();
|
||||||
|
$this->assertFalse($this->instance->fileExists('/test'));
|
||||||
|
$this->assertFalse($this->instance->fileExists('/test/'));
|
||||||
|
$this->instance->addFolder('/test');
|
||||||
|
$this->assertTrue($this->instance->fileExists('/test'));
|
||||||
|
$this->assertTrue($this->instance->fileExists('/test/'));
|
||||||
|
$this->instance->remove('/test');
|
||||||
|
$this->assertFalse($this->instance->fileExists('/test'));
|
||||||
|
$this->assertFalse($this->instance->fileExists('/test/'));
|
||||||
|
}
|
||||||
|
public function testExtract(){
|
||||||
|
$dir=OC::$SERVERROOT.'/apps/files_archive/tests/data';
|
||||||
|
$this->instance=$this->getExisting();
|
||||||
|
$tmpDir=OC_Helper::tmpFolder();
|
||||||
|
$this->instance->extract($tmpDir);
|
||||||
|
$this->assertEqual(true,file_exists($tmpDir.'lorem.txt'));
|
||||||
|
$this->assertEqual(true,file_exists($tmpDir.'dir/lorem.txt'));
|
||||||
|
$this->assertEqual(true,file_exists($tmpDir.'logo-wide.png'));
|
||||||
|
$this->assertEqual(file_get_contents($dir.'/lorem.txt'),file_get_contents($tmpDir.'lorem.txt'));
|
||||||
|
OC_Helper::rmdirr($tmpDir);
|
||||||
|
}
|
||||||
|
public function testMoveRemove(){
|
||||||
|
$dir=OC::$SERVERROOT.'/apps/files_archive/tests/data';
|
||||||
|
$textFile=$dir.'/lorem.txt';
|
||||||
|
$this->instance=$this->getNew();
|
||||||
|
$this->instance->addFile('lorem.txt',$textFile);
|
||||||
|
$this->assertFalse($this->instance->fileExists('target.txt'));
|
||||||
|
$this->instance->rename('lorem.txt','target.txt');
|
||||||
|
$this->assertTrue($this->instance->fileExists('target.txt'));
|
||||||
|
$this->assertFalse($this->instance->fileExists('lorem.txt'));
|
||||||
|
$this->assertEqual(file_get_contents($textFile),$this->instance->getFile('target.txt'));
|
||||||
|
$this->instance->remove('target.txt');
|
||||||
|
$this->assertFalse($this->instance->fileExists('target.txt'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('archive.php');
|
||||||
|
|
||||||
|
class Test_Archive_TAR extends Test_Archive{
|
||||||
|
protected function getExisting(){
|
||||||
|
$dir=OC::$SERVERROOT.'/apps/files_archive/tests/data';
|
||||||
|
return new OC_Archive_TAR($dir.'/data.tar.gz');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getNew(){
|
||||||
|
return new OC_Archive_TAR(OC_Helper::tmpFile('.tar.gz'));
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,21 +7,23 @@ OC_JSON::checkLoggedIn();
|
||||||
OC_JSON::checkAppEnabled('files_sharing');
|
OC_JSON::checkAppEnabled('files_sharing');
|
||||||
|
|
||||||
$users = array();
|
$users = array();
|
||||||
$ocusers = OC_User::getUsers();
|
$groups = array();
|
||||||
$self = OC_User::getUser();
|
$self = OC_User::getUser();
|
||||||
$groups = OC_Group::getUserGroups($self);
|
$userGroups = OC_Group::getUserGroups($self);
|
||||||
$users[] = "<optgroup label='Users'>";
|
$users[] = "<optgroup label='Users'>";
|
||||||
foreach ($ocusers as $user) {
|
$groups[] = "<optgroup label='Groups'>";
|
||||||
if ($user != $self) {
|
foreach ($userGroups as $group) {
|
||||||
$users[] = "<option value='".$user."'>".$user."</option>";
|
$groupUsers = OC_Group::usersInGroup($group);
|
||||||
|
foreach ($groupUsers as $user) {
|
||||||
|
if ($user != $self) {
|
||||||
|
$users[] = "<option value='".$user."'>".$user."</option>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$groups[] = "<option value='".$group."'>".$group."</option>";
|
||||||
}
|
}
|
||||||
$users[] = "</optgroup>";
|
$users[] = "</optgroup>";
|
||||||
$users[] = "<optgroup label='Groups'>";
|
$groups[] = "</optgroup>";
|
||||||
foreach ($groups as $group) {
|
$users = array_merge($users, $groups);
|
||||||
$users[] = "<option value='".$group."'>".$group."</option>";
|
|
||||||
}
|
|
||||||
$users[] = "</optgroup>";
|
|
||||||
OC_JSON::encodedPrint($users);
|
OC_JSON::encodedPrint($users);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -52,8 +52,18 @@ class OC_Share {
|
||||||
// Remove the owner from the list of users in the group
|
// Remove the owner from the list of users in the group
|
||||||
$uid_shared_with = array_diff($uid_shared_with, array($uid_owner));
|
$uid_shared_with = array_diff($uid_shared_with, array($uid_owner));
|
||||||
} else if (OC_User::userExists($uid_shared_with)) {
|
} else if (OC_User::userExists($uid_shared_with)) {
|
||||||
$gid = null;
|
$userGroups = OC_Group::getUserGroups($uid_owner);
|
||||||
$uid_shared_with = array($uid_shared_with);
|
// Check if the user is in one of the owner's groups
|
||||||
|
foreach ($userGroups as $group) {
|
||||||
|
if ($inGroup = OC_Group::inGroup($uid_shared_with, $group)) {
|
||||||
|
$gid = null;
|
||||||
|
$uid_shared_with = array($uid_shared_with);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$inGroup) {
|
||||||
|
throw new Exception("You can't share with ".$uid_shared_with);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Exception($uid_shared_with." is not a user");
|
throw new Exception($uid_shared_with." is not a user");
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,6 +127,9 @@ function handleGetGallery($path) {
|
||||||
function handleShare($path, $share, $recursive) {
|
function handleShare($path, $share, $recursive) {
|
||||||
$recursive = $recursive == 'true' ? 1 : 0;
|
$recursive = $recursive == 'true' ? 1 : 0;
|
||||||
$owner = OC_User::getUser();
|
$owner = OC_User::getUser();
|
||||||
|
$root = OC_Preferences::getValue(OC_User::getUser(),'gallery', 'root', '/');
|
||||||
|
$path = utf8_decode(rtrim($root.$path,'/'));
|
||||||
|
if($path == '') $path = '/';
|
||||||
$r = OC_Gallery_Album::find($owner, null, $path);
|
$r = OC_Gallery_Album::find($owner, null, $path);
|
||||||
if ($row = $r->fetchRow()) {
|
if ($row = $r->fetchRow()) {
|
||||||
$albumId = $row['album_id'];
|
$albumId = $row['album_id'];
|
||||||
|
|
|
@ -22,6 +22,7 @@ div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; }
|
||||||
#leftcontent img.remove { display:none; float:right; cursor:pointer; opacity: 0; }
|
#leftcontent img.remove { display:none; float:right; cursor:pointer; opacity: 0; }
|
||||||
#leftcontent li:hover img.remove { display:inline; opacity: .3; }
|
#leftcontent li:hover img.remove { display:inline; opacity: .3; }
|
||||||
#leftcontent li div.label { float: left; width: 200px; overflow: hidden; text-overflow: ellipsis; }
|
#leftcontent li div.label { float: left; width: 200px; overflow: hidden; text-overflow: ellipsis; }
|
||||||
|
#rightcontent { overflow: auto; }
|
||||||
#playlist li { list-style-type:none; }
|
#playlist li { list-style-type:none; }
|
||||||
.template { display:none; }
|
.template { display:none; }
|
||||||
.collection_playing { background:#eee; font-weight: bold; }
|
.collection_playing { background:#eee; font-weight: bold; }
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
|
||||||
<form action="index.php" method="post">
|
<form action="index.php" method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<?php if(!empty($_['redirect'])) { echo '<input type="hidden" name="redirect_url" value="'.$_['redirect'].'" />'; } ?>
|
<?php if(!empty($_['redirect'])) { echo '<input type="hidden" name="redirect_url" value="'.$_['redirect'].'" />'; } ?>
|
||||||
|
|
|
@ -64,8 +64,8 @@ table td.filename .nametext { width:60%; }
|
||||||
table td.filename form { float:left; font-size:.85em; }
|
table td.filename form { float:left; font-size:.85em; }
|
||||||
table thead.fixed tr{ position:fixed; top:6.5em; z-index:49; -moz-box-shadow:0 -3px 7px #ddd; -webkit-box-shadow:0 -3px 7px #ddd; box-shadow:0 -3px 7px #ddd; }
|
table thead.fixed tr{ position:fixed; top:6.5em; z-index:49; -moz-box-shadow:0 -3px 7px #ddd; -webkit-box-shadow:0 -3px 7px #ddd; box-shadow:0 -3px 7px #ddd; }
|
||||||
table thead.fixed { height:2em; }
|
table thead.fixed { height:2em; }
|
||||||
#fileList tr td.filename>input[type=checkbox]:first-child { opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
|
#fileList tr td.filename>input[type=checkbox]:first-child { opacity:0; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; }
|
||||||
#fileList tr td.filename>input[type="checkbox"]:hover:first-child { opacity:.8; }
|
#fileList tr td.filename>input[type="checkbox"]:hover:first-child { opacity:.8; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; }
|
||||||
#fileList tr td.filename>input[type="checkbox"]:checked:first-child { opacity:1; }
|
#fileList tr td.filename>input[type="checkbox"]:checked:first-child { opacity:1; }
|
||||||
#fileList tr td.filename { -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; }
|
#fileList tr td.filename { -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; }
|
||||||
#select_all { float:left; margin:.3em 0.6em 0 .5em; }
|
#select_all { float:left; margin:.3em 0.6em 0 .5em; }
|
||||||
|
|
|
@ -98,7 +98,7 @@ $(document).ready(function() {
|
||||||
procesSelection();
|
procesSelection();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('td.filename input:checkbox').live('click',function(event) {
|
$('td.filename input:checkbox').live('change',function(event) {
|
||||||
if (event.shiftKey) {
|
if (event.shiftKey) {
|
||||||
var last = $(lastChecked).parent().parent().prevAll().length;
|
var last = $(lastChecked).parent().parent().prevAll().length;
|
||||||
var first = $(this).parent().parent().prevAll().length;
|
var first = $(this).parent().parent().prevAll().length;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
|
||||||
<div id="controls">
|
<div id="controls">
|
||||||
<?php echo($_['breadcrumb']); ?>
|
<?php echo($_['breadcrumb']); ?>
|
||||||
<?php if (!isset($_['readonly']) || !$_['readonly']):?>
|
<?php if (!isset($_['readonly']) || !$_['readonly']):?>
|
||||||
|
|
|
@ -318,9 +318,6 @@ class OC_DB {
|
||||||
|
|
||||||
// Make changes and save them to an in-memory file
|
// Make changes and save them to an in-memory file
|
||||||
$file2 = 'static://db_scheme';
|
$file2 = 'static://db_scheme';
|
||||||
if($file2 == ''){
|
|
||||||
die('could not create tempfile in get_temp_dir() - aborting');
|
|
||||||
}
|
|
||||||
$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
|
$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
|
||||||
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
|
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
|
||||||
if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
|
if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
|
||||||
|
|
|
@ -432,6 +432,19 @@ class OC_Helper {
|
||||||
self::$tmpFiles[]=$file;
|
self::$tmpFiles[]=$file;
|
||||||
return $file;
|
return $file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a temporary folder with an unique filename
|
||||||
|
* @return string
|
||||||
|
*
|
||||||
|
* temporary files are automatically cleaned up after the script is finished
|
||||||
|
*/
|
||||||
|
public static function tmpFolder(){
|
||||||
|
$path=get_temp_dir().'/'.md5(time().rand());
|
||||||
|
mkdir($path);
|
||||||
|
self::$tmpFiles[]=$path;
|
||||||
|
return $path.'/';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove all files created by self::tmpFile
|
* remove all files created by self::tmpFile
|
||||||
|
@ -439,7 +452,7 @@ class OC_Helper {
|
||||||
public static function cleanTmp(){
|
public static function cleanTmp(){
|
||||||
foreach(self::$tmpFiles as $file){
|
foreach(self::$tmpFiles as $file){
|
||||||
if(file_exists($file)){
|
if(file_exists($file)){
|
||||||
unlink($file);
|
self::rmdirr($file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ class OC_Installer{
|
||||||
|
|
||||||
//download the file if necesary
|
//download the file if necesary
|
||||||
if($data['source']=='http'){
|
if($data['source']=='http'){
|
||||||
$path=OC_Helper::tmpFile('.zip');
|
$path=OC_Helper::tmpFile();
|
||||||
if(!isset($data['href'])){
|
if(!isset($data['href'])){
|
||||||
OC_Log::write('core','No href specified when installing app from http',OC_Log::ERROR);
|
OC_Log::write('core','No href specified when installing app from http',OC_Log::ERROR);
|
||||||
return false;
|
return false;
|
||||||
|
@ -76,14 +76,24 @@ class OC_Installer{
|
||||||
$path=$data['path'];
|
$path=$data['path'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//detect the archive type
|
||||||
|
$mime=OC_Helper::getMimeType($path);
|
||||||
|
if($mime=='application/zip'){
|
||||||
|
rename($path,$path.'.zip');
|
||||||
|
$path.='.zip';
|
||||||
|
}elseif($mime=='application/x-gzip'){
|
||||||
|
rename($path,$path.'.tgz');
|
||||||
|
$path.='.tgz';
|
||||||
|
}else{
|
||||||
|
OC_Log::write('core','Archives of type '.$mime.' are not supported',OC_Log::ERROR);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//extract the archive in a temporary folder
|
//extract the archive in a temporary folder
|
||||||
$extractDir=tempnam(get_temp_dir(),'oc_installer_uncompressed_');
|
$extractDir=OC_Helper::tmpFolder();
|
||||||
unlink($extractDir);
|
|
||||||
mkdir($extractDir);
|
mkdir($extractDir);
|
||||||
$zip = new ZipArchive;
|
if($archive=OC_Archive::open($path)){
|
||||||
if($zip->open($path)===true){
|
$archive->extract($extractDir);
|
||||||
$zip->extractTo($extractDir);
|
|
||||||
$zip->close();
|
|
||||||
} else {
|
} else {
|
||||||
OC_Log::write('core','Failed to open archive when installing app',OC_Log::ERROR);
|
OC_Log::write('core','Failed to open archive when installing app',OC_Log::ERROR);
|
||||||
OC_Helper::rmdirr($extractDir);
|
OC_Helper::rmdirr($extractDir);
|
||||||
|
@ -94,6 +104,17 @@ class OC_Installer{
|
||||||
}
|
}
|
||||||
|
|
||||||
//load the info.xml file of the app
|
//load the info.xml file of the app
|
||||||
|
if(!is_file($extractDir.'/appinfo/info.xml')){
|
||||||
|
//try to find it in a subdir
|
||||||
|
$dh=opendir($extractDir);
|
||||||
|
while($folder=readdir($dh)){
|
||||||
|
if(substr($folder,0,1)!='.' and is_dir($extractDir.'/'.$folder)){
|
||||||
|
if(is_file($extractDir.'/'.$folder.'/appinfo/info.xml')){
|
||||||
|
$extractDir.='/'.$folder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if(!is_file($extractDir.'/appinfo/info.xml')){
|
if(!is_file($extractDir.'/appinfo/info.xml')){
|
||||||
OC_Log::write('core','App does not provide an info.xml file',OC_Log::ERROR);
|
OC_Log::write('core','App does not provide an info.xml file',OC_Log::ERROR);
|
||||||
OC_Helper::rmdirr($extractDir);
|
OC_Helper::rmdirr($extractDir);
|
||||||
|
|
|
@ -38,6 +38,7 @@ foreach($apps as $app){
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTests($dir=''){
|
function loadTests($dir=''){
|
||||||
|
$test=isset($_GET['test'])?$_GET['test']:false;
|
||||||
if($dh=opendir($dir)){
|
if($dh=opendir($dir)){
|
||||||
while($name=readdir($dh)){
|
while($name=readdir($dh)){
|
||||||
if(substr($name,0,1)!='.'){//no hidden files, '.' or '..'
|
if(substr($name,0,1)!='.'){//no hidden files, '.' or '..'
|
||||||
|
@ -45,10 +46,13 @@ function loadTests($dir=''){
|
||||||
if(is_dir($file)){
|
if(is_dir($file)){
|
||||||
loadTests($file);
|
loadTests($file);
|
||||||
}elseif(substr($file,-4)=='.php' and $file!=__FILE__){
|
}elseif(substr($file,-4)=='.php' and $file!=__FILE__){
|
||||||
$testCase=new TestSuite(getTestName($file));
|
$name=getTestName($file);
|
||||||
$testCase->addFile($file);
|
if($test===false or $test==$name or substr($name,0,strlen($test))==$test){
|
||||||
if($testCase->getSize()>0){
|
$testCase=new TestSuite($name);
|
||||||
$testCase->run(new HtmlReporter());
|
$testCase->addFile($file);
|
||||||
|
if($testCase->getSize()>0){
|
||||||
|
$testCase->run(new HtmlReporter());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue