Add category override for addressbook vcard & infolog ical import

This commit is contained in:
nathangray 2019-04-23 16:17:12 -06:00
parent e93f212d4f
commit befac35e0b
7 changed files with 148 additions and 3 deletions

View File

@ -181,6 +181,14 @@ class addressbook_import_vcard implements importexport_iface_import_plugin {
$record['owner'] = $this->user; $record['owner'] = $this->user;
} }
// Check & apply value overrides
foreach((array)$this->definition->plugin_options['override_values'] as $field => $settings)
{
if($settings['value'])
{
$record[$field] = $settings['value'];
}
}
if (is_array($record['cat_id'])) if (is_array($record['cat_id']))
{ {
$record['cat_id'] = implode(',',$this->bocontacts->find_or_add_categories($record['cat_id'], -1)); $record['cat_id'] = implode(',',$this->bocontacts->find_or_add_categories($record['cat_id'], -1));

View File

@ -93,7 +93,7 @@ class addressbook_wizard_import_vcard extends addressbook_import_vcard
// init step60 // init step60
else else
{ {
$content['msg'] = $this->steps['wizard_step60']; $content['title'] = $this->steps['wizard_step60'];
$content['step'] = 'wizard_step60'; $content['step'] = 'wizard_step60';
if(!array_key_exists($content['contact_owner']) && $content['plugin_options']) { if(!array_key_exists($content['contact_owner']) && $content['plugin_options']) {
$content['contact_owner'] = $content['plugin_options']['contact_owner']; $content['contact_owner'] = $content['plugin_options']['contact_owner'];
@ -105,6 +105,13 @@ class addressbook_wizard_import_vcard extends addressbook_import_vcard
$bocontacts = new Api\Contacts(); $bocontacts = new Api\Contacts();
$sel_options['contact_owner'] = array('personal' => lang("Importer's personal")) + $bocontacts->get_addressbooks(Acl::ADD); $sel_options['contact_owner'] = array('personal' => lang("Importer's personal")) + $bocontacts->get_addressbooks(Acl::ADD);
foreach(array('override_values') as $field)
{
if(!$content[$field] && array_key_exists($field, $content['plugin_options']))
{
$content[$field] = $content['plugin_options'][$field];
}
}
$preserv = $content; $preserv = $content;
unset ($preserv['button']); unset ($preserv['button']);
return 'addressbook.importexport_wizard_vcard_chooseowner'; return 'addressbook.importexport_wizard_vcard_chooseowner';

View File

@ -9,7 +9,7 @@
</columns> </columns>
<rows> <rows>
<row> <row>
<description id="msg" no_lang="1"/> <description id="title" no_lang="1"/>
</row> </row>
<row> <row>
<menulist> <menulist>
@ -17,7 +17,7 @@
</menulist> </menulist>
</row> </row>
<row> <row>
<description/> <select-cat id="override_values[cat_id][value]" label="Category" empty_label="From file" options=",,,@application"/>
</row> </row>
</rows> </rows>
</grid> </grid>

View File

@ -87,6 +87,16 @@ class infolog_ical extends infolog_bo
*/ */
var $clientProperties; var $clientProperties;
/**
* Entry callback
* If set, this will be called on each discovered etry so it can be
* modified. Entry is passed by reference, return true to keep the event
* or false to skip it.
*
* @var callable
*/
var $entry_callback = null;
/** /**
* Set Logging * Set Logging
* *
@ -532,6 +542,14 @@ class infolog_ical extends infolog_bo
date_default_timezone_set($GLOBALS['egw_info']['server']['server_timezone']); date_default_timezone_set($GLOBALS['egw_info']['server']['server_timezone']);
} }
if($this->entry_callback && is_callable($this->entry_callback))
{
if(!call_user_func_array($this->entry_callback, array(&$taskData)))
{
// Callback cancelled entry
return false;
}
}
if (!$taskData) return false; if (!$taskData) return false;
// keep the dates // keep the dates

View File

@ -94,6 +94,7 @@ class infolog_import_ical implements importexport_iface_import_plugin {
@set_time_limit(0); // try switching execution time limit off @set_time_limit(0); // try switching execution time limit off
$infolog_ical = new infolog_ical(); $infolog_ical = new infolog_ical();
$infolog_ical->entry_callback = array($this, 'entry_callback');
if (!$infolog_ical->importVTODO(stream_get_contents($_stream))) if (!$infolog_ical->importVTODO(stream_get_contents($_stream)))
{ {
$this->errors[] = lang('Error: importing the iCal'); $this->errors[] = lang('Error: importing the iCal');
@ -107,6 +108,21 @@ class infolog_import_ical implements importexport_iface_import_plugin {
return $success; return $success;
} }
/**
* Do some modification on each entry
*/
public function entry_callback(&$event)
{
// Check & apply value overrides
foreach((array)$this->definition->plugin_options['override_values'] as $field => $settings)
{
if($settings['value'])
{
$event[$field] = $settings['value'];
}
}
return true;
}
/** /**
* returns translated name of plugin * returns translated name of plugin

View File

@ -0,0 +1,79 @@
<?php
/**
* EGroupware - Wizard for user CSV import
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package calendar
* @subpackage importexport
* @link http://www.egroupware.org
* @author Nathan Gray
* @version $Id$
*/
use EGroupware\Api;
class infolog_wizard_import_ical
{
/**
* List of steps. Key is the function, value is the translated title.
*/
public $steps;
/**
* List of eTemplates to use for each step. You can override this with your own etemplates steps.
*/
protected $step_templates = array(
'wizard_step55' => 'infolog.import.ical_conditions',
);
/**
* constructor
*/
function __construct()
{
Api\Framework::includeJS('.','et2_widget_owner','calendar');
Api\Framework::includeCSS('calendar','calendar');
$this->steps = array(
'wizard_step55' => lang('Edit conditions'),
);
}
// Conditions
function wizard_step55(&$content, &$sel_options, &$readonlys, &$preserv)
{
// return from step55
if ($content['step'] == 'wizard_step55')
{
switch (array_search('pressed', $content['button']))
{
case 'next':
return $GLOBALS['egw']->importexport_definitions_ui->get_step($content['step'],1);
case 'previous' :
return $GLOBALS['egw']->importexport_definitions_ui->get_step($content['step'],-1);
case 'finish':
return 'wizard_finish';
default :
return $this->wizard_step55($content,$sel_options,$readonlys,$preserv);
}
}
// init step30
else
{
$content['text'] = $this->steps['wizard_step55'];
$content['step'] = 'wizard_step55';
foreach(array('override_values') as $field)
{
if(!$content[$field] && array_key_exists($field, $content['plugin_options']))
{
$content[$field] = $content['plugin_options'][$field];
}
}
$preserv = $content;
unset ($preserv['button']);
// No real conditions, but we share a template
$content['no_conditions'] = true;
return $this->step_templates[$content['step']];
}
}
}

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE overlay PUBLIC "-//EGroupware GmbH//eTemplate 2//EN" "http://www.egroupware.org/etemplate2.dtd">
<!-- $Id$ -->
<overlay>
<template id="infolog.import.ical_conditions" template="" lang="" group="0" version="16.1">
<vbox>
<template id="importexport.wizard_basic_import_csv.conditions" disabled="@no_conditions"/>
<select-cat id="override_values[cat_id][value]" label="Category" empty_label="From file" options=",,,@application"/>
</vbox>
<styles>
#importexport-wizardbox_delete_title {
margin-top: 1em;
}
</styles>
</template>
</overlay>