Author: nathangray
New Revision: 32394
URL: http://www.egroupware.org/viewvc/egroupware?rev=32394&view=rev
Log:
Basic support for importing groups from CSV
Added:
trunk/admin/inc/class.admin_import_groups_csv.inc.php
trunk/admin/inc/class.admin_wizard_import_groups_csv.inc.php
Modified:
trunk/admin/inc/class.admin_wizard_import_users_csv.inc.php
Added: trunk/admin/inc/class.admin_import_groups_csv.inc.php
URL: http://www.egroupware.org/viewvc/egroupware/trunk/admin/inc/class.admin_import_groups_csv.inc.php?rev=32394&view=auto
— trunk/admin/inc/class.admin_import_groups_csv.inc.php (added)
+++ trunk/admin/inc/class.admin_import_groups_csv.inc.php Wed Sep 29 19:31:36 2010
@@ -1,0 +1,261 @@
+<?php
+/**
-
- eGroupWare
-
-
- @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
-
- @package admin
-
- @author Nathan Gray
-
- @copyright Nathan Gray
-
- @version $Id: $
- */
+/**
-
- class import_csv for admin (groups)
- */
+class admin_import_groups_csv implements importexport_iface_import_plugin { - private static $plugin_options = array(
-
'fieldsep', // char -
'charset', // string -
'num_header_lines', // int number of header lines -
'field_conversion', // array( $csv_col_num => conversion) -
'field_mapping', // array( $csv_col_num => adb_filed) -
'conditions', /* => array containing condition arrays: -
'type' => exists, // exists -
'string' => '#kundennummer', -
'true' => array( -
'action' => update, -
'last' => true, -
), -
'false' => array( -
'action' => insert, -
'last' => true, -
),*/ - );
- /**
-
- actions which could be done to data entries
- */
- protected static $actions = array( ‘none’, ‘update’, ‘create’, ‘delete’);
- /**
-
- conditions for actions
-
-
- @var array
- */
- protected static $conditions = array( ‘exists’ );
- /**
-
- @var definition
- */
- private $definition;
- /**
-
- @var bool
- */
- private $dry_run = false;
- /**
-
- List of import errors
- */
- protected $errors = array();
- /**
-
* List of actions, and how many times that action was taken -
*/ -
protected $results = array(); - /**
-
- imports entries according to given definition object.
-
- @param resource $_stream
-
- @param string $_charset
-
- @param definition $_definition
- */
- public function import( $_stream, importexport_definition $_definition ) {
-
$import_csv = new importexport_import_csv( $_stream, array( -
'fieldsep' => $_definition->plugin_options['fieldsep'], -
'charset' => $_definition->plugin_options['charset'], -
)); -
$this->definition = $_definition; -
// dry run? -
$this->dry_run = isset( $_definition->plugin_options['dry_run'] ) ? $_definition->plugin_options['dry_run'] : false; -
// set FieldMapping. -
$import_csv->mapping = $_definition->plugin_options['field_mapping']; -
// set FieldConversion -
$import_csv->conversion = $_definition->plugin_options['field_conversion']; -
//check if file has a header lines -
if ( isset( $_definition->plugin_options['num_header_lines'] ) && $_definition->plugin_options['num_header_lines'] > 0) { -
$import_csv->skip_records($_definition->plugin_options['num_header_lines']); -
} elseif(isset($_definition->plugin_options['has_header_line']) && $_definition->plugin_options['has_header_line']) { -
// First method is preferred -
$import_csv->skip_records(1); -
} -
// Start counting successes -
$count = 0; -
$this->results = array(); -
// Failures -
$this->errors = array(); -
while ( $record = $import_csv->get_record() ) { -
$success = false; -
// don't import empty records -
if( count( array_unique( $record ) ) < 2 ) continue; -
if ( $_definition->plugin_options['conditions'] ) { -
foreach ( $_definition->plugin_options['conditions'] as $condition ) { -
switch ( $condition['type'] ) { -
// exists -
case 'exists' : -
$accounts = $GLOBALS['egw']->accounts->search(array( -
'type' => 'groups', -
'query' => $record[$condition['string']], -
'query_type' => $condition['string'] -
)); -
if ( is_array( $accounts ) && count( $accounts ) >= 1 ) { -
// apply action to all contacts matching this exists condition -
$action = $condition['true']; -
foreach ( (array)$accounts as $account ) { -
$record['account_id'] = $account['account_id']; -
$success = $this->action( $action['action'], $record, $import_csv->get_current_position() ); -
} -
} else { -
$action = $condition['false']; -
$success = ($this->action( $action['action'], $record, $import_csv->get_current_position() )); -
} -
break; -
// not supported action -
default : -
die('condition / action not supported!!!'); -
break; -
} -
if ($action['last']) break; -
} -
} else { -
// unconditional insert -
$success = $this->action( 'insert', $record, $import_csv->get_current_position() ); -
} -
if($success) $count++; -
} -
return $count; - }
- /**
-
- perform the required action
-
-
- @param int $_action one of $this->actions
-
- @param array $_data contact data for the action
-
- @return bool success or not
- */
- private function action ( $_action, $_data, $record_num = 0 ) {
-
switch ($_action) { -
case 'none' : -
return true; -
case 'update' : -
case 'create' : -
$command = new admin_cmd_edit_group($data['account_lid'], $_data); -
if($this->dry_run) { -
$this->results[$_action]++; -
return true; -
} -
try { -
$command->run(); -
} catch (Exception $e) { -
$this->errors[$record_num] = $e->getMessage(); -
return false; -
} -
$this->results[$_action]++; -
return true; -
default: -
throw new egw_exception('Unsupported action'); -
} - }
- /**
-
- returns translated name of plugin
-
-
- @return string name
- */
- public static function get_name() {
-
return lang('Group CSV import'); - }
- /**
-
- returns translated (user) description of plugin
-
-
- @return string descriprion
- */
- public static function get_description() {
-
return lang("Creates / updates user groups from CSV file"); - }
- /**
-
- retruns file suffix(s) plugin can handle (e.g. csv)
-
-
- @return string suffix (comma seperated)
- */
- public static function get_filesuffix() {
-
return 'csv'; - }
- /**
-
- return etemplate components for options.
-
- @abstract We can’t deal with etemplate objects here, as an uietemplate
-
- objects itself are scipt orientated and not “dialog objects”
-
-
- @return array (
-
-
name => string,
-
-
-
content => array,
-
-
-
sel_options => array,
-
-
-
preserv => array,
-
-
- )
- */
- public function get_options_etpl() {
-
// lets do it! - }
- /**
-
- returns etemplate name for slectors of this plugin
-
-
- @return string etemplate name
- */
- public function get_selectors_etpl() {
-
// lets do it! - }
- /**
-
* Returns errors that were encountered during importing -
* Maximum of one error message per record, but you can append if you need to -
* -
* @return Array ( -
* record_# => error message -
* ) -
*/ -
public function get_errors() { -
return $this->errors; - }
- /**
-
* Returns a list of actions taken, and the number of records for that action. -
* Actions are things like 'insert', 'update', 'delete', and may be different for each plugin. -
* -
* @return Array ( -
* action => record count -
* ) -
*/ -
public function get_results() { -
return $this->results; -
}
+} // end of iface_export_plugin
+?>
Added: trunk/admin/inc/class.admin_wizard_import_groups_csv.inc.php
URL: http://www.egroupware.org/viewvc/egroupware/trunk/admin/inc/class.admin_wizard_import_groups_csv.inc.php?rev=32394&view=auto
— trunk/admin/inc/class.admin_wizard_import_groups_csv.inc.php (added)
+++ trunk/admin/inc/class.admin_wizard_import_groups_csv.inc.php Wed Sep 29 19:31:36 2010
@@ -1,0 +1,53 @@
+<?php
+/**
-
- eGroupWare - Wizard for group CSV import
-
-
- @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
-
- @package addressbook
-
- @author Nathan Gray
-
- @version $Id: $
- */
+class admin_wizard_import_groups_csv extends importexport_wizard_basic_import_csv
+{
+
- /**
-
- constructor
- */
- function __construct()
- {
-
parent::__construct(); -
$this->steps += array( -
'wizard_step50' => lang('Manage mapping'), -
); -
// Field mapping -
$this->mapping_fields = array( -
'account_lid' => lang('Account ID'), -
'account_name' => lang('Group Name'), -
'account_members' => lang('Members'), -
); -
// Actions -
$this->actions = array( -
'none' => lang('none'), -
'update' => lang('update'), -
'create' => lang('create'), -
'delete' => lang('delete'), -
); -
// Conditions -
$this->conditions = array( -
'exists' => lang('exists'), -
); - }
- function wizard_step50(&$content, &$sel_options, &$readonlys, &$preserv)
- {
-
$result = parent::wizard_step50($content, $sel_options, $readonlys, $preserv); -
return $result; - }
+}
Modified: trunk/admin/inc/class.admin_wizard_import_users_csv.inc.php
URL: http://www.egroupware.org/viewvc/egroupware/trunk/admin/inc/class.admin_wizard_import_users_csv.inc.php?rev=32394&r1=32393&r2=32394&view=diff
— trunk/admin/inc/class.admin_wizard_import_users_csv.inc.php (original)
+++ trunk/admin/inc/class.admin_wizard_import_users_csv.inc.php Wed Sep 29 19:31:36 2010
@@ -1,6 +1,6 @@