<?php

class MyDB extends SQLite3
{
    function __construct()
    {
        $this->open('/tmp/phone.db');
    }

}

$db = new MyDB();
$q = 'SELECT u.id, g.group_name, p.poss_name, u.first_name, u.second_name, u.family_name, u.numbers
FROM phonedir as dir
LEFT JOIN (select u1.id, u1.first_name, u1.second_name, u1.family_name, group_concat(ph.number, \';\') numbers
from users as u1
left join phones as ph on ph.user_id_id = u1.id
group by u1.id) as u on u.id = dir.user_id_id
left join possitions as p on poss_id_id = p.id
left join "group" as g on group_id_id = g.id;';

$result = $db->query($q);

$count = 0;
$phonedir = [];

while ($row = $result->fetchArray()) {
    $count = $count + 1;
    $phonedir[$row['group_name']][$row['id']] =
	array("name" => $row['first_name'],
	      "family" => $row['family_name'],
	      "second" => $row['second_name'],
	      "poss" => $row['poss_name'],
	      "numbers" => explode(';', $row['numbers']));
}

$ldaprdn  = "cn=admin,dc=mvtel,dc=local";     // ldap rdn or dn
$ldappass = 'mis5093929_ha';  // associated password
/* echo var_dump($phonedir); */
$ds = ldap_connect("192.168.15.16");  // must be a valid LDAP server!
echo "connect result is " . var_dump($ds) . "<br />";

$info = array();

if ($ds) {

    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
    // binding to ldap server
    $ldapbind = ldap_bind($ds, $ldaprdn, $ldappass);

    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...";
	$dn = 'dc=mvtel,dc=local';
	$filter = "(|(objectClass=inetOrgPerson))";
	$justthese = array("ou", "sn", "givenname", "mobile");
	
	/* $sr = ldap_search($ds, $dn, $filter, $justthese);
	   $info = ldap_get_entries($ds, $sr);
	   
	   foreach ($info as $key => $val) {
	   echo (string)$val['dn'];
	   echo $val['givenname'][0] . " " . $val['sn'][0];
	   if ($val['mobile']) {
	   foreach ($val['mobile'] as $mobile) {
	   echo $mobile ." ";
	   }
	   }
	   echo "<br>";
	   } */

	/* $entr["objectclass"][0] = "top"; */
	$entr["objectclass"][0] = "inetOrgPerson";
	$entr['ou'] = "asdasd";
	$cn = "qweqwe qweqlkwjelkqjwe";
	$entr['cn'] = "qweqwe qweqlkwjelkqjwe";
	$entr['sn'] = "qweqwe ";
	$r = ldap_add($ds, "cn=$cn, ou=addressbook, dc=mvtel, dc=local", $entr);

	/* echo var_dump($r); */
	/* echo "Search result is " . var_dump($info) . "<br />"; */
	
    } else {
        echo "LDAP bind failed...";
    }

}

echo "<h3>Всего записей {$count}</h3>";
echo "<input type='button' value='export'></input>";

print "<table border='true'>";
foreach ($phonedir as $key => $val) {
    $entr = array();
    $entr['objectclass'][0] = "top";
    $entr["objectclass"][1] = "inetOrgPerson";
    $entr["ou"] = $key;

    echo "<tr>";
    echo "<td colspan='4'>" . $key . "</td>";
    echo "</tr>";
    foreach ($val as $key1 => $val1) {
	echo "<tr>";
	echo "<td>" . $val1['family'] . "</td>";
	echo "<td>" . $val1['name'] . "</td>";
	echo "<td>" . $val1['second'] . "</td>";
	echo "<td>" . $val1['poss'] . "</td>";
	if (isset($val1['numbers'])) {
	    for ($i = 0; $i < count($val1['numbers']); $i++) {
		echo "<td>" . $val1['numbers'][$i] . "</td>";
	    }
	} else {
	    echo "<td></td>";
	}
	echo "</tr>";

	$cn = $val1['family'] . " " . $val1['name'] . " " . $val1['second'];
	$entr["cn"] = $cn;
	$entr["sn"] = $val1['family'];
	$entr["employeeType"] = $val1['poss'];
	unset($entr['mobile']);
	if (count($val1['numbers']) > 0) {
	    /* $entr['mobile'] = array(); */
	    for ($i = 0; $i < count($val1['numbers']); $i++) {
		if ($val1['numbers'][$i]) {
		    $entr["mobile"][$i] = $val1['numbers'][$i];
		}
	    }
	}

	$r = ldap_add($ds, "cn=$cn, ou=addressbook, dc=mvtel, dc=local", $entr);

	if (!$r) {
	    /* var_dump($entr); */
	}
    }
}

print "</table>";

ldap_close($ds);


?>
