DiscuzX/upload/source/plugin/manyou/Service/Util.php

211 lines
5.2 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: Util.php 31728 2012-09-25 09:03:42Z zhouxiaobo $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class Cloud_Service_Util {
protected static $_instance;
public static function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function __construct() {
}
public function generateSiteSignUrl($params = array(), $isCamelCase = false, $isReturnArray = false) {
global $_G;
$ts = TIMESTAMP;
$sId = $_G['setting']['my_siteid'];
$sKey = $_G['setting']['my_sitekey'];
$uid = $_G['uid'];
if(!is_array($params)) {
$params = array();
}
unset($params['sig'], $params['ts']);
if ($isCamelCase) {
$params['sId'] = $sId;
$params['sSiteUid'] = $uid;
} else {
$params['s_id'] = $sId;
$params['s_site_uid'] = $uid;
}
ksort($params);
$str = $this->httpBuildQuery($params, '', '&');
$sig = md5(sprintf('%s|%s|%s', $str, $sKey, $ts));
$params['ts'] = $ts;
$params['sig'] = $sig;
if(!$isReturnArray) {
$params = $this->httpBuildQuery($params, '', '&');
}
return $params;
}
public function redirect($url, $code = 302) {
@ob_end_clean();
@ob_start();
$errorChars = array();
for ($i = 0; $i <= 31; $i ++) {
$errorChars[] = chr($i);
}
$url = trim(str_replace($errorChars, '', $url));
if (strpos($url, '/') === 0) {
$url = '/' . ltrim($url, '/');
}
@header('Location: ' . $url, true, $code);
exit;
}
public function generateUniqueId() {
$siteuniqueid = C::t('common_setting')->fetch('siteuniqueid');
if(empty($siteuniqueid) || strlen($siteuniqueid) < 16) {
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$siteuniqueid = 'DX'.$chars[date('y')%60].$chars[date('n')].$chars[date('j')].$chars[date('G')].$chars[date('i')].$chars[date('s')].substr(md5($_G['clientip'].$_G['username'].TIMESTAMP), 0, 4).random(4);
C::t('common_setting')->update('siteuniqueid', $siteuniqueid);
require_once libfile('function/cache');
updatecache('setting');
}
}
public function httpBuildQuery($data, $numeric_prefix='', $arg_separator='', $prefix='') {
$render = array();
if (empty($arg_separator)) {
$arg_separator = @ini_get('arg_separator.output');
empty($arg_separator) && $arg_separator = '&';
}
foreach ((array) $data as $key => $val) {
if (is_array($val) || is_object($val)) {
$_key = empty($prefix) ? "{$key}[%s]" : sprintf($prefix, $key) . "[%s]";
$_render = $this->httpBuildQuery($val, '', $arg_separator, $_key);
if (!empty($_render)) {
$render[] = $_render;
}
} else {
if (is_numeric($key) && empty($prefix)) {
$render[] = urlencode("{$numeric_prefix}{$key}") . "=" . urlencode($val);
} else {
if (!empty($prefix)) {
$_key = sprintf($prefix, $key);
$render[] = urlencode($_key) . "=" . urlencode($val);
} else {
$render[] = urlencode($key) . "=" . urlencode($val);
}
}
}
}
$render = implode($arg_separator, $render);
if (empty($render)) {
$render = '';
}
return $render;
}
public function getApiVersion() {
return '0.6';
}
public function hashHmac($algo, $data, $key, $raw_output = false) {
if (function_exists('hash_hmac')) {
return hash_hmac($algo, $data, $key, $raw_output);
} else {
$algo = strtolower($algo);
$pack = 'H'.strlen(call_user_func($algo, 'test'));
$size = 64;
$opad = str_repeat(chr(0x5C), $size);
$ipad = str_repeat(chr(0x36), $size);
if(strlen($key) > $size) {
$key = str_pad(pack($pack, call_user_func($algo, $key)), $size, chr(0x00));
} else {
$key = str_pad($key, $size, chr(0x00));
}
for ($i = 0; $i < strlen($key) - 1; $i++) {
$opad[$i] = $opad[$i] ^ $key[$i];
$ipad[$i] = $ipad[$i] ^ $key[$i];
}
$output = call_user_func($algo, $opad.pack($pack, call_user_func($algo, $ipad.$data)));
return ($raw_output) ? pack($pack, $output) : $output;
}
}
public function isMobile($status) {
if (getstatus($status, 11) || getstatus($status, 12) || getstatus($status, 13)) {
return true;
}
return false;
}
public function mobileHasSound() {
if (getstatus($status, 13)) {
return true;
}
return false;
}
public function mobileHasPhoto() {
if (getstatus($status, 12) && getstatus($status, 11)) {
return true;
}
return false;
}
public function mobileHasGPS() {
if (getstatus($status, 12)) {
return true;
}
return false;
}
public function isfounder($user) {
global $_G;
$founders = str_replace(' ', '', $_G['config']['admincp']['founder']);
if(!$user['uid'] || $user['groupid'] != 1 || $user['adminid'] != 1) {
return false;
} elseif(empty($founders)) {
return false;
} elseif(strexists(",$founders,", ",$user[uid],")) {
return true;
} elseif(!is_numeric($user['username']) && strexists(",$founders,", ",$user[username],")) {
return true;
} else {
return FALSE;
}
}
}