#!/usr/bin/php -q <?php /** * eGroupWare - importexport * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package importexport * @link http://www.egroupware.org * @author Cornelius Weiss <nelius@cwtech.de> * @version $Id$ */ $path_to_egroupware = realpath(dirname(__FILE__).'/..'); $usage = "usage: --definition <name of definition> Name of definition --file <name of file> File to import / for export --user <eGW username> eGroupWare username for action --password <password for user> users password --domain <domain name> eGroupWare domain --dry-run no real action, just console output \n"; if (php_sapi_name() != 'cli') { die('This script only runs form command line'); } // Include PEAR::Console_Getopt require_once 'Console/Getopt.php'; // Define exit codes for errors define('HEADER_NOT_FOUND',9); define('NO_ARGS',10); define('INVALID_OPTION',11); // Reading the incoming arguments - same as $argv $args = Console_Getopt::readPHPArgv(); // Make sure we got them (for non CLI binaries) if (PEAR::isError($args)) { fwrite(STDERR,"importexport_cli: ".$args->getMessage()."\n".$usage); exit(NO_ARGS); } // Short options $short_opts = 'f:d:'; // Long options $long_opts = array( 'definition=', 'file=', 'user=', 'password=', 'domain=', 'dry-run', ); // Convert the arguments to options - check for the first argument if ( realpath($_SERVER['argv'][0]) == __FILE__ ) { $options = Console_Getopt::getOpt($args,$short_opts,$long_opts); } else { $options = Console_Getopt::getOpt2($args,$short_opts,$long_opts); } // Check the options are valid if (PEAR::isError($options)) { fwrite(STDERR,"importexport_cli: ".$options->getMessage()."\n".$usage."\n"); exit(INVALID_OPTION); } $domain = 'default'; $dryrun = false; foreach ($options[0] as $option) { switch ($option[0]) { case '--file' : $file = $option[1]; break; case '--definition' : $definition = $option[1]; break; case '--domain' : $domain = $option[1]; break; case '--user' : $user = $option[1]; break; case '--password' : $password = $option[1]; break; case '--dry-run' : $dryrun = true; break; default : fwrite (STDERR,$usage."\n"); exit(INVALID_OPTION); } } // check file if ( !$user || !$password ) { fwrite(STDERR,'importexport_cli: You have to supply a username / password'."\n".$usage); exit(INVALID_OPTION); } // Can't change domain once header is loaded $_REQUEST['domain'] = $domain; $GLOBALS['egw_info']['flags'] = array( 'disable_Template_class' => True, 'noheader' => True, 'nonavbar' => True, 'currentapp' => 'importexport', 'autocreate_session_callback' => 'import_export_access', 'login' => $user . '@' . $domain, 'passwd' => $password, 'noapi' => True, ); if (!is_readable($path_to_egroupware.'/header.inc.php')) { fwrite(STDERR,"importexport.php: Could not find '$path_to_egroupware/header.inc.php', exiting !!!\n"); exit(HEADER_NOT_FOUND); } include($path_to_egroupware.'/header.inc.php'); unset($GLOBALS['egw_info']['flags']['noapi']); // check domain $db_type = $GLOBALS['egw_domain'][$domain]['db_type']; if (!isset($GLOBALS['egw_domain'][$domain]) || empty($db_type)) { fwrite(STDERR,"importexport_cli: ". $domain. ' is not a valid domain name'."\n"); exit(INVALID_OPTION); } $GLOBALS['egw_info']['server']['sessions_type'] = 'db'; // no php4-sessions availible for cgi include(EGW_API_INC.'/functions.inc.php'); // check file if (!is_readable($file)) { fwrite(STDERR,"importexport_cli: ". $file. ' is not readable'."\n"); exit(INVALID_OPTION); } $definition = new importexport_definition($definition); if( $definition->get_identifier() < 1 ) { fwrite(STDERR,"importexport_cli: Definition not found! \n"); exit(INVALID_OPTION); } $GLOBALS['egw_info']['flags']['currentapp'] = $definition->application; $definition->plugin_options['dry_run'] = $dryrun; $type = $definition->type; $po = new $definition->plugin; $resource = fopen( $file, 'r' ); $po->$type( $resource, $definition ); $GLOBALS['egw']->common->phpgw_exit(); function import_export_access(&$account) { $account['login'] = $GLOBALS['egw_info']['flags']['login']; $account['passwd'] = $GLOBALS['egw_info']['flags']['passwd']; $account['passwd_type'] = 'text'; return true; }