* Rolf Bensch, rolf(at)bensch-net(dot)de * * Creation: 2016-08-25 jed * Last Update: $Id: capi2text-functions.php 44716 2017-01-22 17:17:43Z jed $ * * 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, $msn_sort_order, $ret, $call_unknown, $default_acode; // 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)); // ignore comments and empty lines if (!preg_match("/^#/", $line) && !preg_match("/^$/", $line)) { //list($msn, $desc, $fcolor, $bcolor) = array_pad(explode("\t", $line), 4, ''); $arrLine = array_pad(explode("\t", $line), 4, ''); $msn = $arrLine[0]; $x_msn = str_replace("*", "_", $msn); $desc = $arrLine[1]; $fcolor = ($arrLine[2] == "") ? 'black' : $arrLine[2]; $bcolor = ($arrLine[3] == "") ? 'transparent' : $arrLine[3]; $arrMsnList[$x_msn]['msn'] = $msn; $arrMsnList[$x_msn]['desc'] = ($desc == '') ? $msn : $desc; $arrMsnList[$x_msn]['fcolor'] = $fcolor; $arrMsnList[$x_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'!"); $lastcall = "empty"; $lastfrom = "empty"; $cntLine = 0; $ret['debug'] = ""; while (!feof($cf)) { $line = rtrim(fgets($cf, 500)); $fields = array_pad(explode("\t",$line),8,''); $direction = ($fields[6] <> "") ? $fields[6] : "IN"; $index = ($direction == "IN") ? 3 : 2; $msn = $fields[$index]; $x_msn = str_replace("*", "_", $msn); $thiscall = $fields[0]."_".$fields[1]."_".$fields[7]; $thisfrom = $fields[2]; if ($x_msn <> '' && $thiscall <> $lastcall && substr($msn,0,1) != "0" && $msn != $call_unknown) { if ("0".$default_acode.$thisfrom != $lastfrom) { if (! isset($arrMsnList[$x_msn])) { $arrMsnList[$x_msn]['msn'] = $msn; $arrMsnList[$x_msn]['desc'] = $msn; $arrMsnList[$x_msn]['fcolor'] = 'black'; $arrMsnList[$x_msn]['bcolor'] = 'none'; } } } $lastcall = $thiscall; $lastfrom = $thisfrom; } // sort MSN list if ($msn_sort_order == 'asc') { uasort($arrMsnList, function ($a, $b) { if ($a['desc'] == $b['desc']) return 0; return ($a['desc'] > $b['desc']) ? -1 : 1; }); } else { uasort($arrMsnList, function ($a, $b) { if ($a['desc'] == $b['desc']) return 0; return ($a['desc'] < $b['desc']) ? -1 : 1; }); } return $arrMsnList; } // -------------------------------------------------------------------------- // grep country flag from directory // -------------------------------------------------------------------------- function find_flag($phonenumber) { global $call_unknown, $default_ccode; if ($phonenumber == $call_unknown) { // unknown caller $fname = './pics/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 = './pics/internal-call.png'; } else { // national number $fname = './png/country-'.$default_ccode.'.png'; } if (!file_exists(".$fname")) { // use default $fname = './pics/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); $arrCountry = preg_split('/#/', str_replace("\n", '', $key), 3); $ccode = $arrCountry[0]; $cabbr = $arrCountry[1]; $cname = $arrCountry[2]; 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); $arrCountry = preg_split('/#/', str_replace("\n", '', $key), 3); $ccode = $arrCountry[0]; $cabbr = $arrCountry[1]; $cname = $arrCountry[2]; 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); $arrCountry = preg_split('/#/', str_replace("\n", '', $key), 3); $ccode = $arrCountry[0]; $cabbr = $arrCountry[1]; $cname = $arrCountry[2]; 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); $arrCountry = preg_split('/#/', str_replace("\n", '', $key), 3); $ccode = $arrCountry[0]; $cabbr = $arrCountry[1]; $cname = $arrCountry[2]; 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)); } function color_name_to_hex($color_name) { // standard 147 HTML color names $colors = array( 'aliceblue'=>'F0F8FF', 'antiquewhite'=>'FAEBD7', 'aqua'=>'00FFFF', 'aquamarine'=>'7FFFD4', 'azure'=>'F0FFFF', 'beige'=>'F5F5DC', 'bisque'=>'FFE4C4', 'black'=>'000000', 'blanchedalmond '=>'FFEBCD', 'blue'=>'0000FF', 'blueviolet'=>'8A2BE2', 'brown'=>'A52A2A', 'burlywood'=>'DEB887', 'cadetblue'=>'5F9EA0', 'chartreuse'=>'7FFF00', 'chocolate'=>'D2691E', 'coral'=>'FF7F50', 'cornflowerblue'=>'6495ED', 'cornsilk'=>'FFF8DC', 'crimson'=>'DC143C', 'cyan'=>'00FFFF', 'darkblue'=>'00008B', 'darkcyan'=>'008B8B', 'darkgoldenrod'=>'B8860B', 'darkgray'=>'A9A9A9', 'darkgreen'=>'006400', 'darkgrey'=>'A9A9A9', 'darkkhaki'=>'BDB76B', 'darkmagenta'=>'8B008B', 'darkolivegreen'=>'556B2F', 'darkorange'=>'FF8C00', 'darkorchid'=>'9932CC', 'darkred'=>'8B0000', 'darksalmon'=>'E9967A', 'darkseagreen'=>'8FBC8F', 'darkslateblue'=>'483D8B', 'darkslategray'=>'2F4F4F', 'darkslategrey'=>'2F4F4F', 'darkturquoise'=>'00CED1', 'darkviolet'=>'9400D3', 'deeppink'=>'FF1493', 'deepskyblue'=>'00BFFF', 'dimgray'=>'696969', 'dimgrey'=>'696969', 'dodgerblue'=>'1E90FF', 'firebrick'=>'B22222', 'floralwhite'=>'FFFAF0', 'forestgreen'=>'228B22', 'fuchsia'=>'FF00FF', 'gainsboro'=>'DCDCDC', 'ghostwhite'=>'F8F8FF', 'gold'=>'FFD700', 'goldenrod'=>'DAA520', 'gray'=>'808080', 'green'=>'008000', 'greenyellow'=>'ADFF2F', 'grey'=>'808080', 'honeydew'=>'F0FFF0', 'hotpink'=>'FF69B4', 'indianred'=>'CD5C5C', 'indigo'=>'4B0082', 'ivory'=>'FFFFF0', 'khaki'=>'F0E68C', 'lavender'=>'E6E6FA', 'lavenderblush'=>'FFF0F5', 'lawngreen'=>'7CFC00', 'lemonchiffon'=>'FFFACD', 'lightblue'=>'ADD8E6', 'lightcoral'=>'F08080', 'lightcyan'=>'E0FFFF', 'lightgoldenrodyellow'=>'FAFAD2', 'lightgray'=>'D3D3D3', 'lightgreen'=>'90EE90', 'lightgrey'=>'D3D3D3', 'lightpink'=>'FFB6C1', 'lightsalmon'=>'FFA07A', 'lightseagreen'=>'20B2AA', 'lightskyblue'=>'87CEFA', 'lightslategray'=>'778899', 'lightslategrey'=>'778899', 'lightsteelblue'=>'B0C4DE', 'lightyellow'=>'FFFFE0', 'lime'=>'00FF00', 'limegreen'=>'32CD32', 'linen'=>'FAF0E6', 'magenta'=>'FF00FF', 'maroon'=>'800000', 'mediumaquamarine'=>'66CDAA', 'mediumblue'=>'0000CD', 'mediumorchid'=>'BA55D3', 'mediumpurple'=>'9370D0', 'mediumseagreen'=>'3CB371', 'mediumslateblue'=>'7B68EE', 'mediumspringgreen'=>'00FA9A', 'mediumturquoise'=>'48D1CC', 'mediumvioletred'=>'C71585', 'midnightblue'=>'191970', 'mintcream'=>'F5FFFA', 'mistyrose'=>'FFE4E1', 'moccasin'=>'FFE4B5', 'navajowhite'=>'FFDEAD', 'navy'=>'000080', 'oldlace'=>'FDF5E6', 'olive'=>'808000', 'olivedrab'=>'6B8E23', 'orange'=>'FFA500', 'orangered'=>'FF4500', 'orchid'=>'DA70D6', 'palegoldenrod'=>'EEE8AA', 'palegreen'=>'98FB98', 'paleturquoise'=>'AFEEEE', 'palevioletred'=>'DB7093', 'papayawhip'=>'FFEFD5', 'peachpuff'=>'FFDAB9', 'peru'=>'CD853F', 'pink'=>'FFC0CB', 'plum'=>'DDA0DD', 'powderblue'=>'B0E0E6', 'purple'=>'800080', 'red'=>'FF0000', 'rosybrown'=>'BC8F8F', 'royalblue'=>'4169E1', 'saddlebrown'=>'8B4513', 'salmon'=>'FA8072', 'sandybrown'=>'F4A460', 'seagreen'=>'2E8B57', 'seashell'=>'FFF5EE', 'sienna'=>'A0522D', 'silver'=>'C0C0C0', 'skyblue'=>'87CEEB', 'slateblue'=>'6A5ACD', 'slategray'=>'708090', 'slategrey'=>'708090', 'snow'=>'FFFAFA', 'springgreen'=>'00FF7F', 'steelblue'=>'4682B4', 'tan'=>'D2B48C', 'teal'=>'008080', 'thistle'=>'D8BFD8', 'tomato'=>'FF6347', 'turquoise'=>'40E0D0', 'violet'=>'EE82EE', 'wheat'=>'F5DEB3', 'white'=>'FFFFFF', 'whitesmoke'=>'F5F5F5', 'yellow'=>'FFFF00', 'yellowgreen'=>'9ACD32'); $color_name = strtolower($color_name); if(preg_match('/^#[a-f0-9]{6}$/i', $color_name)) { // Check for a hex color string '#c1c2b4' return($color_name); } else if(preg_match('/^[a-f0-9]{6}$/i', $color_name)) { // Check for a hex color string without hash 'c1c2b4' return('#' . $color_name); } else if (isset($colors[$color_name])) { return ('#' . $colors[$color_name]); } else { return ($color_name); } } // ---end of functions------------------------------------------------------- ?>