$bvar) { if (isset($a[$val])) { if ($a[$val] == $bvar) unset($c[$val]); else { switch ($val) { case 'adr' : if (!($c['adr'] = diff_user_addresses($a[$val], $bvar, $view))) unset($c['adr']); break; case 'adr_pro' : if (!($c['adr_pro'] = diff_user_pros($a[$val], $bvar, $view))) unset($c['adr_pro']); break; case 'tels' : if (!($c['tels'] = diff_user_tels($a[$val], $bvar, $view))) unset($c['tels']); break; } } } } // don't modify freetext if you don't have the right if (isset($b['freetext_pub']) && !has_user_right($b['freetext_pub'], $view) && isset($c['freetext'])) unset($c['freetext']); if (!count($c)) return false; return $c; } function same_tel(&$a, &$b) { $numbera = format_phone_number((string) $a); $numberb = format_phone_number((string) $b); return $numbera === $numberb; } function same_address(&$a, &$b) { return (same_field($a['adr1'],$b['adr1'])) && (same_field($a['adr2'],$b['adr2'])) && (same_field($a['adr3'],$b['adr3'])) && (same_field($a['postcode'],$b['postcode'])) && (same_field($a['city'],$b['city'])) && (same_field($a['countrytxt'],$b['countrytxt'])) && true; } function same_pro(&$a, &$b) { return (same_field($a['entreprise'],$b['entreprise'])) && (same_field($a['fonction'],$b['fonction'])) && true; } function same_field(&$a, &$b) { if ($a == $b) return true; if (is_array($a)) { if (!is_array($b) || count($a) != count($b)) return false; foreach ($a as $val => $avar) if (!isset($b[$val]) || !same_field($avar, $b[$val])) return false; return true; } elseif (is_string($a)) return (strtoupper($a) == strtoupper($b)); } function diff_user_tel(&$a, &$b) { $c = $a; if (isset($b['tel_pub']) && isset($a['tel_pub']) && has_user_right($b['tel_pub'], $a['tel_pub'])) $c['tel_pub'] = $b['tel_pub']; foreach ($b as $val => $bvar) { if (isset($a[$val])) { if ($a[$val] == $bvar) unset($c[$val]); } } if (!count($c)) return false; $c['telid'] = $a['telid']; return $c; } function diff_user_tels(&$a, &$b) { $c = $a; $telids_b = array(); foreach ($b as $i => $telb) $telids_b[$telb['telid']] = $i; foreach ($a as $j => $tela) { if (isset($tela['telid'])) { // if b has a tel with the same telid, compute diff if (isset($telids_b[$tela['telid']])) { if (!($c[$j] = diff_user_tel($tela, $b[$telids_b[$tela['adrid']]]))) { unset($c[$j]); } unset($telids_b[$tela['telid']]); } } else { // try to find a match in b foreach ($b as $i => $telb) { if (same_tel($tela['tel'], $telb['tel'])) { $tela['telid'] = $telb['telid']; if (!($c[$j] = diff_user_tel($tela, $telb))) { unset($c[$j]); } unset($telids_b[$tela['telid']]); break; } } } } foreach ($telids_b as $telidb => $i) $c[] = array('telid' => $telidb, 'remove' => 1); return $c; } function diff_user_address($a, $b) { if (isset($b['pub']) && isset($a['pub']) && has_user_right($b['pub'], $a['pub'])) $a['pub'] = $b['pub']; if (isset($b['tels'])) { if (isset($a['tels'])) { $avar = $a['tels']; } else { $avar = array(); } $ctels = diff_user_tels($avar, $b['tels']); if (!count($ctels)) { $b['tels'] = $avar; } else { $a['tels'] = $ctels; } } foreach ($a as $val => $avar) { if (!isset($b[$val]) || !same_field($avar,$b[$val])) { return $a; } } return false; } // $b need to use adrids function diff_user_addresses(&$a, &$b) { $c = $a; $adrids_b = array(); foreach ($b as $i => $adrb) $adrids_b[$adrb['adrid']] = $i; foreach ($a as $j => $adra) { if (isset($adra['adrid'])) { // if b has an address with the same adrid, compute diff if (isset($adrids_b[$adra['adrid']])) { if (!($c[$j] = diff_user_address($adra, $b[$adrids_b[$adra['adrid']]]))) unset($c[$j]); unset($adrids_b[$adra['adrid']]); } } else { // try to find a match in b foreach ($b as $i => $adrb) { if (same_address($adra, $adrb)) { $adra['adrid'] = $adrb['adrid']; if (!($c[$j] = diff_user_address($adra, $adrb))) unset($c[$j]); if ($c[$j]) $c[$j]['adrid'] = $adra['adrid']; unset($adrids_b[$adra['adrid']]); break; } } } } foreach ($adrids_b as $adridb => $i) $c[] = array('adrid' => $adridb, 'remove' => 1); if (!count($c)) return false; return $c; } function diff_user_pro($a, &$b, $view = 'private') { if (isset($b['pub']) && isset($a['pub']) && has_user_right($b['pub'], $a['pub'])) $a['pub'] = $b['pub']; if (isset($b['adr_pub']) && !has_user_right($b['adr_pub'], $view)) { unset($a['adr1']); unset($a['adr2']); unset($a['adr3']); unset($a['postcode']); unset($a['city']); unset($a['countrytxt']); unset($a['region']); } if (isset($b['adr_pub']) && isset($a['adr_pub']) && has_user_right($b['adr_pub'], $a['adr_pub'])) $a['adr_pub'] = $b['adr_pub']; if (isset($b['tels'])) { if (isset($a['tels'])) $avar = $a['tels']; else $avar = array(); $ctels = diff_user_tels($avar, $b['tels']); if (!count($ctels)) { $b['tels'] = $avar; } else $a['tels'] = $ctels; } if (isset($b['email_pub']) && !has_user_right($b['email_pub'], $view)) unset($a['email']); if (isset($b['email_pub']) && isset($a['email_pub']) && has_user_right($b['email_pub'], $a['email_pub'])) $a['email_pub'] = $b['email_pub']; foreach ($a as $val => $avar) { if (($avar && !isset($b[$val])) || !same_field($avar,$b[$val])) { return $a; } } return false; } // $b need to use entrids function diff_user_pros(&$a, &$b, $view = 'private') { $c = $a; $entrids_b = array(); foreach ($b as $i => $prob) $entrids_b[$prob['entrid']] = $i; foreach ($a as $j => $proa) { if (isset($proa['entrid'])) { // if b has an address with the same adrid, compute diff if (isset($entrids_b[$proa['entrid']])) { if (!($c[$j] = diff_user_pro($proa, $b[$entrids_b[$proa['entrid']]], $view))) unset($c[$j]); unset($entrids_b[$proa['entrid']]); } } else { // try to find a match in b foreach ($b as $i => $prob) { if (same_pro($proa, $prob)) { $proa['entrid'] = $prob['entrid']; if (!($c[$j] = diff_user_pro($proa, $prob, $view))) unset($c[$j]); if ($c[$j]) $c[$j]['entrid'] = $proa['entrid']; unset($entrids_b[$proa['entrid']]); break; } } } } foreach ($entrids_b as $entridb => $i) $c[] = array('entrid' => $entridb, 'remove' => 1); if (!count($c)) return false; return $c; } function format_phone_number($tel) { $tel = trim($tel); if (substr($tel, 0, 3) === '(0)') { $tel = '33' . $tel; } $tel = preg_replace('/\(0\)/', '', $tel); $tel = preg_replace('/[^0-9]/', '', $tel); if (substr($tel, 0, 2) === '00') { $tel = substr($tel, 2); } else if(substr($tel, 0, 1) === '0') { $tel = '33' . substr($tel, 1); } return $tel; } function format_display_number($tel, &$error, $format = array('format'=>'','phoneprf'=>'')) { $error = false; $ret = ''; $tel_length = strlen($tel); if((!isset($format['phoneprf'])) || ($format['phoneprf'] == '')) { $res = XDB::query("SELECT phoneprf, phoneformat AS format FROM geoloc_pays WHERE phoneprf = {?} OR phoneprf = {?} OR phoneprf = {?} LIMIT 1", substr($tel, 0, 1), substr($tel, 0, 2), substr($tel, 0, 3)); if ($res->numRows() == 0) { $error = true; return '+' . $tel; } $format = $res->fetchOneAssoc(); } if ($format['format'] == '') { $format['format'] = '+p'; } $j = 0; $i = strlen($format['phoneprf']); $length_format = strlen($format['format']); while (($i < $tel_length) && ($j < $length_format)){ if ($format['format'][$j] == '#'){ $ret .= $tel[$i]; $i++; } else if ($format['format'][$j] == 'p') { $ret .= $format['phoneprf']; } else { $ret .= $format['format'][$j]; } $j++; } for (; $i < $tel_length - 1; $i += 2) { $ret .= ' ' . substr($tel, $i, 2); } //appends last alone number to the last block if ($i < $tel_length) { $ret .= substr($tel, $i); } return $ret; } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>