Example #1
0
 /**
  * the singleton pattern
  *
  * @return Tinebase_ImportExportDefinition
  */
 public static function getInstance()
 {
     if (self::$_instance === NULL) {
         self::$_instance = new Tinebase_ImportExportDefinition();
     }
     return self::$_instance;
 }
Example #2
0
 /**
  * get export object for given filter and format
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string|array $_options format (as string) or export definition id (array)
  * @param Tinebase_Controller_Record_Interface $_controller (optional)
  * @param array $_additionalOptions (optional)
  * @return Tinebase_Export_Abstract
  * @throws Tinebase_Exception_NotFound
  */
 public static function factory($_filter, $_options, $_controller = NULL, $_additionalOptions = array())
 {
     if (!is_array($_options)) {
         $_options = array('format' => $_options);
     }
     if (array_key_exists('definitionId', $_options)) {
         $definition = Tinebase_ImportExportDefinition::getInstance()->get($_options['definitionId']);
         $exportClass = $definition->plugin;
         // export plugin needs the definition id
         $_additionalOptions = array_merge($_additionalOptions, $_options);
     } else {
         if (array_key_exists('format', $_options) && !empty($_options['format'])) {
             $appName = $_filter->getApplicationName();
             $model = $_filter->getModelName();
             $exportClass = $appName . '_Export_' . ucfirst(strtolower($_options['format']));
             if (!@class_exists($exportClass)) {
                 // check for model specific export class
                 list($a, $b, $modelPart) = explode('_', $model);
                 $exportClass = $exportClass . '_' . $modelPart;
                 if (!@class_exists($exportClass)) {
                     throw new Tinebase_Exception_NotFound('No ' . $_options['format'] . ' export class found for ' . $appName . ' / ' . $model);
                 }
             }
         } else {
             throw new Tinebase_Exception_InvalidArgument('Export definition ID or format required in options');
         }
     }
     if (preg_match('/pdf/i', $exportClass)) {
         // legacy
         $result = new $exportClass($_additionalOptions);
     } else {
         $result = new $exportClass($_filter, $_controller, $_additionalOptions);
     }
     return $result;
 }
 /**
  * update to 6.1
  * - remove fritzbox export
  * 
  * @see 0006948: Export a contact as adb_fritzbox
  */
 public function update_0()
 {
     try {
         $fritzex = Tinebase_ImportExportDefinition::getInstance()->getByName('adb_fritzbox');
         Tinebase_ImportExportDefinition::getInstance()->delete($fritzex->getId());
     } catch (Tinebase_Exception_NotFound $tenf) {
         // does not exist
     }
     $this->setApplicationVersion('Addressbook', '6.1');
 }
Example #4
0
 /**
  * convert plugin_options to array
  * 
  * @param Tinebase_Model_ImportExportDefinition $_definition
  */
 protected function _convertOptions(Tinebase_Model_ImportExportDefinition $_definition)
 {
     $options = empty($_definition->plugin_options) ? array() : Tinebase_ImportExportDefinition::getOptionsAsZendConfigXml($_definition)->toArray();
     if (isset($options['autotags'])) {
         $options['autotags'] = $this->_handleAutotags($options['autotags']);
     }
     if (isset($options['container_id'])) {
         $options['container_id'] = Tinebase_Container::getInstance()->getContainerById($options['container_id'])->toArray();
     }
     $_definition->plugin_options = $options;
 }
Example #5
0
 /**
  * try to export Timesheets (as ods) with definition id
  */
 public function testExportTimesheetsOdsWithDefId()
 {
     $definitions = Tinebase_ImportExportDefinition::getInstance()->getExportDefinitionsForApplication(Tinebase_Application::getInstance()->getApplicationByName('Timetracker'));
     $defId = '';
     foreach ($definitions as $definition) {
         if ($definition->plugin == 'Timetracker_Export_Ods_Timesheet') {
             $defId = $definition->getId();
         }
     }
     $this->_exportTsOds($defId);
 }
 public function testExportLetter()
 {
     // make sure definition is imported
     $definitionFile = __DIR__ . '/../../../../tine20/Addressbook/Export/definitions/adb_default_doc.xml';
     $app = Tinebase_Application::getInstance()->getApplicationByName('Addressbook');
     Tinebase_ImportExportDefinition::getInstance()->updateOrCreateFromFilename($definitionFile, $app);
     $filter = new Addressbook_Model_ContactFilter(array(array('field' => 'n_given', 'operator' => 'equals', 'value' => 'James')));
     $doc = new Addressbook_Export_Doc($filter);
     $doc->generate();
     $tempfile = tempnam(Tinebase_Core::getTempDir(), __METHOD__ . '_') . '.docx';
     $doc->save($tempfile);
     $this->assertGreaterThan(0, filesize($tempfile));
 }
Example #7
0
 /**
  * test import data
  */
 public function testImport()
 {
     $definition = Tinebase_ImportExportDefinition::getInstance()->getByName('adb_import_vcard');
     $this->_instance = Addressbook_Import_VCard::createFromDefinition($definition, array('dryrun' => TRUE));
     $result = $this->_instance->importFile($this->_filename);
     //print_r($result['results']->getFirstRecord()->toArray());
     $this->assertEquals(2, $result['totalcount'], 'Didn\'t import anything.');
     $this->assertEquals('spass, alex', $result['results']->getFirstRecord()->n_fileas, 'file as not found');
     $this->assertEquals('+49732121258035', $result['results']->getFirstRecord()->tel_home, 'n_fileas not found');
     $this->assertEquals('mitbewohner', $result['results']->getFirstRecord()->note, 'note not found');
     $this->assertEquals('Eisenhüttenstraße 723', $result['results']->getFirstRecord()->adr_one_street, 'street not found');
     $this->assertEquals('http://www.vcard.de', $result['results']->getFirstRecord()->url, 'url not found');
 }
 /**
  * get default definition
  *
  * @param Tinebase_Record_RecordSet $_importDefinitions
  * @return Tinebase_Model_ImportExportDefinition
  *
  * @todo generalize this
  */
 protected function _getDefaultImportDefinition($_importDefinitions)
 {
     try {
         $defaultDefinition = Tinebase_ImportExportDefinition::getInstance()->getByName('inv_tine_import_csv');
     } catch (Tinebase_Exception_NotFound $tenf) {
         if (count($_importDefinitions) > 0) {
             $defaultDefinition = $_importDefinitions->getFirstRecord();
         } else {
             $defaultDefinition = NULL;
         }
     }
     return $defaultDefinition;
 }
 /**
  * get export object for given filter and format
  * 
  * @param Tinebase_Model_Filter_FilterGroup $_filter
  * @param string|array $_options format (as string) or export definition id (array)
  * @param Tinebase_Controller_Record_Interface $_controller (optional)
  * @param array $_additionalOptions (optional)
  * @return Tinebase_Export_Abstract
  * @throws Tinebase_Exception_NotFound
  */
 public static function factory($_filter, $_options, $_controller = NULL, $_additionalOptions = array())
 {
     if (!is_array($_options)) {
         $_options = array('format' => $_options);
     }
     // always merge options? this needs to be refactored!
     $_additionalOptions = array_merge($_additionalOptions, $_options);
     if (isset($_options['definitionId']) || array_key_exists('definitionId', $_options)) {
         $definition = Tinebase_ImportExportDefinition::getInstance()->get($_options['definitionId']);
         $exportClass = $definition->plugin;
     } else {
         if ((isset($_options['format']) || array_key_exists('format', $_options)) && !empty($_options['format'])) {
             $appName = $_filter->getApplicationName();
             $model = $_filter->getModelName();
             $exportClass = $appName . '_Export_' . ucfirst(strtolower($_options['format']));
             // start output buffering to catch errors, append them to log and exception
             ob_start();
             if (!class_exists($exportClass)) {
                 $ob = ob_get_length() > 0 ? ob_get_clean() : '';
                 // check for model specific export class
                 list($a, $b, $modelPart) = explode('_', $model);
                 $exportClass2 = $exportClass . '_' . $modelPart;
                 if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
                     Tinebase_Core::getLogger()->log(__METHOD__ . '::' . __LINE__ . ' Could not find class ' . $exportClass . ' trying ' . $exportClass2 . '. Output Buffer: ' . PHP_EOL . $ob, Zend_Log::NOTICE);
                 }
                 if (!class_exists($exportClass2)) {
                     $ob = ob_get_length() > 0 ? ob_get_clean() : NULL;
                     ob_end_flush();
                     throw new Tinebase_Exception_NotFound('No ' . $_options['format'] . ' export class found for ' . $appName . ' / ' . $model . '. ClassName: ' . $exportClass2 . ($ob ? 'Output: ' . $ob : ''));
                 } else {
                     $exportClass = $exportClass2;
                 }
             }
             ob_end_flush();
         } else {
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Export options: ' . print_r($_options, TRUE));
             }
             throw new Tinebase_Exception_InvalidArgument('Export definition ID or format required in options');
         }
     }
     if (preg_match('/pdf/i', $exportClass)) {
         // legacy
         $result = new $exportClass($_additionalOptions);
     } else {
         $result = new $exportClass($_filter, $_controller, $_additionalOptions);
     }
     return $result;
 }
 /**
  * import helper
  *
  * @param array $_options
  * @param string|Tinebase_Model_ImportExportDefinition $_definition
  * @param Tinebase_Model_Filter_FilterGroup $_exportFilter
  * @throws Tinebase_Exception_NotFound
  * @return array
  */
 protected function _doImport(array $_options, $_definition, Tinebase_Model_Filter_FilterGroup $_exportFilter = NULL)
 {
     if (!$this->_importerClassName || !$this->_modelName) {
         throw new Tinebase_Exception_NotFound('No import class or model name given');
     }
     $definition = $_definition instanceof Tinebase_Model_ImportExportDefinition ? $_definition : Tinebase_ImportExportDefinition::getInstance()->getByName($_definition);
     $this->_instance = call_user_func_array($this->_importerClassName . '::createFromDefinition', array($definition, $_options));
     // export first
     if ($_exportFilter !== NULL && $this->_exporterClassName) {
         $exporter = new $this->_exporterClassName($_exportFilter, Tinebase_Core::getApplicationInstance($this->_modelName));
         $this->_filename = $exporter->generate();
     }
     // then import
     $result = $this->_instance->importFile($this->_filename);
     return $result;
 }
 public function testExportSimpleDocSheet()
 {
     // skip tests for php7
     // ERROR: PHP Fatal error:  Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special
     //  class name in /usr/local/share/tine20.git/tine20/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php
     //  on line 23
     if (PHP_VERSION_ID >= 70000) {
         $this->markTestSkipped('FIXME 0011730: fix doc export for php7');
     }
     // make sure definition is imported
     $definitionFile = __DIR__ . '/../../../../tine20/Calendar/Export/definitions/cal_default_doc_sheet.xml';
     $calendarApp = Tinebase_Application::getInstance()->getApplicationByName('Calendar');
     Tinebase_ImportExportDefinition::getInstance()->updateOrCreateFromFilename($definitionFile, $calendarApp, 'cal_default_doc_sheet');
     //        Tinebase_TransactionManager::getInstance()->commitTransaction($this->_transactionId);
     // @TODO have some demodata to export here
     $filter = new Calendar_Model_EventFilter(array());
     $doc = new Calendar_Export_DocSheet($filter);
     $doc->generate();
     $tempfile = tempnam(Tinebase_Core::getTempDir(), __METHOD__ . '_') . '.docx';
     $doc->save($tempfile);
     $this->assertGreaterThan(0, filesize($tempfile));
     //        `open $tempfile`;
 }
 /**
  * returns import definition from file
  * 
  * @param string $filename
  * @return Tinebase_Model_ImportExportDefinition
  */
 protected function _getDefinitionFromFile($filename, $path = null)
 {
     $filename = ($path ? $path : dirname(__FILE__) . '/files/') . $filename;
     $applicationId = Tinebase_Application::getInstance()->getApplicationByName('Addressbook')->getId();
     $definition = Tinebase_ImportExportDefinition::getInstance()->getFromFile($filename, $applicationId);
     return $definition;
 }
 /**
  * returns config from definition
  * 
  * @param Tinebase_Model_ImportExportDefinition $_definition
  * @param array                                 $_options
  * @return array
  */
 public static function getOptionsArrayFromDefinition($_definition, $_options)
 {
     $options = Tinebase_ImportExportDefinition::getOptionsAsZendConfigXml($_definition, $_options);
     $optionsArray = $options->toArray();
     if (!isset($optionsArray['model'])) {
         $optionsArray['model'] = $_definition->model;
     }
     return $optionsArray;
 }
 /**
  * get default definition
  *
  * @param Tinebase_Record_RecordSet $_importDefinitions
  * @return Tinebase_Model_ImportExportDefinition
  */
 protected function _getDefaultImportDefinition($_importDefinitions)
 {
     try {
         $defaultName = $this->_defaultImportDefinitionName ? $this->_defaultImportDefinitionName : strtolower($this->_applicationName . '_tine_import_csv');
         $defaultDefinition = Tinebase_ImportExportDefinition::getInstance()->getByName($defaultName);
     } catch (Tinebase_Exception_NotFound $tenf) {
         if (count($_importDefinitions) > 0) {
             $defaultDefinition = $_importDefinitions->getFirstRecord();
         } else {
             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' No import definitions found for ' . $this->_applicationName);
             $defaultDefinition = NULL;
         }
     }
     return $defaultDefinition;
 }
 /**
  * repair a table
  * 
  * @param Zend_Console_Getopt $opts
  * 
  * @todo add more tables
  */
 public function repairTable($opts)
 {
     if (!$this->_checkAdminRight()) {
         return FALSE;
     }
     $this->_addOutputLogWriter();
     $data = $this->_parseArgs($opts, array('table'));
     switch ($data['table']) {
         case 'importexport_definition':
             Tinebase_ImportExportDefinition::getInstance()->repairTable();
             $result = 0;
             break;
         default:
             if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) {
                 Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' No repair script found for ' . $data['table']);
             }
             $result = 1;
     }
     exit($result);
 }
 /**
  * returns course import definition
  * 
  * @param string $encoding
  * @return Tinebase_Model_ImportExportDefinition
  */
 protected function _getCourseImportDefinition3($encoding = 'UTF-8')
 {
     try {
         $definition = Tinebase_ImportExportDefinition::getInstance()->getByName('course_user_import_csv');
     } catch (Tinebase_Exception_NotFound $e) {
         $definition = Tinebase_ImportExportDefinition::getInstance()->create(new Tinebase_Model_ImportExportDefinition(array('application_id' => Tinebase_Application::getInstance()->getApplicationByName('Admin')->getId(), 'name' => 'course_user_import_csv', 'type' => 'import', 'model' => 'Tinebase_Model_FullUser', 'plugin' => 'Admin_Import_User_Csv', 'plugin_options' => '<?xml version="1.0" encoding="UTF-8"?>
         <config>
             <headline>1</headline>
             <use_headline>0</use_headline>
             <dryrun>0</dryrun>
             <encoding>' . $encoding . '</encoding>
             <delimiter>;</delimiter>
             <mapping>
                 <field>
                     <source>Name</source>
                     <destination>accountLastName</destination>
                 </field>
                 <field>
                     <source>Vorname</source>
                     <destination>accountFirstName</destination>
                 </field>
             </mapping>
         </config>')));
     }
     return $definition;
 }
 /**
  * import course members
  *
  * @param string $tempFileId
  * @param string $courseId
  * @return array
  */
 public function importMembers($tempFileId, $courseId)
 {
     $this->checkRight(Courses_Acl_Rights::ADD_NEW_USER);
     $tempFile = Tinebase_TempFile::getInstance()->getTempFile($tempFileId);
     // get definition and start import with admin user import csv plugin
     $definitionName = $this->_config->get(Courses_Config::STUDENTS_IMPORT_DEFINITION, 'admin_user_import_csv');
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Using import definition: ' . $definitionName);
     }
     $definition = Tinebase_ImportExportDefinition::getInstance()->getByName($definitionName);
     $course = $this->get($courseId);
     // check if group exists, too
     $group = $this->_groupController->get($course->group_id);
     $importer = Admin_Import_User_Csv::createFromDefinition($definition, $this->_getNewUserConfig($course));
     $result = $importer->importFile($tempFile->path);
     $groupMembers = $this->_groupController->getGroupMembers($course->group_id);
     $this->_manageAccessGroups($groupMembers, $course);
     $this->_addToStudentGroup($groupMembers);
     $this->_addToUserDefaultGroup($groupMembers);
     return $result;
 }
 /**
  * get special options
  *
  * @param string $_value
  * @return array
  */
 protected function _getSpecialOptions($_value)
 {
     $translate = Tinebase_Translation::getTranslation($this->_application);
     $result = array();
     switch ($_value) {
         case self::TSODSEXPORTCONFIG:
             // get names from import export definitions
             $filter = new Tinebase_Model_ImportExportDefinitionFilter(array(array('field' => 'plugin', 'operator' => 'equals', 'value' => 'Timetracker_Export_Ods_Timesheet')));
             $configs = Tinebase_ImportExportDefinition::getInstance()->search($filter);
             if (!empty($configs)) {
                 foreach ($configs as $tsConfig) {
                     $result[] = array($tsConfig->name, $tsConfig->name);
                 }
             } else {
                 $result[] = array('default', $translate->_('default'));
             }
             break;
         case self::QUICKTAG:
             // Get all shared tags
             $tagController = Tinebase_Tags::getInstance();
             $filter = new Tinebase_Model_TagFilter(array('type' => Tinebase_Model_Tag::TYPE_SHARED));
             $tags = $tagController->searchTags($filter);
             $availableTags = array();
             /* @var $tag Tinebase_Model_Tag */
             foreach ($tags as $tag) {
                 $availableTags[] = array($tag->id, $tag->name);
             }
             return $availableTags;
             break;
         default:
             $result = parent::_getSpecialOptions($_value);
     }
     return $result;
 }
 /**
  * get special options
  *
  * @param string $_value
  * @return array
  */
 protected function _getSpecialOptions($_value)
 {
     $translate = Tinebase_Translation::getTranslation($this->_application);
     $result = array();
     switch ($_value) {
         case self::TSODSEXPORTCONFIG:
             // get names from import export definitions
             $filter = new Tinebase_Model_ImportExportDefinitionFilter(array(array('field' => 'plugin', 'operator' => 'equals', 'value' => 'Timetracker_Export_Ods_Timesheet')));
             $configs = Tinebase_ImportExportDefinition::getInstance()->search($filter);
             if (!empty($configs)) {
                 foreach ($configs as $tsConfig) {
                     $result[] = array($tsConfig->name, $tsConfig->name);
                 }
             } else {
                 $result[] = array('default', $translate->_('default'));
             }
             break;
         default:
             $result = parent::_getSpecialOptions($_value);
     }
     return $result;
 }
Example #20
0
 /**
  * Returns registry data of addressbook.
  * @see Tinebase_Application_Json_Abstract
  * 
  * @return mixed array 'variable name' => 'data'
  */
 public function getRegistryData()
 {
     $filter = new Tinebase_Model_ImportExportDefinitionFilter(array(array('field' => 'plugin', 'operator' => 'equals', 'value' => 'Billing_Import_BankCsv')));
     $importDefinitions = Tinebase_ImportExportDefinition::getInstance()->search($filter);
     //print_r($importDefinitions);
     try {
         $defaultDefinitionArray = Tinebase_ImportExportDefinition::getInstance()->getByName('bank_import_csv')->toArray();
     } catch (Tinebase_Exception_NotFound $tenf) {
         if (count($importDefinitions) > 0) {
             $defaultDefinitionArray = $importDefinitions->getFirstRecord()->toArray();
         } else {
             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' No import definitions found for Banks');
             $defaultDefinitionArray = array();
         }
     }
     $registryData = array('Order' => Billing_Controller_Order::getInstance()->getRegistryData(), 'StockLocation' => Billing_Controller_StockLocation::getInstance()->getRegistryData(), 'PaymentMethods' => $this->getPaymentMethodsAsSimpleArray(), 'Context' => $this->getContextsAsSimpleArray(), 'ArticleGroups' => Billing_Controller_ArticleGroup::getInstance()->getArticleGroupsAsSimpleArray(), 'DebitorGroups' => Billing_Controller_DebitorGroup::getInstance()->getDebitorGroupsAsSimpleArray(), 'ArticleSeriess' => Billing_Controller_ArticleSeries::getInstance()->getArticleSeriessAsSimpleArray(), 'AccountSystems' => Billing_Controller_AccountSystem::getInstance()->getAccountSystemsAsSimpleArray(), 'AccountClasss' => Billing_Controller_AccountClass::getInstance()->getAccountClasssAsSimpleArray(), 'defaultBankImportDefinition' => $defaultDefinitionArray, 'importDefinitions' => array('results' => $importDefinitions->toArray(), 'totalcount' => count($importDefinitions)));
     return $registryData;
 }
 /**
  * import helper
  *
  * @param array $additionalOptions
  * @param array $clientRecords
  * @param string $filename
  * @return array
  */
 protected function _importHelper($additionalOptions = array('dryrun' => 1), $clientRecords = array(), $filename = NULL)
 {
     $definition = Tinebase_ImportExportDefinition::getInstance()->getByName('adb_tine_import_csv');
     $definitionOptions = Tinebase_ImportExportDefinition::getOptionsAsZendConfigXml($definition);
     $tempFileBackend = new Tinebase_TempFile();
     $importFile = $filename ? $filename : dirname(dirname(dirname(dirname(__FILE__)))) . '/tine20/' . $definitionOptions->example;
     $tempFile = $tempFileBackend->createTempFile($importFile);
     $options = array_merge($additionalOptions, array('container_id' => $this->container->getId()));
     $result = $this->_uit->importContacts($tempFile->getId(), $definition->getId(), $options, $clientRecords);
     if (isset($additionalOptions['dryrun']) && $additionalOptions['dryrun'] === 0) {
         foreach ($result['results'] as $contact) {
             $this->_contactIdsToDelete[] = $contact['id'];
         }
     }
     return $result;
 }
 /**
  * import users
  *
  * @param string $_config xml config
  * 
  * @see 0008300: Import User via CLI don't import all fields
  */
 protected function _importUsers($_config, $_filename, $_definition)
 {
     // create definition / check if exists
     try {
         $definition = Tinebase_ImportExportDefinition::getInstance()->getByName($_definition);
         $definition->plugin_options = $_config;
     } catch (Tinebase_Exception_NotFound $e) {
         $definition = Tinebase_ImportExportDefinition::getInstance()->create(new Tinebase_Model_ImportExportDefinition(array('application_id' => Tinebase_Application::getInstance()->getApplicationByName('Admin')->getId(), 'name' => $_definition, 'type' => 'import', 'model' => 'Tinebase_Model_FullUser', 'plugin' => 'Admin_Import_User_Csv', 'plugin_options' => $_config)));
     }
     $tempFilename = TestServer::replaceEmailDomainInFile($_filename);
     $opts = new Zend_Console_Getopt('abp:');
     $opts->setArguments(array($tempFilename, 'definition=' . $_definition));
     // start import (dry run)
     ob_start();
     $this->_cli->importUser($opts);
     $out = ob_get_clean();
     return $out;
 }
 /**
  * import records
  *
  * @param Zend_Console_Getopt   $_opts
  * @return array import result
  */
 protected function _import($_opts)
 {
     $args = $this->_parseArgs($_opts, array(), 'filename');
     if ($_opts->d) {
         $args['dryrun'] = 1;
         if ($_opts->v) {
             echo "Doing dry run.\n";
         }
     }
     if (isset($args['definition']) || array_key_exists('definition', $args)) {
         if (preg_match("/\\.xml/", $args['definition'])) {
             $definition = Tinebase_ImportExportDefinition::getInstance()->getFromFile($args['definition'], Tinebase_Application::getInstance()->getApplicationByName($this->_applicationName)->getId());
         } else {
             $definition = Tinebase_ImportExportDefinition::getInstance()->getByName($args['definition']);
         }
         // If old Admin Import plugin is given use the new one!
         if ($definition->plugin == 'Admin_Import_Csv') {
             $definition->plugin = 'Admin_Import_User_Csv';
         }
         $importer = call_user_func($definition->plugin . '::createFromDefinition', $definition, $args);
     } else {
         if (isset($args['plugin']) || array_key_exists('plugin', $args)) {
             $importer = new $args['plugin']($args);
         } else {
             echo "You need to define a plugin OR a definition at least! \n";
             exit;
         }
     }
     // loop files in argv
     $result = array();
     foreach ((array) $args['filename'] as $filename) {
         // read file
         if ($_opts->v) {
             echo "reading file {$filename} ...";
         }
         try {
             $result[$filename] = $importer->importFile($filename);
             if ($_opts->v) {
                 echo "done.\n";
             }
         } catch (Exception $e) {
             if ($_opts->v) {
                 echo "failed (" . $e->getMessage() . ").\n";
             } else {
                 echo $e->getMessage() . "\n";
             }
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $e->getMessage());
             }
             if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                 Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' ' . $e->getTraceAsString());
             }
             continue;
         }
         echo "Imported " . $result[$filename]['totalcount'] . " records. Import failed for " . $result[$filename]['failcount'] . " records. \n";
         if (isset($result[$filename]['duplicatecount']) && !empty($result[$filename]['duplicatecount'])) {
             echo "Found " . $result[$filename]['duplicatecount'] . " duplicates.\n";
         }
         // import (check if dry run)
         if ($_opts->d && $_opts->v) {
             print_r($result[$filename]['results']->toArray());
             if ($result[$filename]['failcount'] > 0) {
                 print_r($result[$filename]['exceptions']->toArray());
             }
         }
     }
     return $result;
 }
Example #24
0
 /**
  * import records
  *
  * @param string $_tempFileId to import
  * @param string $_importDefinitionId
  * @param array $_options additional import options
  * @param array $_clientRecordData
  * @return array
  * @throws Tinebase_Exception_NotFound
  */
 protected function _import($_tempFileId, $_importDefinitionId, $_options = array(), $_clientRecordData = array())
 {
     $definition = Tinebase_ImportExportDefinition::getInstance()->get($_importDefinitionId);
     $importer = call_user_func($definition->plugin . '::createFromDefinition', $definition, $_options);
     if (!is_object($importer)) {
         throw new Tinebase_Exception_NotFound('No importer found for ' . $definition->name);
     }
     // extend execution time to 30 minutes
     $oldMaxExcecutionTime = Tinebase_Core::setExecutionLifeTime(1800);
     $file = Tinebase_TempFile::getInstance()->getTempFile($_tempFileId);
     $importResult = $importer->importFile($file->path, $_clientRecordData);
     $importResult['results'] = $importResult['results']->toArray();
     $importResult['exceptions'] = $importResult['exceptions']->toArray();
     $importResult['status'] = 'success';
     // reset max execution time to old value
     Tinebase_Core::setExecutionLifeTime($oldMaxExcecutionTime);
     return $importResult;
 }
Example #25
0
 /**
  * get default definition
  * 
  * @param Tinebase_Record_RecordSet $_importDefinitions
  * @return Tinebase_Model_ImportExportDefinition
  * 
  * @todo generalize this
  */
 protected function _getDefaultImportDefinition($_importDefinitions)
 {
     try {
         $defaultDefinition = Tinebase_ImportExportDefinition::getInstance()->getByName('adb_tine_import_csv');
     } catch (Tinebase_Exception_NotFound $tenf) {
         if (count($_importDefinitions) > 0) {
             $defaultDefinition = $_importDefinitions->getFirstRecord();
         } else {
             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' No import definitions found for Addressbook');
             $defaultDefinition = NULL;
         }
     }
     return $defaultDefinition;
 }
 /**
  * import helper
  *
  * @param array $_options
  * @param string|Tinebase_Model_ImportExportDefinition $_definition
  * @param Inventory_Model_InventoryItemFilter $_exportFilter
  * @return array
  */
 protected function _doImport(array $_options, $_definition, Inventory_Model_InventoryItemFilter $_exportFilter = NULL)
 {
     $definition = $_definition instanceof Tinebase_Model_ImportExportDefinition ? $_definition : Tinebase_ImportExportDefinition::getInstance()->getByName($_definition);
     $this->_instance = Inventory_Import_Csv::createFromDefinition($definition, $_options);
     // export first
     if ($_exportFilter !== NULL) {
         $exporter = new Inventory_Export_Csv($_exportFilter, Inventory_Controller_InventoryItem::getInstance());
         $this->_filename = $exporter->generate();
     }
     // then import
     $result = $this->_instance->importFile($this->_filename);
     return $result;
 }
 /**
  * Returns registry data of all applications current user has access to
  * @see Tinebase_Application_Json_Abstract
  *
  * @return mixed array 'variable name' => 'data'
  */
 public function getAllRegistryData()
 {
     $registryData = array();
     if (Tinebase_Core::getUser()) {
         $userApplications = Tinebase_Core::getUser()->getApplications(TRUE);
         $clientConfig = Tinebase_Config::getInstance()->getClientRegistryConfig();
         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
             /** @noinspection PhpUndefinedFieldInspection */
             Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' User applications to fetch registry for: ' . print_r($userApplications->name, TRUE));
         }
         /** @noinspection PhpUndefinedFieldInspection */
         if (!in_array('Tinebase', $userApplications->name)) {
             Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' User has no permissions to run Tinebase.');
             $this->logout();
             throw new Tinebase_Exception_AccessDenied('User has no permissions to run Tinebase');
         }
         foreach ($userApplications as $application) {
             $jsonAppName = $application->name . '_Frontend_Json';
             if (class_exists($jsonAppName)) {
                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                     Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Getting registry data for app ' . $application->name);
                 }
                 try {
                     $applicationJson = new $jsonAppName();
                     $registryData[$application->name] = isset($registryData[$application->name]) || array_key_exists($application->name, $registryData) ? array_merge_recursive($registryData[$application->name], $applicationJson->getRegistryData()) : $applicationJson->getRegistryData();
                 } catch (Exception $e) {
                     Tinebase_Exception::log($e);
                     if (!$e instanceof Tinebase_Exception_AccessDenied && !in_array($application->name, array('Tinebase', 'Addressbook', 'Admin'))) {
                         Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Disabling ' . $application->name . ': ' . $e);
                         Tinebase_Application::getInstance()->setApplicationState(array($application->getId()), Tinebase_Application::DISABLED);
                     }
                     unset($registryData[$application->name]);
                     continue;
                 }
                 $registryData[$application->name]['rights'] = Tinebase_Core::getUser()->getRights($application->name);
                 $registryData[$application->name]['config'] = isset($clientConfig[$application->name]) ? $clientConfig[$application->name]->toArray() : array();
                 $registryData[$application->name]['models'] = $applicationJson->getModelsConfiguration();
                 $registryData[$application->name]['defaultModel'] = $applicationJson->getDefaultModel();
                 foreach ($applicationJson->getRelatableModels() as $relModel) {
                     $registryData[$relModel['ownApp']]['relatableModels'][] = $relModel;
                 }
                 // @todo do we need this for all apps?
                 $exportDefinitions = Tinebase_ImportExportDefinition::getInstance()->getExportDefinitionsForApplication($application);
                 $registryData[$application->name]['exportDefinitions'] = array('results' => $exportDefinitions->toArray(), 'totalcount' => count($exportDefinitions));
                 $customfields = Tinebase_CustomField::getInstance()->getCustomFieldsForApplication($application);
                 Tinebase_CustomField::getInstance()->resolveConfigGrants($customfields);
                 $registryData[$application->name]['customfields'] = $customfields->toArray();
                 // add preferences for app
                 $appPrefs = Tinebase_Core::getPreference($application->name);
                 if ($appPrefs !== NULL) {
                     $allPrefs = $appPrefs->getAllApplicationPreferences();
                     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
                         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($allPrefs, TRUE));
                     }
                     foreach ($allPrefs as $pref) {
                         try {
                             $registryData[$application->name]['preferences'][$pref] = $appPrefs->{$pref};
                         } catch (Exception $e) {
                             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not get ' . $pref . '  preference: ' . $e);
                         }
                     }
                 }
             }
         }
     } else {
         $registryData['Tinebase'] = $this->getRegistryData();
     }
     return $registryData;
 }
 /**
  * Returns registry data of all applications current user has access to
  * @see Tinebase_Application_Json_Abstract
  *
  * @return mixed array 'variable name' => 'data'
  */
 public function getAllRegistryData()
 {
     $registryData = array();
     if (Tinebase_Core::getUser()) {
         $userApplications = Tinebase_Core::getUser()->getApplications(TRUE);
         $clientConfig = Tinebase_Config::getInstance()->getClientRegistryConfig();
         if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
             /** @noinspection PhpUndefinedFieldInspection */
             Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' User applications to fetch registry for: ' . print_r($userApplications->name, TRUE));
         }
         /** @noinspection PhpUndefinedFieldInspection */
         if (!in_array('Tinebase', $userApplications->name)) {
             Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' User has no permissions to run Tinebase.');
             $this->logout();
             throw new Tinebase_Exception_AccessDenied('User has no permissions to run Tinebase');
         }
         foreach ($userApplications as $application) {
             $appRegistry = array();
             $appRegistry['rights'] = Tinebase_Core::getUser()->getRights($application->name);
             $appRegistry['config'] = isset($clientConfig[$application->name]) ? $clientConfig[$application->name]->toArray() : array();
             // @todo do we need this for all apps?
             $exportDefinitions = Tinebase_ImportExportDefinition::getInstance()->getExportDefinitionsForApplication($application);
             $appRegistry['exportDefinitions'] = array('results' => $exportDefinitions->toArray(), 'totalcount' => count($exportDefinitions));
             $customfields = Tinebase_CustomField::getInstance()->getCustomFieldsForApplication($application);
             Tinebase_CustomField::getInstance()->resolveConfigGrants($customfields);
             $appRegistry['customfields'] = $customfields->toArray();
             // add preferences for app
             try {
                 $prefRegistry = $this->_getAppPreferencesForRegistry($application);
                 $appRegistry = array_merge_recursive($appRegistry, $prefRegistry);
             } catch (Tinebase_Exception_AccessDenied $tead) {
                 // do not add prefs if user has no run right
             }
             $customAppRegistry = $this->_getCustomAppRegistry($application);
             if (empty($customAppRegistry)) {
                 // TODO always get this from app controller (and remove from _getCustomAppRegistry)
                 $appController = Tinebase_Core::getApplicationInstance($application->name);
                 $models = $appController->getModels();
                 $appRegistry['models'] = Tinebase_ModelConfiguration::getFrontendConfigForModels($models);
                 $appRegistry['defaultModel'] = $appController->getDefaultModel();
             } else {
                 $appRegistry = array_merge_recursive($appRegistry, $customAppRegistry);
             }
             $registryData[$application->name] = $appRegistry;
         }
     } else {
         $registryData['Tinebase'] = $this->getRegistryData();
     }
     return $registryData;
 }
Example #29
0
 /**
  * Returns registry data of all applications current user has access to
  * @see Tinebase_Application_Json_Abstract
  *
  * @return mixed array 'variable name' => 'data'
  */
 public function getAllRegistryData()
 {
     $registryData = array();
     if (Tinebase_Core::getUser()) {
         $userApplications = Tinebase_Core::getUser()->getApplications(TRUE);
         $clientConfig = Tinebase_Config::getInstance()->getClientRegistryConfig();
         foreach ($userApplications as $application) {
             $jsonAppName = $application->name . '_Frontend_Json';
             if (class_exists($jsonAppName)) {
                 if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
                     Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' Getting registry data for app ' . $application->name);
                 }
                 $applicationJson = new $jsonAppName();
                 $registryData[$application->name] = $applicationJson->getRegistryData();
                 $registryData[$application->name]['rights'] = Tinebase_Core::getUser()->getRights($application->name);
                 $registryData[$application->name]['config'] = isset($clientConfig[$application->name]) ? $clientConfig[$application->name]->toArray() : array();
                 // @todo do we need this for all apps?
                 $exportDefinitions = Tinebase_ImportExportDefinition::getInstance()->getExportDefinitionsForApplication($application);
                 $registryData[$application->name]['exportDefinitions'] = array('results' => $exportDefinitions->toArray(), 'totalcount' => count($exportDefinitions));
                 $customfields = Tinebase_CustomField::getInstance()->getCustomFieldsForApplication($application);
                 Tinebase_CustomField::getInstance()->resolveConfigGrants($customfields);
                 $registryData[$application->name]['customfields'] = $customfields->toArray();
                 // add preferences for app
                 $appPrefs = Tinebase_Core::getPreference($application->name);
                 if ($appPrefs !== NULL) {
                     $allPrefs = $appPrefs->getAllApplicationPreferences();
                     foreach ($allPrefs as $pref) {
                         $registryData[$application->name]['preferences'][$pref] = $appPrefs->{$pref};
                     }
                 }
             }
         }
         if (!array_key_exists('Tinebase', $registryData)) {
             Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' User has no permissions to run Tinebase or unable to get Tinebase preferences. Aborting ...');
             $this->logout();
         }
     } else {
         $registryData['Tinebase'] = $this->getRegistryData();
     }
     return $registryData;
 }
 /**
  * look for import definitions and put them into the db
  *
  * @param Tinebase_Model_Application $_application
  */
 public function createImportExportDefinitions($_application)
 {
     foreach (array('Import', 'Export') as $type) {
         $path = $this->_baseDir . $_application->name . DIRECTORY_SEPARATOR . $type . DIRECTORY_SEPARATOR . 'definitions';
         if (file_exists($path)) {
             foreach (new DirectoryIterator($path) as $item) {
                 $filename = $path . DIRECTORY_SEPARATOR . $item->getFileName();
                 if (preg_match("/\\.xml/", $filename)) {
                     try {
                         Tinebase_ImportExportDefinition::getInstance()->updateOrCreateFromFilename($filename, $_application);
                     } catch (Exception $e) {
                         Setup_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Not installing import/export definion from file: ' . $filename . ' / Error message: ' . $e->getMessage());
                     }
                 }
             }
         }
     }
 }