Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with unicode characters #313

Open
diplatis opened this issue Apr 14, 2018 · 1 comment
Open

Issue with unicode characters #313

diplatis opened this issue Apr 14, 2018 · 1 comment

Comments

@diplatis
Copy link

diplatis commented Apr 14, 2018

I've created the following module and the caller id returned contains wrong characters when result is not converted to greeklish ( $run_param['Convert_to_greeklish'] ) (greeklish=greek written in latin characters).
Test phone numbers: 2421026513 , 2421351000 , 2421421510

  • FreePBX: 14.0.2.14

EDIT: The issue also exists with GoogleContacts module, so I suspect there is a wider problem with unicode characters.
https://issues.freepbx.org/browse/FREEPBX-8137

`<?php

class Greece_11888 extends superfecta_base {

public $description, $source_param;
public $version_requirement = "2.11";
public $module_version = "1.10";

public $greek_chars   = array(
	'α','ά','Ά','Α','β','Β','γ', 'Γ', 'δ','Δ','ε','έ','Ε','Έ','ζ','Ζ','η','ή','Η','θ','Θ','ι','ί','ϊ','ΐ','Ι','Ί',
	'κ','Κ','λ','Λ','μ','Μ','ν','Ν','ξ','Ξ','ο','ό','Ο','Ό','π','Π','ρ','Ρ','σ','ς', 
	'Σ','τ','Τ','υ','ύ','Υ','Ύ','φ','Φ','χ','Χ','ψ','Ψ','ω','ώ','Ω','Ώ',' ',"'","'",','
);

public $english_chars = array(
	'a', 'a','A','A','b','B','g','G','d','D','e','e','E','E','z','Z','i','i','I','th','Th', 
	'i','i','i','i','I','I','k','K','l','L','m','M','n','N','x','X','o','o','O','O','p','P',
	'r','R','s','s','S','t','T','u','u','Y','Y','f','F','x','X','ps','PS','o','o','O','O',' ','_','_','_'
);

public function __construct() {
	$this->description = _("This module provides CallerID lookup from Greek 11888 website (www.11888.gr)<br/>Module Version: ".$this->module_version);
	$this->source_param = array(
        'Return_number_if_not_found' => array(
			'description' => 'Enable this setting to have the original number returned if no match is found on the website.<br/><br/><b>NOTICE</b><br/>If this is enabled superfecta cache will store the number as caller id name.',
			'type' => 'checkbox',
			'default' => 'off'
		),
		'Convert_to_greeklish' => array(
			'description' => 'Enable this setting to have the returned name converted to greeklish.',
			'type' => 'checkbox',
			'default' => 'on'
		)
	);
}

function get_caller_id($thenumber, $run_param=array()) {
	
	// Setup defaults
    $caller_id = null;
	$run_param['Return_number_if_not_found'] = isset($run_param['Return_number_if_not_found']) ? $run_param['Return_number_if_not_found'] : NULL;
	$run_param['Convert_to_greeklish'] = isset($run_param['Convert_to_greeklish']) ? $run_param['Convert_to_greeklish'] : NULL;
	
    $this->DebugPrint("Return number if not found = " . $run_param['Return_number_if_not_found']);
	$this->DebugPrint("Convert to greeklish = " . $run_param['Convert_to_greeklish']);
	
    // Strip leading GR country code 0030, +30, 30
    if (substr($thenumber, 0, 3) == '+30') {
        $thenumber=substr($thenumber, -10);
    }
    if (substr($thenumber, 0, 2) == '30') {
        $thenumber=substr($thenumber, -10);
    }
    if (substr($thenumber, 0, 4) == '0030') {
        $thenumber=substr($thenumber, -10);
    }
	
    $this->DebugPrint("Using number: ") . $thenumber;
	
	$url = 'https://www.11888.gr/search/reverse/?phone=' . $thenumber;
	$result = $this->get_url_contents($url);
	$result = json_decode($result, true);
	
	if ( array_key_exists( '0',$result['data']['wp'] ) ) {
		$caller_id = implode(" ", $result['data']['wp']['0']['name']);
	}
	else if( array_key_exists( '0',$result['data']['ps'] ) ) {
		$caller_id = $result['data']['ps']['0']['name'];
	}
	else if( !array_key_exists( '0',$result['data']['wp']) && !array_key_exists( '0',$result['data']['ps']) && !array_key_exists( '0',$result['data']['yp']) ) {
		$url = 'https://api.11888.gr/search-phone/' . $thenumber;
		$result = $this->get_url_contents($url);
		
		preg_match_all('/<div class="details">.*?class="title">(.*?)<\/a>/s', $result, $result);
		if (array_key_exists( '0',$result['1'])){
			$result=strip_tags($result[1][0]);
			$result=trim($result);
			$caller_id = $result;
		}
		else {
			if (!$run_param['Return_number_if_not_found']){
				return null;
			}
			else if ($run_param['Return_number_if_not_found']){
				$caller_id = $thenumber;
			}
		}
	}
	else {
		return null;
	}
	if ($run_param['Convert_to_greeklish']){
		$caller_id  = str_replace($this->greek_chars, $this->english_chars, $caller_id);
	}
    return($caller_id);
}

}`

@nemphys
Copy link

nemphys commented Apr 23, 2018

I've been struggling with this issue, the solution is quite simple (as mentioned in https://issues.freepbx.org/browse/FREEPBX-8137):
comment out "$callerid = $superfecta->stripAccents($callerid);" in Superfecta.class.php and you should be fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants