]> git.nbdom.net Git - nb.git/commitdiff
lib/php/nb.php
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Thu, 14 Dec 2017 05:04:20 +0000 (05:04 +0000)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Thu, 14 Dec 2017 05:04:20 +0000 (05:04 +0000)
lib/php/nb.php
lib/php/out.php

index c6a8102c4c55e7c6ada0d8c70319e19149e9268e..f139d6ec6f670f8c19c4519060a2c445a8270c4a 100644 (file)
@@ -1080,9 +1080,10 @@ class NB {
 
                if (!isset($o['bind_dn'])) $o['bind_dn'] = 'cn=' . $o['user'] . $o['bind_dn_preff'] . $o['base_dn'];
 
-               if (empty($o['filter'])) $o['filter'] = "(&(userpassword=*)(cn=".$o['user']."))";
                if (empty($o['attrs'])) $o['attrs'] = [];
 
+               if (!isset($o['limit'])) $o['limit'] = 0;
+               if (!isset($o['dn'])) $o['dn'] = true;
                #return [$o];
 
                $connect = ldap_connect($o['host']) or exit(">>Could not connect to LDAP server<<");
@@ -1090,7 +1091,11 @@ class NB {
                ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
 
                $bind = ldap_bind($connect, $o['bind_dn'], $o['password']) or self::bye(">>Could not bind to ".$o['ldap_host']."<<");
-               $read = ldap_search($connect, $o['base_dn'], $o['filter'], $o['attrs'], 0) or self::bye(">>Unable to search ldap server<<");
+               if (empty($o['filter'])) {
+                       $o['filter'] = "(&(userpassword=*))";
+                       $o['base_dn'] = $o['bind_dn'];
+               }
+               $read = ldap_search($connect, $o['base_dn'], $o['filter'], $o['attrs'], $o['limit']) or self::bye(">>Unable to search ldap server<<");
 
                $info = [];
                $i = 0;
@@ -1098,21 +1103,17 @@ class NB {
                do {
 
                        $attributes = ldap_get_attributes($connect, $entry);
+                       #$attributes['count']++;
 
                        for($j=0; $j<$attributes['count']; $j++) {
-                               #if (!empty($o['attrs']) and !in_array($attributes[$j],$o['attrs'])) continue;
-                               #debug($info[$i]);
-                               #debug($attributes[$j]);
                                $values = ldap_get_values_len($connect, $entry,$attributes[$j]);
                                unset($values['count']);
-                               if ($attributes[$j] == 'jpegPhoto') for ($v=0; $v<count($values); $v++) {
-                                       #$values[$v] = unpack("H*hex",$values[$v]);
-                                       #$values[$v] = base64_decode($values[$v]);
-                               }
-                               #array_pop($values);
                                if (isset($values) and count($values) == 1) $values = $values[0];
                                $info[$i][$attributes[$j]] = $values;
                        }
+                       if (!empty($o['dn']) and
+                               in_array('dn',!empty($o['attrs']) ? $o['attrs'] : ['dn'])
+                       ) $info[$i] = ['dn' => ldap_get_dn($connect,$entry)] + (empty($info[$i]) ? [] : $info[$i]);
 
                        #$info[$i]['count'] = count($info[$i]);
                        $i++;
index 5bf50e9939f038cd4307c61c4290b24fe749d9c8..2b762031bb6e6b4d5df1a6dfb2ebddca70a1317e 100644 (file)
@@ -17,6 +17,17 @@ Class Out extends Nb {
 
       'sql' => [], # Code still in db/table.php !
 
+      'bin' => [
+        'base64_encode_binary' => false,
+                               'sep' => '',
+                               'eol' => '',
+        'row' => function (&$o,&$row) {
+                                       if (!empty($o['_bin'])) return;
+                                       $o['_bin'] = true;
+                                       foreach ($row as $k=>$v) { echo $v; break; }
+                               },
+                       ],
+
       'human' => [
         'sep' => self::p('sep'," | "),
         'corner' => self::p('corner',"+"),
@@ -27,65 +38,37 @@ Class Out extends Nb {
         'end' => 'out_human_end',
       ],
 
-      'php_hash' => [
-        'align' => ' => ',
-        'eol' => ",\n",
-        'quote' => "'",
+      'txt' => [
+        'col' => self::p('col',' : '),
+        'sep' => self::p('sep',"\n"),
+        'eol' => self::p('eol',"--\n"),
+        'init' => function(&$o) { if (self::header()) return; $o['eol'] = ''; },
       ],
 
-      'cust' => [
-        '_web_' => false,
-        'cust' => self::p('cust',"CHANGE ME"),
-        'at' => self::p('at','@'),
-        'open' => self::p('open',''),
-        'close' => self::p('close',''),
-
-        'quote' => self::p('quote',"'"),
-        'quote_escape' => self::p('quote_escape','\\'),
-
-        'eol' => self::p('eol',"\n"),
-        'sep' => self::p('sep',''),
-        'preff' => self::p('preff',''),
-        'suff' => self::p('suff',''),
+      'csv' => [
+        'sep' => self::punescape('sep',"\t"),
+        'quote' => self::p('quote',''),
+        'quote_escape' => self::punescape('quote_escape','\\'),
+        'eol' => self::punescape('eol',"\n"),
+      ],
 
-        'end' => function($o) { if (isset($o['count']) and $o['close']) echo $o['close']; },
-        'row' => function(&$o,&$r) {
-            static $count=0;
-            if (!$count) {
-              foreach ($o as $k=>$v) {
-                if (is_scalar($v)) $o[$k] = str_replace('\n',"\n",$v);
-              }
-              if ($o['open']) echo $o['open'];
-            }
-            $count++; $o['count'] = $count;
-            echo $o['preff']
-              .($count>1 ? $o['sep'] : '')
-              .preg_replace_callback('/'.$o['at'].'([\w_]+)(?::([-\+]?\d+))?'.$o['at'].'/',function($m) use ($o,$r,$count){
-
-                #bye($m);
-                $k = $m[1];
-                $size = empty($m[2]) ? 0 : (int)$m[2];
-                $v = $r[$k];
-
-                if (!empty($o['quote'])) $v = $o['quote'] .
-                  str_replace($o['quote'],$o['quote_escape'].$o['quote'],$v)
-                . $o['quote'];
-
-                if ($size) {
-                  $align = $size>0 ? STR_PAD_LEFT : STR_PAD_RIGHT;
-                  $size = abs($size);
-                  if ($count>1) $size -= mb_strlen($o['sep'],self::$charset);
-                  $v = self::mb_str_pad($v, $size, ' ',$align);
-                }
-
-                return $v;
-
-              },$o['cust'])
-              .$o['suff']
-            ;
+      'yaml' => [
+        'enclose' => ["---\n",""],
+        'row' => function (&$o,&$row) {
+          $yaml = '- '.self::yaml_encode($row);
+          $yaml = preg_replace("/^(?!-)/m","  ",$yaml);
+          echo $yaml;
         }
       ],
 
+      'json' => [
+        'base64_encode_binary' => true,
+        'enclose' => array('['.self::p('eol',NB_EOL),']'),
+        'row' => function(&$o,&$row) { return self::json_encode($row); },
+        'eol' => self::p('eol',NB_EOL),
+        'rec' => ',',
+      ],
+
       'sh' => array(
         'preff' => self::p('preff',""),
         'row' => function(&$o,&$r) {
@@ -122,6 +105,7 @@ Class Out extends Nb {
           ),var_export($r,true));
         }
       ),
+      'php_hash' => [ 'align' => ' => ', 'eol' => ",\n", 'quote' => "'", ],
       'php_var_dump' => ['row' => function(&$o,&$r) {var_dump($r);},],
       'php_print_r' => ['row' => function(&$o,&$r) {print_r($r);},],
       'php_var_export' => ['row' => function(&$o,&$r) {var_export($r);},],
@@ -167,40 +151,58 @@ Class Out extends Nb {
         },
       ],
 
-      'txt' => [
-        'col' => self::p('col',' : '),
-        'sep' => self::p('sep',"\n"),
-        'eol' => self::p('eol',"--\n"),
-        'init' => function(&$o) { if (self::header()) return; $o['eol'] = ''; },
-      ],
-
-      'csv' => [
-        'sep' => self::punescape('sep',"\t"),
-        'quote' => self::p('quote',''),
-        'quote_escape' => self::punescape('quote_escape','\\'),
-        'eol' => self::punescape('eol',"\n"),
-      ],
-
-      'yaml' => [
-        'enclose' => ["---\n",""],
-        'row' => function (&$o,&$row) {
-          $yaml = '- '.self::yaml_encode($row);
-          $yaml = preg_replace("/^(?!-)/m","  ",$yaml);
-          echo $yaml;
-        }
-      ],
-
-      'json' => [
-        'enclose' => array('['.self::p('eol',NB_EOL),']'),
-        'row' => function(&$o,&$row) {
-# NB 14.12.17                                  if (self::charset() == 'utf-8') foreach ($row as $k=>$v) {
-# NB 14.12.17                                          if (is_scalar($v)) $row[$k] = utf8_encode($v);
-# NB 14.12.17                                  }
-                                       return self::json_encode($row);
-                               },
-        'eol' => self::p('eol',NB_EOL),
-        'rec' => ',',
-      ],
+# NB 14.12.17       'cust' => [
+# NB 14.12.17         '_web_' => false,
+# NB 14.12.17         'cust' => self::p('cust',"CHANGE ME"),
+# NB 14.12.17         'at' => self::p('at','@'),
+# NB 14.12.17         'open' => self::p('open',''),
+# NB 14.12.17         'close' => self::p('close',''),
+# NB 14.12.17 
+# NB 14.12.17         'quote' => self::p('quote',"'"),
+# NB 14.12.17         'quote_escape' => self::p('quote_escape','\\'),
+# NB 14.12.17 
+# NB 14.12.17         'eol' => self::p('eol',"\n"),
+# NB 14.12.17         'sep' => self::p('sep',''),
+# NB 14.12.17         'preff' => self::p('preff',''),
+# NB 14.12.17         'suff' => self::p('suff',''),
+# NB 14.12.17 
+# NB 14.12.17         'end' => function($o) { if (isset($o['count']) and $o['close']) echo $o['close']; },
+# NB 14.12.17         'row' => function(&$o,&$r) {
+# NB 14.12.17             static $count=0;
+# NB 14.12.17             if (!$count) {
+# NB 14.12.17               foreach ($o as $k=>$v) {
+# NB 14.12.17                 if (is_scalar($v)) $o[$k] = str_replace('\n',"\n",$v);
+# NB 14.12.17               }
+# NB 14.12.17               if ($o['open']) echo $o['open'];
+# NB 14.12.17             }
+# NB 14.12.17             $count++; $o['count'] = $count;
+# NB 14.12.17             echo $o['preff']
+# NB 14.12.17               .($count>1 ? $o['sep'] : '')
+# NB 14.12.17               .preg_replace_callback('/'.$o['at'].'([\w_]+)(?::([-\+]?\d+))?'.$o['at'].'/',function($m) use ($o,$r,$count){
+# NB 14.12.17 
+# NB 14.12.17                 #bye($m);
+# NB 14.12.17                 $k = $m[1];
+# NB 14.12.17                 $size = empty($m[2]) ? 0 : (int)$m[2];
+# NB 14.12.17                 $v = $r[$k];
+# NB 14.12.17 
+# NB 14.12.17                 if (!empty($o['quote'])) $v = $o['quote'] .
+# NB 14.12.17                   str_replace($o['quote'],$o['quote_escape'].$o['quote'],$v)
+# NB 14.12.17                 . $o['quote'];
+# NB 14.12.17 
+# NB 14.12.17                 if ($size) {
+# NB 14.12.17                   $align = $size>0 ? STR_PAD_LEFT : STR_PAD_RIGHT;
+# NB 14.12.17                   $size = abs($size);
+# NB 14.12.17                   if ($count>1) $size -= mb_strlen($o['sep'],self::$charset);
+# NB 14.12.17                   $v = self::mb_str_pad($v, $size, ' ',$align);
+# NB 14.12.17                 }
+# NB 14.12.17 
+# NB 14.12.17                 return $v;
+# NB 14.12.17 
+# NB 14.12.17               },$o['cust'])
+# NB 14.12.17               .$o['suff']
+# NB 14.12.17             ;
+# NB 14.12.17         }
+# NB 14.12.17       ],
 
     ];
 
@@ -347,6 +349,12 @@ Class Out extends Nb {
     if ($o['row_count'] and isset($o['rec'])) echo $o['rec'];
     $o['row_count']++;
 
+               # Binary values
+               if (!isset($o['base64_encode_binary'])) $o['base64_encode_binary'] = true;
+               if (!empty($o['base64_encode_binary'])) foreach ($row as $k => $v) {
+                       if (is_scalar($v) and self::is_binary($v)) $row[$k] = base64_encode($v);
+               }
+
     # buffering
     if (!empty($o['align'])) {
        if (!isset($o['sep'])) $o['sep'] = $o['align'];
@@ -602,10 +610,10 @@ Class Out extends Nb {
     $values = [];
 
     foreach (array_values($row) as $k=>$v) {
-                       if (self::is_binary($v)) {
-                               $values[] = $v;
-                               break;
-                       }
+# NB 14.12.17                  if (self::is_binary($v)) {
+# NB 14.12.17                          $values[] = $v;
+# NB 14.12.17                          break;
+# NB 14.12.17                  }
       if (!empty($o['quote'])) $v = $o['quote'] .
         str_replace($o['quote'],$o['quote_escape'].$o['quote'],$v)
       . $o['quote'];