summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 825ed2a)
raw | patch | inline | side by side (parent: 825ed2a)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 27 Apr 2010 08:17:14 +0000 (08:17 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 27 Apr 2010 08:17:14 +0000 (08:17 +0000) |
-we keep the old style import
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@17867 594d385d-05f5-0310-b6e9-bd551577e9d8
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@17867 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-core/include/class_SnapshotHandler.inc | patch | blob | history | |
gosa-core/include/class_ldap.inc | patch | blob | history | |
gosa-core/include/class_ldapMultiplexer.inc | patch | blob | history |
diff --git a/gosa-core/include/class_SnapshotHandler.inc b/gosa-core/include/class_SnapshotHandler.inc
index ad3957c25f30f60adedcb497e6c17f09a6a92f79..ae04963fbbe1ecf2f58dc7dfd23d172880309a81 100644 (file)
$data = gzuncompress($ldap_to->get_attribute($dn,'gosaSnapshotData'));
/* Import the given data */
- $ldap->importLdif($data);
+ $err = "";
+ $ldap->import_complete_ldif($data,$err,false,false);
if (!$ldap->success()){
msg_dialog::display(_("LDAP error"), msgPool::ldaperror($ldap->get_error(), $dn, "", get_class()));
}
index b7ba650ea71104b3d788b9d52eec5c9e5cc336c2..5d815810e9134838bb49e6f4e8d0f5f98b6e8b89 100644 (file)
}
- function importLdif($str)
- {
- }
-
-
function gen_xls ($srp, $dn, $filter= "(objectClass=*)", $attributes= array('*'), $recursive= TRUE,$r_array=0)
{
$display= array();
}
+
+ /* This funktion imports ldifs
+
+ If DeleteOldEntries is true, the destination entry will be deleted first.
+ If JustModify is true the destination entry will only be touched by the attributes specified in the ldif.
+ if JustMofify id false the destination dn will be overwritten by the new ldif.
+ */
+
+ function import_complete_ldif($srp, $str_attr,$error,$JustModify,$DeleteOldEntries)
+ {
+ if($this->reconnect) $this->connect();
+
+ /* First we have to split the string into empty lines.
+ An empty line indicates an new Entry */
+ $entries = preg_split("/\n/",$str_attr);
+
+ $data = "";
+ $cnt = 0;
+ $current_line = 0;
+
+ /* FIX ldif */
+ $last = "";
+ $tmp = "";
+ $i = 0;
+ foreach($entries as $entry){
+ if(preg_match("/^ /",$entry)){
+ $tmp[$i] .= trim($entry);
+ }else{
+ $i ++;
+ $tmp[$i] = trim($entry);
+ }
+ }
+
+ /* Every single line ... */
+ foreach($tmp as $entry) {
+ $current_line ++;
+
+ /* Removing Spaces to ..
+ .. test if a new entry begins */
+ $tmp = str_replace(" ","",$data );
+
+ /* .. prevent empty lines in an entry */
+ $tmp2 = str_replace(" ","",$entry);
+
+ /* If the Block ends (Empty Line) */
+ if((empty($entry))&&(!empty($tmp))) {
+ /* Add collected lines as a complete block */
+ $all[$cnt] = $data;
+ $cnt ++;
+ $data ="";
+ } else {
+
+ /* Append lines ... */
+ if(!empty($tmp2)) {
+ /* check if we need base64_decode for this line */
+ if(strstr($tmp2, "::") !== false)
+ {
+ $encoded = explode("::",$entry);
+ $attr = trim($encoded[0]);
+ $value = base64_decode(trim($encoded[1]));
+ /* Add linenumber */
+ $data .= $current_line."#".base64_encode($attr.":".$value)."\n";
+ }
+ else
+ {
+ /* Add Linenumber */
+ $data .= $current_line."#".base64_encode($entry)."\n";
+ }
+ }
+ }
+ }
+
+ /* The Data we collected is not in the array all[];
+ For example the Data is stored like this..
+
+ all[0] = "1#dn : .... \n
+ 2#ObjectType: person \n ...."
+
+ Now we check every insertblock and try to insert */
+ foreach ( $all as $single) {
+ $lineone = preg_split("/\n/",$single);
+ $ndn = explode("#", $lineone[0]);
+ $line = base64_decode($ndn[1]);
+
+ $dnn = explode (":",$line,2);
+ $current_line = $ndn[0];
+ $dn = $dnn[0];
+ $value = $dnn[1];
+
+ /* Every block must begin with a dn */
+ if($dn != "dn") {
+ $error= sprintf(_("Invalid DN %s: block to be imported should start with 'dn: ...' in line %s"), bold($line), bold($current_line));
+ return -2;
+ }
+
+ /* Should we use Modify instead of Add */
+ $usemodify= false;
+
+ /* Delete before insert */
+ $usermdir= false;
+
+ /* The dn address already exists, Don't delete destination entry, overwrite it */
+ if (($this->dn_exists($value))&&((!$JustModify)&&(!$DeleteOldEntries))) {
+
+ $usermdir = $usemodify = false;
+
+ /* Delete old entry first, then add new */
+ } elseif(($this->dn_exists($value))&&($DeleteOldEntries)){
+
+ /* Delete first, then add */
+ $usermdir = true;
+
+ } elseif(($this->dn_exists($value))&&($JustModify)) {
+
+ /* Modify instead of Add */
+ $usemodify = true;
+ }
+
+ /* If we can't Import, return with a file error */
+ if(!$this->import_single_entry($srp, $single,$usemodify,$usermdir) ) {
+ $error= sprintf(_("Error while importing DN %s: please check LDIF from line %s on!"), bold($line),
+ $current_line);
+ return UNKNOWN_TOKEN_IN_LDIF_FILE; }
+ }
+
+ return (INSERT_OK);
+ }
+
+
+ /* Imports a single entry
+ If $delete is true; The old entry will be deleted if it exists.
+ if $modify is true; All variables that are not touched by the new ldif will be kept.
+ if $modify is false; The new ldif overwrites the old entry, and all untouched attributes get lost.
+ */
+ function import_single_entry($srp, $str_attr,$modify,$delete)
+ {
+ global $config;
+
+ if(!$config){
+ trigger_error("Can't import ldif, can't read config object.");
+ }
+
+
+ if($this->reconnect) $this->connect();
+
+ $ret = false;
+ $rows= preg_split("/\n/",$str_attr);
+ $data= false;
+
+ foreach($rows as $row) {
+
+ /* Check if we use Linenumbers (when import_complete_ldif is called we use
+ Linenumbers) Linenumbers are use like this 123#attribute : value */
+ if(!empty($row)) {
+ if(strpos($row,"#")!=FALSE) {
+
+ /* We are using line numbers
+ Because there is a # before a : */
+ $tmp1= explode("#",$row);
+ $current_line= $tmp1[0];
+ $row= base64_decode($tmp1[1]);
+ }
+
+ /* Split the line into attribute and value */
+ $attr = explode(":", $row,2);
+ $attr[0]= trim($attr[0]); /* attribute */
+ $attr[1]= $attr[1]; /* value */
+
+ /* Check :: was used to indicate base64_encoded strings */
+ if($attr[1][0] == ":"){
+ $attr[1]=trim(preg_replace("/^:/","",$attr[1]));
+ $attr[1]=base64_decode($attr[1]);
+ }
+
+ $attr[1] = trim($attr[1]);
+
+ /* Check for attributes that are used more than once */
+ if(!isset($data[$attr[0]])) {
+ $data[$attr[0]]=$attr[1];
+ } else {
+ $tmp = $data[$attr[0]];
+
+ if(!is_array($tmp)) {
+ $new[0]=$tmp;
+ $new[1]=$attr[1];
+ $datas[$attr[0]]['count']=1;
+ $data[$attr[0]]=$new;
+ } else {
+ $cnt = $datas[$attr[0]]['count'];
+ $cnt ++;
+ $data[$attr[0]][$cnt]=$attr[1];
+ $datas[$attr[0]]['count'] = $cnt;
+ }
+ }
+ }
+ }
+
+ /* If dn is an index of data, we should try to insert the data */
+ if(isset($data['dn'])) {
+
+ /* Fix dn */
+ $tmp = gosa_ldap_explode_dn($data['dn']);
+ unset($tmp['count']);
+ $newdn ="";
+ foreach($tmp as $tm){
+ $newdn.= trim($tm).",";
+ }
+ $newdn = preg_replace("/,$/","",$newdn);
+ $data['dn'] = $newdn;
+
+ /* Creating Entry */
+ $this->cd($data['dn']);
+
+ /* Delete existing entry */
+ if($delete){
+ $this->rmdir_recursive($srp, $data['dn']);
+ }
+
+ /* Create missing trees */
+ $this->cd ($this->basedn);
+ $this->cd($config->current['BASE']);
+ $this->create_missing_trees($srp, preg_replace("/^[^,]+,/","",$data['dn']));
+ $this->cd($data['dn']);
+
+ $dn = $data['dn'];
+ unset($data['dn']);
+
+ if(!$modify){
+
+ $this->cat($srp, $dn);
+ if($this->count($srp)){
+
+ /* The destination entry exists, overwrite it with the new entry */
+ $attrs = $this->fetch($srp);
+ foreach($attrs as $name => $value ){
+ if(!is_numeric($name)){
+ if(in_array($name,array("dn","count"))) continue;
+ if(!isset($data[$name])){
+ $data[$name] = array();
+ }
+ }
+ }
+ $ret = $this->modify($data);
+
+ }else{
+
+ /* The destination entry doesn't exists, create it */
+ $ret = $this->add($data);
+ }
+
+ } else {
+
+ /* Keep all vars that aren't touched by this ldif */
+ $ret = $this->modify($data);
+ }
+ }
+
+ if (!$this->success()){
+ msg_dialog::display(_("LDAP error"), msgPool::ldaperror($this->get_error(), $dn, "", get_class()));
+ }
+
+ return($ret);
+ }
+
+
+ function importcsv($str)
+ {
+ $lines = preg_split("/\n/",$str);
+ foreach($lines as $line)
+ {
+ /* continue if theres a comment */
+ if(substr(trim($line),0,1)=="#"){
+ continue;
+ }
+
+ $line= str_replace ("\t\t","\t",$line);
+ $line= str_replace ("\t" ,"," ,$line);
+ echo $line;
+
+ $cells = explode(",",$line ) ;
+ $linet= str_replace ("\t\t",",",$line);
+ $cells = preg_split("/\t/",$line);
+ $count = count($cells);
+ }
+
+ }
+
function get_objectclasses( $force_reload = FALSE)
{
$objectclasses = array();
diff --git a/gosa-core/include/class_ldapMultiplexer.inc b/gosa-core/include/class_ldapMultiplexer.inc
index 85683c7ce3fb4c660ee9dbaae71ad95132abe7ad..fbd6d91b47d47168cfb579ecd57596f8ebde0b66 100644 (file)
public function __call($methodName, $parameters) {
/* Add resource pointer if the mentioned methods are used */
- if (preg_match('/^(search|ls|cat|fetch|clearResult|resetResult|count|getDN|recursive_remove|rmdir_recursive|gen_xls|create_missing_trees)$/', $methodName)){
+ if (preg_match('/^(search|ls|cat|fetch|clearResult|resetResult|count|getDN|recursive_remove|rmdir_recursive|gen_xls|create_missing_trees|import_single_entry|import_complete_ldif)$/', $methodName)){
array_unshift($parameters, $this->sr);
}