270 lines
9.8 KiB
PHP
270 lines
9.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
[UCenter] (C)2001-2099 Comsenz Inc.
|
|
This is NOT a freeware, use is subject to license terms
|
|
|
|
$Id: app.php 1165 2014-10-31 06:58:43Z hypowang $
|
|
*/
|
|
|
|
!defined('IN_UC') && exit('Access Denied');
|
|
|
|
class control extends adminbase {
|
|
|
|
function __construct() {
|
|
$this->control();
|
|
}
|
|
|
|
function control() {
|
|
parent::__construct();
|
|
$this->check_priv();
|
|
if(!$this->user['isfounder'] && !$this->user['allowadminapp']) {
|
|
$this->message('no_permission_for_this_module');
|
|
}
|
|
$this->load('app');
|
|
$this->load('misc');
|
|
}
|
|
|
|
function onls() {
|
|
$status = $affectedrows = 0;
|
|
if($this->submitcheck() && !empty($_POST['delete'])) {
|
|
$affectedrows += $_ENV['app']->delete_apps($_POST['delete']);
|
|
foreach($_POST['delete'] as $k => $appid) {
|
|
$_ENV['app']->alter_app_table($appid, 'REMOVE');
|
|
unset($_POST['name'][$k]);
|
|
}
|
|
$this->load('cache');
|
|
$_ENV['cache']->updatedata();
|
|
$this->writelog('app_delete', 'appid='.implode(',', $_POST['delete']));
|
|
$status = 2;
|
|
|
|
$this->_add_note_for_app();
|
|
}
|
|
|
|
$a = getgpc('a');
|
|
$applist = $_ENV['app']->get_apps();
|
|
$this->view->assign('status', $status);
|
|
$this->view->assign('a', $a);
|
|
$this->view->assign('applist', $applist);
|
|
|
|
$this->view->display('admin_app');
|
|
}
|
|
|
|
function onadd() {
|
|
if(!$this->submitcheck()) {
|
|
$md5ucfounderpw = md5(UC_FOUNDERPW);
|
|
$this->view->assign('md5ucfounderpw', $md5ucfounderpw);
|
|
|
|
$a = getgpc('a');
|
|
$this->view->assign('a', $a);
|
|
$typelist = array('DISCUZX'=>'DiscuzX','UCHOME'=>'UCenter Home','XSPACE'=>'X-Space','DISCUZ'=>'Discuz!','SUPESITE'=>'SupeSite','SUPEV'=>'SupeV','ECSHOP'=>'ECShop','ECMALL'=>'ECMall','OTHER'=>$this->lang['other']);
|
|
$this->view->assign('typelist', $typelist);
|
|
$this->view->display('admin_app');
|
|
} else {
|
|
$type = getgpc('type', 'P');
|
|
$name = getgpc('name', 'P');
|
|
$url = getgpc('url', 'P');
|
|
$ip = getgpc('ip', 'P');
|
|
$viewprourl = getgpc('viewprourl', 'P');
|
|
$authkey = getgpc('authkey', 'P');
|
|
$authkey = $this->authcode($authkey, 'ENCODE', UC_MYKEY);
|
|
$synlogin = getgpc('synlogin', 'P');
|
|
$recvnote = getgpc('recvnote', 'P');
|
|
$apifilename = trim(getgpc('apifilename', 'P'));
|
|
|
|
$tagtemplates = array();
|
|
$tagtemplates['template'] = getgpc('tagtemplates', 'P');
|
|
$tagfields = explode("\n", getgpc('tagfields', 'P'));
|
|
foreach($tagfields as $field) {
|
|
$field = trim($field);
|
|
list($k, $v) = explode(',', $field);
|
|
if($k) {
|
|
$tagtemplates['fields'][$k] = $v;
|
|
}
|
|
}
|
|
$tagtemplates = $this->serialize($tagtemplates, 1);
|
|
|
|
if(!$_ENV['misc']->check_url($_POST['url'])) {
|
|
$this->message('app_add_url_invalid', 'BACK');
|
|
}
|
|
if(!empty($_POST['ip']) && !$_ENV['misc']->check_ip($_POST['ip'])) {
|
|
$this->message('app_add_ip_invalid', 'BACK');
|
|
}
|
|
$app = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."applications WHERE name='$name'");
|
|
if($app) {
|
|
$this->message('app_add_name_invalid', 'BACK');
|
|
} else {
|
|
$extra = serialize(array('apppath'=> getgpc('apppath', 'P')));
|
|
$this->db->query("INSERT INTO ".UC_DBTABLEPRE."applications SET name='$name', url='$url', ip='$ip',
|
|
viewprourl='$viewprourl', apifilename='$apifilename', authkey='$authkey', synlogin='$synlogin',
|
|
type='$type', recvnote='$recvnote', extra='$extra',
|
|
tagtemplates='$tagtemplates'");
|
|
$appid = $this->db->insert_id();
|
|
}
|
|
|
|
$this->_add_note_for_app();
|
|
|
|
$this->load('cache');
|
|
$_ENV['cache']->updatedata('apps');
|
|
|
|
$_ENV['app']->alter_app_table($appid, 'ADD');
|
|
$this->writelog('app_add', "appid=$appid; appname=$_POST[name]");
|
|
header("location: admin.php?m=app&a=detail&appid=$appid&addapp=yes&sid=".$this->view->sid);
|
|
}
|
|
}
|
|
|
|
function onping() {
|
|
$ip = getgpc('ip');
|
|
$url = getgpc('url');
|
|
$appid = intval(getgpc('appid'));
|
|
$app = $_ENV['app']->get_app_by_appid($appid);
|
|
$status = '';
|
|
if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$app['apifilename']) {
|
|
$uc_note = new uc_note();
|
|
$status = $uc_note->test($note['getdata'], $note['postdata']);
|
|
} else {
|
|
$this->load('note');
|
|
$url = $_ENV['note']->get_url_code('test', '', $appid);
|
|
$status = $_ENV['app']->test_api($url, $ip);
|
|
}
|
|
if($status == '1') {
|
|
echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/correct.gif\' border=\'0\' class=\'statimg\' \/><span class=\'green\'>'.$this->lang['app_connent_ok'].'</span>";testlink();';
|
|
} else {
|
|
echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/error.gif\' border=\'0\' class=\'statimg\' \/><span class=\'red\'>'.$this->lang['app_connent_false'].'</span>";testlink();';
|
|
}
|
|
|
|
}
|
|
|
|
function ondetail() {
|
|
$appid = getgpc('appid');
|
|
$updated = false;
|
|
$app = $_ENV['app']->get_app_by_appid($appid);
|
|
if($this->submitcheck()) {
|
|
$type = getgpc('type', 'P');
|
|
$name = getgpc('name', 'P');
|
|
$url = getgpc('url', 'P');
|
|
$ip = getgpc('ip', 'P');
|
|
$viewprourl = getgpc('viewprourl', 'P');
|
|
$apifilename = trim(getgpc('apifilename', 'P'));
|
|
$authkey = getgpc('authkey', 'P');
|
|
$authkey = $this->authcode($authkey, 'ENCODE', UC_MYKEY);
|
|
$synlogin = getgpc('synlogin', 'P');
|
|
$recvnote = getgpc('recvnote', 'P');
|
|
$extraurl = getgpc('extraurl', 'P');
|
|
if(getgpc('apppath', 'P')) {
|
|
$app['extra']['apppath'] = $this->_realpath(getgpc('apppath', 'P'));
|
|
if($app['extra']['apppath']) {
|
|
$apifile = $app['extra']['apppath'].'./api/uc.php';
|
|
if(!file_exists($apifile)) {
|
|
$this->message('app_apifile_not_exists', 'BACK', 0, array('$apifile' => $apifile));
|
|
}
|
|
$s = file_get_contents($apifile);
|
|
preg_match("/define\(\'UC_CLIENT_VERSION\'\, \'([^\']+?)\'\)/i", $s, $m);
|
|
$uc_client_version = @$m[1];
|
|
|
|
if(!$uc_client_version || $uc_client_version <= '1.0.0') {
|
|
$this->message('app_apifile_too_low', 'BACK', 0, array('$apifile' => $apifile));
|
|
}
|
|
} else {
|
|
$this->message('app_path_not_exists');
|
|
}
|
|
} else {
|
|
$app['extra']['apppath'] = '';
|
|
}
|
|
$app['extra']['extraurl'] = array();
|
|
if($extraurl) {
|
|
foreach(explode("\n", $extraurl) as $val) {
|
|
if(!$val = trim($val)) continue;
|
|
$app['extra']['extraurl'][] = $val;
|
|
}
|
|
}
|
|
$tagtemplates = array();
|
|
$tagtemplates['template'] = MAGIC_QUOTES_GPC ? stripslashes(getgpc('tagtemplates', 'P')) : getgpc('tagtemplates', 'P');
|
|
$tagfields = explode("\n", getgpc('tagfields', 'P'));
|
|
foreach($tagfields as $field) {
|
|
$field = trim($field);
|
|
list($k, $v) = explode(',', $field);
|
|
if($k) {
|
|
$tagtemplates['fields'][$k] = $v;
|
|
}
|
|
}
|
|
$tagtemplates = $this->serialize($tagtemplates, 1);
|
|
|
|
$extra = addslashes(serialize($app['extra']));
|
|
$this->db->query("UPDATE ".UC_DBTABLEPRE."applications SET appid='$appid', name='$name', url='$url',
|
|
type='$type', ip='$ip', viewprourl='$viewprourl', apifilename='$apifilename', authkey='$authkey',
|
|
synlogin='$synlogin', recvnote='$recvnote', extra='$extra',
|
|
tagtemplates='$tagtemplates'
|
|
WHERE appid='$appid'");
|
|
$updated = true;
|
|
$this->load('cache');
|
|
$_ENV['cache']->updatedata('apps');
|
|
$this->cache('settings');
|
|
$this->writelog('app_edit', "appid=$appid");
|
|
|
|
$this->_add_note_for_app();
|
|
$app = $_ENV['app']->get_app_by_appid($appid);
|
|
}
|
|
$tagtemplates = $this->unserialize($app['tagtemplates']);
|
|
$template = dhtmlspecialchars($tagtemplates['template']);
|
|
$tmp = '';
|
|
if(is_array($tagtemplates['fields'])) {
|
|
foreach($tagtemplates['fields'] as $field => $memo) {
|
|
$tmp .= $field.','.$memo."\n";
|
|
}
|
|
}
|
|
$tagtemplates['fields'] = $tmp;
|
|
$a = getgpc('a');
|
|
$this->view->assign('a', $a);
|
|
$app = $_ENV['app']->get_app_by_appid($appid);
|
|
$this->view->assign('isfounder', $this->user['isfounder']);
|
|
$this->view->assign('appid', $app['appid']);
|
|
$this->view->assign('allowips', $app['allowips']);
|
|
$this->view->assign('name', $app['name']);
|
|
$this->view->assign('url', $app['url']);
|
|
$this->view->assign('ip', $app['ip']);
|
|
$this->view->assign('viewprourl', $app['viewprourl']);
|
|
$this->view->assign('apifilename', $app['apifilename']);
|
|
$this->view->assign('authkey', $app['authkey']);
|
|
$synloginchecked = array($app['synlogin'] => 'checked="checked"');
|
|
$recvnotechecked = array($app['recvnote'] => 'checked="checked"');
|
|
$this->view->assign('synlogin', $synloginchecked);
|
|
$this->view->assign('charset', $app['charset']);
|
|
$this->view->assign('dbcharset', $app['dbcharset']);
|
|
$this->view->assign('type', $app['type']);
|
|
$this->view->assign('recvnotechecked', $recvnotechecked);
|
|
$typelist = array('DISCUZX'=>'DiscuzX','UCHOME'=>'UCenter Home','XSPACE'=>'X-Space','DISCUZ'=>'Discuz!','SUPESITE'=>'SupeSite','SUPEV'=>'SupeV','ECSHOP'=>'ECShop','ECMALL'=>'ECMall','OTHER'=>$this->lang['other']);
|
|
$this->view->assign('typelist', $typelist);
|
|
$this->view->assign('updated', $updated);
|
|
$addapp = getgpc('addapp');
|
|
$this->view->assign('addapp', $addapp);
|
|
$this->view->assign('extraurl', implode("\n", $app['extra']['extraurl']));
|
|
$this->view->assign('apppath', $app['extra']['apppath']);
|
|
$this->view->assign('tagtemplates', $tagtemplates);
|
|
$this->view->display('admin_app');
|
|
}
|
|
|
|
function _add_note_for_app() {
|
|
$this->load('note');
|
|
$notedata = $this->db->fetch_all("SELECT appid, type, name, url, ip, viewprourl, apifilename, charset, synlogin, extra, recvnote FROM ".UC_DBTABLEPRE."applications");
|
|
$notedata = $this->_format_notedata($notedata);
|
|
$notedata['UC_API'] = UC_API;
|
|
$_ENV['note']->add('updateapps', '', $this->serialize($notedata, 1));
|
|
$_ENV['note']->send();
|
|
}
|
|
|
|
function _format_notedata($notedata) {
|
|
$arr = array();
|
|
foreach($notedata as $key => $note) {
|
|
$note['extra'] = unserialize($note['extra']);
|
|
$arr[$note['appid']] = $note;
|
|
}
|
|
return $arr;
|
|
}
|
|
|
|
function _realpath($path) {
|
|
return realpath($path).'/';
|
|
}
|
|
}
|
|
|
|
?>
|