* Rolf Bensch, rolf(at)bensch-net(dot)de * * Creation: 2016-08-25 jed * Last Update: $Id$ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. ****************************************************************************** */ // capi2text PHP functions // -------------------------------------------------------------------------- // create array with MSNs (-> sel_msn) // -------------------------------------------------------------------------- function getMsnList() { global $msn_replace_file, $call_file; // read $msn_replace_file to array, append missing msn out of $call_file // sort by "desc" asc // array[$msn]['desc'] // ['fcolor'] // ['bcolor'] $arrMsnList = array(); // import $msn_replace_file if ($msn_replace_file <> '' && file_exists($msn_replace_file)) { $mf = fopen($msn_replace_file, 'r') or die("getMsnList: Cannot open file '$msn_replace_file'!"); while (!feof($mf)) { $line = trim(fgets($mf, 500)); if (!preg_match("/^#/", $line) && !preg_match("/^$/", $line)) { // ignore comments and empty lines list($msn, $desc, $fcolor, $bcolor) = array_pad(explode("\t", $line), 4, ''); $fcolor = ($fcolor == "") ? 'black' : $fcolor; $bcolor = ($bcolor == "") ? 'none' : $bcolor; $arrMsnList[$msn]['desc'] = ($desc == '') ? $msn : $desc; $arrMsnList[$msn]['fcolor'] = $fcolor; $arrMsnList[$msn]['bcolor'] = $bcolor; } } } // append MSNs from $call_file if (! file_exists($call_file)) die("getMsnList: '$call_file' not found"); $cf = fopen($call_file, 'r') or die("getMsnList: Cannot open file '$call_file'!"); while (!feof($cf)) { $line = rtrim(fgets($cf, 500)); $fields = explode("\t",$line); if (count($fields) >= 3) { $msn = $fields[3]; if ($msn <> '') { if (! isset($arrMsnList[$msn])) { $arrMsnList[$msn]['desc'] = $msn; $arrMsnList[$msn]['fcolor'] = 'black'; $arrMsnList[$msn]['bcolor'] = 'none'; } } } } // sort MSN list if ($msn_sort_order = 'asc') uasort($arrMsnList, function ($a, $b) { return $a['desc'] > $b['desc']; }); else uasort($arrMsnList, function ($a, $b) { return $a['desc'] < $b['desc']; }); return $arrMsnList; } // -------------------------------------------------------------------------- // grep country flag from directory // -------------------------------------------------------------------------- function find_flag($phonenumber) { global $call_unknown, $default_ccode; if ($phonenumber == $call_unknown) { // unknown caller $fname = './country-unknown.png'; } elseif (file_exists('../num/' . $phonenumber)) { $fname = './num/' . $phonenumber; } elseif (preg_match("/^00/", $phonenumber)) { // international number for ($num = 4; $num >= 1; $num--) { $fname = './png/country-' . substr($phonenumber, 2, $num) . '.png'; if (file_exists(".$fname")) { // file found break; } } } elseif (($default_ccode <> "423") && (!preg_match('/^0[^0]/', $phonenumber))) { // not country Liechtenstein and not starting with 0, internal caller $fname = './internal-call.png'; } else { // national number $fname = './png/country-'.$default_ccode.'.png'; } if (!file_exists(".$fname")) { // use default $fname = './country-unknown.png'; } return $fname; } // -------------------------------------------------------------------------- // grep country abbreviation from file // -------------------------------------------------------------------------- function find_country_abbr($phonenumber) { global $country_code_file, $call_unknown, $default_ccode; // read file and remove all comments $lines = file($country_code_file); $lines = preg_grep('/^#/', $lines, PREG_GREP_INVERT); $country_abbr = ''; if ($phonenumber == $call_unknown) { // unknown caller $country_abbr = '--'; } elseif (preg_match("/^00/", $phonenumber)) { // international number for ($num = 4; $num >= 1; $num--) { // 31#NL#Niederlande $keys = preg_grep('/^'.substr($phonenumber, 2, $num).'#/', $lines); foreach ($keys as $key) { list($ccode, $cabbr, $cname) = preg_split('/#/', str_replace("\n", '', $key), 3); if ($cabbr) { // use first match $country_abbr = $cabbr; break 2; } } } } else { // national number // 49#DE#Deutschland $keys = preg_grep('/^'.$default_ccode.'#/', $lines); foreach ($keys as $key) { list($ccode, $cabbr, $cname) = preg_split('/#/', str_replace("\n", '', $key), 3); if ("$cabbr" != "") { // use first match $country_abbr = "$cabbr"; break; } } } if ($country_abbr == "") { // set default $country_abbr = '--'; } return $country_abbr; } // -------------------------------------------------------------------------- // grep country name from file // -------------------------------------------------------------------------- function find_country_name($phonenumber) { global $country_code_file, $call_unknown, $default_ccode, $call_internal; // read file and remove all comments $lines = file($country_code_file); $lines = preg_grep('/^#/', $lines, PREG_GREP_INVERT); $country_name = ''; if ($phonenumber == $call_unknown) { // unknown caller $country_name = $call_unknown; } elseif (preg_match("/^00/", $phonenumber)) { // international number for ($num = 4; $num >= 1; $num--) { // 31#NL#Niederlande $keys = preg_grep('/^'.substr($phonenumber, 2, $num).'#/', $lines); foreach ( $keys as $key ) { list($ccode, $cabbr, $cname) = preg_split('/#/', str_replace("\n", '', $key), 3); if ($cname) { // use first match $country_name = $cname; break 2; } } } } elseif (($default_ccode <> "423") && (!preg_match('/^0[^0]/', $phonenumber))) { // not starting with 0, internal caller $country_name = $call_internal; } else { // national number // 49#DE#Deutschland $keys = preg_grep('/^'.$default_ccode.'#/', $lines); foreach ($keys as $key) { list($ccode, $cabbr, $cname) = preg_split('/#/', str_replace("\n", '', $key), 3); if ("$cname" != "") { // use first match $country_name = "$cname"; break; } } } if ($country_name == '') { // set default $country_name = $call_unknown; } return $country_name; } // -------------------------------------------------------------------------- // remove TABs from string // -------------------------------------------------------------------------- function remove_tabs($s) { return preg_replace('/\t/', '', $s); } // -------------------------------------------------------------------------- // remove CRs from string // -------------------------------------------------------------------------- function remove_crs($s) { return preg_replace('/\n/', '', $s); } // -------------------------------------------------------------------------- // remove TABs and CRs from string // -------------------------------------------------------------------------- function remove_tabs_and_crs($s) { return remove_crs(remove_tabs($s)); } // ---end of functions------------------------------------------------------- ?>