config = require($config_path); } } /** * aopush_getBalance() */ public function aopush_getBalance() { $data = [ 'balance' => 0, 'currency' => 'RUB', 'limit' => 500, ]; return self::aopush_request('balance', $data); } /** * aopush_getHistory($data=[]) */ public function aopush_getHistory() { $history['stat'][1] = [ 'type' => __('NewPost', 'aopush'), 'send' => 0, 'productive' => 0, ]; $history['stat'][2] = [ 'type' => __('UpdatePost', 'aopush'), 'send' => 0, 'productive' => 0, ]; $history['stat'][3] = [ 'type' => __('Send Mailing list', 'aopush'), 'send' => 0, 'productive' => 0, ]; $history['total'] = [ 'client' => 0, 'send' => 0, 'productive' => 0, ]; if (!empty($_POST['data']['AophHistoryNotifications']['date_start'])) { $date['date_start'] = self::aopush_validateForm('date', $_POST['data']['AophHistoryNotifications']['date_start']); } if (empty($date['date_start'])) { $date['date_start'] = date('Y-m-d H:i:s', strtotime('-1 month')); } if (!empty($_POST['data']['AophHistoryNotifications']['date_end'])) { $date['date_end'] = self::aopush_validateForm('date', $_POST['data']['AophHistoryNotifications']['date_end']); } if (empty($date['date_end'])) { $date['date_end'] = date('Y-m-d H:i:s'); } $request = self::aopush_request('history', $date); if (!empty($request['error'])) { $history['error'] = self::aopush_validateForm('text', $request['message']); } elseif (!empty($request) && is_array($request)) { $request = self::aopush_validateForm('stat', $request); return ['data' => $request, 'date' => $date]; } return ['data' => $history, 'date' => $date]; } /** * aopush_registration($data=[]) */ public function aopush_registration($data=[]) { return self::aopush_request('registration', ['email'=>$data['login'], 'domain'=>$data['domain']]); } /** * aopush_uninstall($post=[]) */ public function aopush_uninstall($data=[]) { return self::aopush_request('uninstall', ['email'=>$data['login'], 'domain'=>$data['domain']]); } /** * aopush_sendpush($post=[]) */ public function aopush_sendpush($post=[]) { if (empty($post)) { return false; } return self::aopush_request('sendpush', $post); } /** * aopush_sendtest($post=[]) */ public function aopush_sendtest($post=[]) { if (empty($post)) { return false; } return self::aopush_request('sendtest', $post); } /** * aopush_getFormat($float) */ public static function aopush_getFormat($int=0, $format=0) { if (empty($int)) { return 0; } if (empty($format)) { return $int; } if ($format=='money') { return @number_format($int, 2, '.', ' '); } elseif ($format=='number') { return @number_format($int, 0, ',', ' '); } elseif ($format=='float') { return @number_format($int, 2, ',', ' '); } elseif ($format=='phone') { $int = preg_replace('/[^0-9]/i', '', $int); return preg_replace('/^[^7]/i', '7', $int); } else { return $int; } } /** * aopush_addError($error) */ public function aopush_addError($error='', $settings=[]) { $error = self::aopush_validateForm('text', $error); if (!empty($error)) { if (empty($settings['error'])) { $settings['error'] = $error.'
'; } else { if (!preg_match('/('.$error.')/i', $settings['error'])) { $settings['error'] .= $error.'
'; } } } return $settings['error']; } /** * getHost() */ public function aopush_getHost() { $host_sources = ['HTTP_X_FORWARDED_HOST', 'HTTP_HOST', 'SERVER_NAME', 'SERVER_ADDR']; $source_transformations = [ 'HTTP_X_FORWARDED_HOST' => function($value) { $elements = explode(',', $value); return trim(end($elements)); } ]; $host = ''; foreach ($host_sources as $source) { if (!empty($host)) { break; } if (empty($_SERVER[$source])) { continue; } $host = $_SERVER[$source]; if (array_key_exists($source, $source_transformations)) { $host = $source_transformations[$source]($host); } } // Remove port number from host $host = preg_replace('/:\d+$/', '', $host); return trim($host); } /** * aopush_getRule() */ public function aopush_getRule() { $rule = [ 'email' => 'email', 'url' => 'url', 'int' => 'int', 'boolean' => 'boolean', 'text' => 'text', 'date' => 'date', 'stat' => 'stat', ]; return $rule; } /** * aopush_validateForm() */ public function aopush_validateForm($index, $str) { $rule = self::aopush_getRule(); foreach ($rule as $key=>$value) { if ($index==$key) { $method = 'aopush_validate'.ucfirst($value); if (!method_exists($this, $method)) { return false; } return $this->$method($str); } } } /** * aopush_validateEmail() */ public function aopush_validateEmail($str='') { if (empty($str)) { return false; } if (filter_var($str, FILTER_VALIDATE_EMAIL)) { return $str; } return false; } /** * aopush_validateInt() */ public function aopush_validateInt($int=0) { return (int) $int; } /** * aopush_validateBoolean() */ public function aopush_validateBoolean($boolean=false) { if ($boolean==='true' || $boolean===true) { return 1; } else { return 0; } } /** * aopush_validateUrl() */ public function aopush_validateUrl($str='') { if (empty($str)) { return false; } if (filter_var($str, FILTER_VALIDATE_URL)) { return $str; } return false; } /** * aopush_validateText() */ public function aopush_validateText($str='') { $str = strip_tags($str); $str = htmlentities($str); return $str; } /** * aopush_validateDate() */ public function aopush_validateDate($date='') { $pattern = '/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/i'; if (preg_match($pattern, $date)) { return $date; } return false; } /** * aopush_validateStat($stat=[]) */ public function aopush_validateStat($stat=[]) { if (empty($stat) || !is_array($stat)) { return false; } foreach ($stat as $a=>$b) { if (is_array($b)) { foreach ($b as $c=>$d) { if (is_array($d)) { foreach ($d as $e=>$f) { if (!is_array($f)) { $stat[$a][$c][$e] = self::aopush_validateForm('int', $f); } } } else { $stat[$a][$c] = self::aopush_validateForm('int', $d); } } } else { $stat[$a] = self::aopush_validateForm('int', $b); } } return $stat; } /** * aopush_request() */ private function aopush_request($method='', $data=[]) { if (empty($method) || empty($data)) { return false; } $hash = !empty(get_option('aoph_pushsender_hash')) ? get_option('aoph_pushsender_hash') : self::aopush_getActivateHash($data['email']); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://aoserver.ru/resurces/push/'.$method.'?'.$hash); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 50); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $answer = curl_exec($ch); $array = json_decode($answer, true); if (empty($array) || !is_array($array)) { return ['error'=>1, 'message'=>'Incorrect data', 'code'=>100]; } return $array; } /** * aopush_getActivateHash($email) */ private function aopush_getActivateHash($email='') { if (empty($email)) { return false; } $domain = self::aopush_getHereDomain(); if (empty($domain)) { return false; } $ip = self::aopush_getHereIP(); if (empty($ip)) { return false; } return hash_hmac('sha256', $domain.$email, $ip); } /** * aopush_getHereIP() */ private function aopush_getHereIP() { $host= gethostname(); return gethostbyname($host); } /** * aopush_getHereDomain() */ private function aopush_getHereDomain() { $server_name = self::aopush_getHost(); $server_name = preg_replace('/^(www\.)/i', '', $server_name); return !empty(get_option('aoph_pushsender_domain')) ? get_option('aoph_pushsender_domain') : $server_name; } /** * aoph($className=__CLASS__) */ public static function aoph($className=__CLASS__) { return new $className(); } }