<?php
/* ****************************************************************************
 * /usr/share/doc/capi2text/incl/capi2text-functions.php
 *
 * Copyright (c) 2009-@@YEAR@@  Juergen Edner, juergen(at)eisfair(dot)org>
 *                          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, $msn_sort_order, $ret;

    // 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, '');
                $x_msn 	= str_replace("*", "_", $msn);

                $fcolor = ($fcolor == "") ? 'black' : $fcolor;
                $bcolor = ($bcolor == "") ? 'none' : $bcolor;
                $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'!");

    while (!feof($cf)) {
        $line   = rtrim(fgets($cf, 500));
        $fields = explode("\t",$line);

        if (count($fields) >= 3) {
            $msn = $fields[3];
				$x_msn 	= str_replace("*", "_", $msn);
            if ($x_msn <> '') {
                if (! isset($arrMsnList[$x_msn])) {
                    $arrMsnList[$x_msn]['desc']   = $msn;

                    $arrMsnList[$x_msn]['fcolor'] = 'black';
                    $arrMsnList[$x_msn]['bcolor'] = 'none';
                }
            }
        }
    }

    // sort MSN list

    $ret["MSN-Sort"]= $msn_sort_order;
    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));
}


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)) { 	// 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-------------------------------------------------------
?>