some more work on calendar import

remotes/origin/stable45
Georg Ehrke 13 years ago
parent 641e77327e
commit c036700c54
  1. 14
      apps/calendar/ajax/import/import.php
  2. 5
      apps/calendar/css/import.css
  3. 42
      apps/calendar/js/loader.js
  4. 41
      apps/calendar/lib/import.php
  5. 8
      apps/calendar/templates/part.import.php

@ -8,6 +8,10 @@
OCP\JSON::checkLoggedIn();
OCP\App::checkAppEnabled('calendar');
session_write_close();
if (isset($_POST['progresskey']) && isset($_POST['getprogress'])) {
echo OCP\JSON::success(array('percent'=>OC_Cache::get($_POST['progresskey'])));
exit;
}
$file = OC_Filesystem::file_get_contents($_POST['path'] . '/' . $_POST['file']);
if(!$file){
OCP\JSON::error(array('error'=>'404'));
@ -16,6 +20,7 @@ $import = new OC_Calendar_Import($file);
$import->setUserID(OCP\User::getUser());
$import->setTimeZone(OC_Calendar_App::$tz);
$import->enableProgressCache();
$import->setProgresskey($_POST['progresskey']);
if(!$import->isValid()){
OCP\JSON::error(array('error'=>'notvalid'));
exit;
@ -44,7 +49,12 @@ if($_POST['method'] == 'new'){
$id = $_POST['id'];
}
$import->setCalendarID($id);
$import->import();
try{
$import->import();
}catch (Exception $e) {
OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('Import failed'), 'debug'=>$e->getMessage()));
//write some log
}
$count = $import->getCount();
if($count == 0){
if($newcal){
@ -137,4 +147,4 @@ foreach($uids as $uid) {
writeProgress('100');
sleep(3);
OC_Cache::remove($progresskey);
OCP\JSON::success();
OCP\JSON::success();*/

@ -7,6 +7,5 @@
#calendar_import_newcalform, #calendar_import_mergewarning, #calendar_import_process, #calendar_import_done{display:none;}
#calendar_import_process_message, #calendar_import_status, #calendar_import_form_message, #calendar_import_mergewarning{text-align:center;}
#calendar_import_form_message{font-weight: bold;}
#calendar_import_newcalendar{width:480px;}
.calendar_import_warning{background-color: rgba(216,22,22,0.7);}
.calendar_import_revertwarning{background-color: #ffffff;}
#calendar_import_newcalendar{width:96%;}
.calendar_import_warning{border-color: #fc3333;}

@ -70,32 +70,46 @@ Calendar_Import={
});
},
update: function(){
/*$.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {progress:1,progresskey: progresskey}, function(percent){
$('#progressbar').progressbar('option', 'value', parseInt(percent));
if(percent < 100){
window.setTimeout('Calendar_Import.getimportstatus(\'' + progresskey + '\')', 500);
if(Calendar_Import.Store.percentage == 100){
return false;
}
$.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {progresskey: Calendar_Import.Store.progresskey, getprogress: true}, function(data){
if(data.status == 'success'){
if(data.percent == null){
return false;
}
Calendar_Import.Store.percentage = parseInt(data.percent);
$('#calendar_import_progressbar').progressbar('option', 'value', parseInt(data.percent));
if(data.percent < 100 ){
window.setTimeout('Calendar_Import.Dialog.update()', 250);
}else{
$('#calendar_import_done').css('display', 'block');
}
}else{
$('#import_done').css('display', 'block');
$('#calendar_import_progressbar').progressbar('option', 'value', 100);
$('#calendar_import_progressbar > div').css('background-color', '#FF2626');
$('#calendar_import_status').html(data.message);
}
});*/
return 0;
});
return 0;
},
warning: function(selector){
$(selector).css('background-color', '#FF2626');
$(selector).addClass('calendar_import_warning');
$(selector).focus(function(){
$(selector).css('background-color', '#F8F8F8');
$(selector).removeClass('calendar_import_warning');
});
}
},
Core:{
process: function(){
var validation = Calendar_Import.Core.prepare();
$('#calendar_import_form').css('display', 'none');
$('#calendar_import_process').css('display', 'block');
if(validation){
$('#calendar_import_form').css('display', 'none');
$('#calendar_import_process').css('display', 'block');
$('#calendar_import_newcalendar').attr('readonly', 'readonly');
$('#calendar_import_calendar').attr('disabled', 'disabled');
Calendar_Import.Core.send();
window.setTimeout('Calendar_Import.Dialog.update()', 250);
}
},
send: function(){
@ -103,17 +117,15 @@ Calendar_Import={
{progresskey: Calendar_Import.Store.progresskey, method: String (Calendar_Import.Store.method), calname: String (Calendar_Import.Store.calname), path: String (Calendar_Import.Store.path), file: String (Calendar_Import.Store.file), id: String (Calendar_Import.Store.id)}, function(data){
if(data.status == 'success'){
$('#calendar_import_progressbar').progressbar('option', 'value', 100);
Calendar_Import.Store.percentage = 100;
$('#calendar_import_done').css('display', 'block');
$('#calendar_import_status').html(data.message);
}else{
$('#calendar_import_progressbar').progressbar('option', 'value', 100);
$("#calendar_import_progressbar > div").css('background-color', '#FF2626');
$('#calendar_import_progressbar > div').css('background-color', '#FF2626');
$('#calendar_import_status').html(data.message);
}
});
$('#form_container').css('display', 'none');
$('#progressbar_container').css('display', 'block');
window.setTimeout('Calendar_Import.Dialog.update', 500);
},
prepare: function(){
Calendar_Import.Store.id = $('#calendar_import_calendar option:selected').val();

@ -9,6 +9,11 @@
* This class does import and converts all times to the users current timezone
*/
class OC_Calendar_Import{
/*
* @brief counts the absolute number of parsed elements
*/
private $abscount;
/*
* @brief var saves if the percentage should be saved with OC_Cache
*/
@ -44,6 +49,11 @@ class OC_Calendar_Import{
*/
private $progress;
/*
* @brief var saves the key for the percentage of the import's progress
*/
private $progresskey;
/*
* @brief var saves the timezone the events shell converted to
*/
@ -67,6 +77,7 @@ class OC_Calendar_Import{
public function __construct($ical){
$this->error = null;
$this->ical = $ical;
$this->abscount = 0;
$this->count = 0;
try{
$this->calobject = OC_VObject::parse($this->ical);
@ -86,6 +97,7 @@ class OC_Calendar_Import{
if(!$this->isValid()){
return false;
}
$numofcomponents = count($this->calobject->getComponents());
foreach($this->calobject->getComponents() as $object){
if(!($object instanceof Sabre_VObject_Component_VEvent) && !($object instanceof Sabre_VObject_Component_VJournal) && !($object instanceof Sabre_VObject_Component_VTodo)){
continue;
@ -96,12 +108,15 @@ class OC_Calendar_Import{
$object->DTEND->getDateTime()->setTimezone(new DateTimeZone($this->tz));
$vcalendar = $this->createVCalendar($object->serialize());
$insertid = OC_Calendar_Object::add($this->id, $vcalendar);
$this->abscount++;
if($this->isDuplicate($insertid)){
OC_Calendar_Object::delete($insertid);
}else{
$this->count++;
$this->count++;
}
$this->updateProgress(intval(($this->abscount / $numofcomponents)*100));
}
OC_Cache::remove($this->progresskey);
return true;
}
@ -114,6 +129,15 @@ class OC_Calendar_Import{
return true;
}
/*
* @brief sets the progresskey
* @return boolean
*/
public function setProgresskey($progresskey){
$this->progresskey = $progresskey;
return true;
}
/*
* @brief checks if something went wrong while initialization
* @return boolean
@ -259,12 +283,17 @@ class OC_Calendar_Import{
}
/*
* @brief
* @return
* @brief updates the progress var
* @param integer $percentage
* @return boolean
*/
//private function (){
//}
private function updateProgress($percentage){
$this->progress = $percentage;
if($this->cacheprogress){
OC_Cache::set($this->progresskey, $this->progress, 300);
}
return true;
}
/*
* public methods for (pre)rendering of X-... Attributes

@ -17,7 +17,7 @@ $calendar_options[] = array('id'=>'newcal', 'displayname'=>$l->t('create a new c
<input type="hidden" id="calendar_import_filename" value="<?php echo $_['filename'];?>">
<input type="hidden" id="calendar_import_path" value="<?php echo $_['path'];?>">
<input type="hidden" id="calendar_import_progresskey" value="<?php echo rand() ?>">
<span id="calendar_import_form_message"><?php echo $l->t('Please choose a calendar'); ?></span>
<div id="calendar_import_form_message"><?php echo $l->t('Please choose a calendar'); ?></div>
<select style="width:100%;" id="calendar_import_calendar" name="calendar_import_calendar">
<?php
for($i = 0;$i<count($calendar_options);$i++){
@ -27,15 +27,15 @@ $calendar_options[] = array('id'=>'newcal', 'displayname'=>$l->t('create a new c
?>
</select>
<div id="calendar_import_newcalform">
<input id="calendar_import_newcalendar" type="text" placeholder="<?php echo $l->t('Name of new calendar'); ?>" value="<?php echo $newcalendarname ?>"><br>
<input id="calendar_import_newcalendar" class="" type="text" placeholder="<?php echo $l->t('Name of new calendar'); ?>" value="<?php echo $newcalendarname ?>"><br>
<!--<input id="calendar_import_generatename" type="button" class="button" value="<?php echo $l->t('Take an available name!'); ?>"><br>-->
<span id="calendar_import_mergewarning" class="hint"><?php echo $l->t('A Calendar with this name already exists. If you continue anyhow, these calendars will be merged.'); ?></span>
<div id="calendar_import_mergewarning" class="hint"><?php echo $l->t('A Calendar with this name already exists. If you continue anyhow, these calendars will be merged.'); ?></div>
</div>
<input id="calendar_import_submit" type="button" class="button" value="&raquo; <?php echo $l->t('Import'); ?> &raquo;" id="startimport">
<form>
</div>
<div id="calendar_import_process">
<span id="calendar_import_process_message"></span>
<div id="calendar_import_process_message"></div>
<div id="calendar_import_progressbar"></div>
<br>
<div id="calendar_import_status" class="hint"></div>

Loading…
Cancel
Save