Nomi Nomi - 19 days ago 6
PHP Question

Codeignitor .Init function is not allowed

I am working in codeignitor project.Because of some of its requirements(send push notification to mobile devices) i had to use an external library which is probably written in native PHP .When i run the whole code after configuring it it gives me
"Init function is not allowed. " That responce is coming from the constructor of the Pushnotification.php File.
My Code

PushNotification.php

<?php
// Server file

class PushNotifications {


// (Android)API access key from Google API's Console.
private static $API_ACCESS_KEY = '';


// (iOS) Private key's passphrase.
private static $passphrase = '';


// (Windows Phone 8) The name of our push channel.
private static $channelName = "";

// Change the above three vriables as per your app.

public function __construct() {
exit('Init function is not allowed');
}

// Sends Push notification for Android users
public function android($data, $reg_id) {
$url = 'https://android.googleapis.com/gcm/send';
$message = array(
'title' => $data['mtitle'],
'message' => $data['mdesc'],
'subtitle' => '',
'tickerText' => '',
'msgcnt' => 1,
'vibrate' => 1
);

$headers = array(
'Authorization: key=' .self::$API_ACCESS_KEY,
'Content-Type: application/json'
);

$fields = array(
'registration_ids' => array($reg_id),
'data' => $message,
);

return $this->useCurl($url, $headers, json_encode($fields));
}

// Sends Push's toast notification for Windows Phone 8 users
public function WP($data, $uri) {
$delay = 2;
$msg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
"<wp:Notification xmlns:wp=\"WPNotification\">" .
"<wp:Toast>" .
"<wp:Text1>".htmlspecialchars($data['mtitle'])."</wp:Text1>" .
"<wp:Text2>".htmlspecialchars($data['mdesc'])."</wp:Text2>" .
"</wp:Toast>" .
"</wp:Notification>";

$sendedheaders = array(
'Content-Type: text/xml',
'Accept: application/*',
'X-WindowsPhone-Target: toast',
"X-NotificationClass: $delay"
);

$response = $this->useCurl($uri, $sendedheaders, $msg);

$result = array();
foreach(explode("\n", $response) as $line) {
$tab = explode(":", $line, 2);
if (count($tab) == 2)
$result[$tab[0]] = trim($tab[1]);
}

return $result;
}

// Sends Push notification for iOS users
public function iOS($data, $devicetoken) {

$deviceToken = $devicetoken;

$ctx = stream_context_create();
// ck.pem is your certificate file
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);

// Create the payload body
$body['aps'] = array(
'alert' => array(
'title' => $data['mtitle'],
'body' => $data['mdesc'],
),
'sound' => 'default'
);

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

// Close the connection to the server
fclose($fp);

if (!$result)
return 'Message not delivered' . PHP_EOL;
else
return 'Message successfully delivered' . PHP_EOL;

}

// Curl
private function useCurl(&$model, $url, $headers, $fields = null) {
// Open connection
$ch = curl_init();
if ($url) {
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if ($fields) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}

// Execute post
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}

// Close connection
curl_close($ch);

return $result;
}
}

}
?>


TestNotification.php

public function Testnotification()
{

$this->load->library('PushNotifications');

// Message payload

$msg_payload = array (
'mtitle' => 'Test push notification title',
'mdesc' => 'Test push notification body',
);

// For Android
$regId = 'APA91bHdOmMHiRo5jJRM1jvxmGqhComcpVFDqBcPfLVvaieHeFI9WVrwoDeVVD1nPZ82rV2DxcyVv-oMMl5CJPhVXnLrzKiacR99eQ_irrYogy7typHQDb5sg4NB8zn6rFpiBuikNuwDQzr-2abV6Gl_VWDZlJOf4w';


// For iOS
$deviceToken = 'FE66489F304DC75B8D6E8200DFF8A456E8DAEACEC428B427E9518741C92C6660';


// For WP8
$uri = 'http://s.notify.live.net/u/1/sin/HmQAAAD1XJMXfQ8SR0b580NcxIoD6G7hIYP9oHvjjpMC2etA7U_xy_xtSAh8tWx7Dul2AZlHqoYzsSQ8jQRQ-pQLAtKW/d2luZG93c3Bob25lZGVmYXVsdA/EKTs2gmt5BG_GB8lKdN_Rg/WuhpYBv02fAmB7tjUfF7DG9aUL4';

// Replace the above variable values


PushNotifications::android($msg_payload, $regId);

PushNotifications::WP8($msg_payload, $uri);

PushNotifications::iOS($msg_payload, $deviceToken);

}


Thank you for your help .

Answer

Just remove or comment the exit line at the PushNotification contructor:

PushNotification.php

<?php 

class PushNotifications {

    public function __construct() {
        //exit('Init function is not allowed');
    }
...