egroupware/importexport/inc/class.bodefinitions.inc.php

172 lines
4.7 KiB
PHP
Raw Normal View History

<?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>
* @copyright Cornelius Weiss <nelius@cwtech.de>
2006-11-10 16:38:31 +01:00
* @version $Id$
*/
require_once(EGW_INCLUDE_ROOT. '/importexport/inc/class.definition.inc.php');
2007-06-08 00:08:38 +02:00
require_once(EGW_INCLUDE_ROOT. '/importexport/inc/class.arrayxml.inc.php');
require_once(EGW_INCLUDE_ROOT.'/etemplate/inc/class.so_sql.inc.php');
/** bo to define {im|ex}ports
*
* @todo make this class an egw_record_pool!
*/
class bodefinitions {
const _appname = 'importexport';
const _defintion_talbe = 'egw_importexport_definitions';
/**
* holds so_sql
*
* @var so_sql
*/
private $so_sql;
private $definitions;
public function __construct($_query=false)
{
$this->so_sql = new so_sql(self::_appname, self::_defintion_talbe );
if ($_query) {
$definitions = $this->so_sql->search($_query, true);
foreach ((array)$definitions as $definition) {
$this->definitions[] = $definition['definition_id'];
}
}
}
2007-06-08 00:08:38 +02:00
/**
* gets definitions as raw data.
* well, we need a god idea for egw_record pools...
* its not a god idea to make a definition object of each
* at the moment, as each defintion holds an so_sql instance.
*
* @return array
*/
public function get_definitions() {
return $this->definitions;
}
/**
* reads a definition from database
*
2007-06-08 00:08:38 +02:00
* @deprecated see class.definition.inc.php
* @param mixed &$definition
* @return bool success or not
*/
2007-06-08 00:08:38 +02:00
public function read(&$definition) {
if(is_int($definition)) $definition = array('definition_id' => $definition);
elseif(is_string($definition)) $definition = array('name' => $definition);
if(!$definition = $this->so_sql->read($definition)) return false;
$definition += (array)unserialize($definition['plugin_options']);
unset($definition['plugin_options']);
return true;
}
2007-06-08 00:08:38 +02:00
/**
* deletes a defintion
*
* @param array $keys
*/
public function delete($keys) {
$this->so_sql->delete(array('definition_id' => $keys));
2007-06-08 00:08:38 +02:00
// clear private cache
foreach ($keys as $key) {
unset($this->definitions[array_search($key,$this->definitions)]);
}
}
/**
* checkes if user if permitted to access given definition
*
* @param array $_definition
* @return bool
*/
static public function is_permitted($_definition) {
$allowed_user = explode(',',$_definition['allowed_users']);
$this_user_id = $GLOBALS['egw_info']['user']['userid'];
$this_membership = $GLOBALS['egw']->accounts->membership($this_user_id);
$this_membership[] = array('account_id' => $this_user_id);
//echo $this_user_id;
//echo ' '.$this_membership;
foreach ((array)$this_membership as $account)
{
$this_membership_array[] = $account['account_id'];
}
$alluser = array_intersect($allowed_user,$this_membership_array);
return in_array($this_user_id,$alluser) ? true : false;
}
/**
* exports definitions
*
* @param array $keys to export
*/
public function export($keys)
{
$export_data = array('metainfo' => array(
'type' => 'importexport definitions',
'charset' => $GLOBALS['egw']->translation->charset(),
'entries' => count($keys),
));
2007-06-08 00:08:38 +02:00
$export_data['definitions'] = array();
foreach ($keys as $definition_id) {
$definition = new definition( $definition_id );
$export_data['definitions'][$definition->name] = $definition->get_record_array();
unset($export_data['definitions'][$definition->name]['definition_id']);
unset($definition);
}
2007-06-08 00:08:38 +02:00
$xml = new arrayxml();
return $xml->array2xml($export_data, 'importExportDefinitions');
}
2007-06-08 00:08:38 +02:00
/**
* imports definitions from file
*
* @param string $import_file
* @throws Exeption
* @return void
*/
public static function import( $_import_file )
{
2007-06-08 00:08:38 +02:00
if ( !is_file( $_import_file ) ) {
throw new Exception("'$_import_file' is not a valid file" );
}
$data = arrayxml::xml2array( file_get_contents( $_import_file ) );
$metainfo = $data['importExportDefinitions']['metainfo'];
$definitions = $data['importExportDefinitions']['definitions'];
unset ( $data );
// convert charset into internal used charset
2007-06-08 00:08:38 +02:00
$definitions = $GLOBALS['egw']->translation->convert(
$definitions,
$metainfo['charset'],
$GLOBALS['egw']->translation->charset()
);
// save definition(s) into internal table
2007-06-08 00:08:38 +02:00
foreach ( $definitions as $name => $definition_data )
{
2007-06-08 00:08:38 +02:00
$definition = new definition( $definition_data['name'] );
$definition_id = $definition->get_identifier() ? $definition->get_identifier() : NULL;
$definition->set_record( $definition_data );
$definition->save( $definition_id );
}
}
2007-06-08 00:08:38 +02:00
}