DiscuzX/upload/uc_server/control/admin/credit.php

218 lines
8.2 KiB
PHP

<?php
/*
[UCenter] (C)2001-2099 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: credit.php 1059 2011-03-01 07:25:09Z monkey $
*/
!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['allowadmincredits']) {
$this->message('no_permission_for_this_module');
}
}
function onls() {
$appsrc = getgpc('appsrc', 'P');
$creditsrc = getgpc('creditsrc', 'P');
$appdesc = getgpc('appdesc', 'P');
$creditdesc = getgpc('creditdesc', 'P');
$ratiosrc = getgpc('ratiosrc', 'P');
$ratiodesc = getgpc('ratiodesc', 'P');
$delete = getgpc('delete', 'P');
$addexchange = getgpc('addexchange', 'G');
$delexchange = getgpc('delexchange', 'G');
$settings = $this->get_setting(array('creditexchange'), TRUE);
$creditexchange = is_array($settings['creditexchange']) ? $settings['creditexchange'] : array();
$appsrc = @intval($appsrc);
$creditsrc = @intval($creditsrc);
$appdesc = @intval($appdesc);
$creditdesc = @intval($creditdesc);
$ratiosrc = ($ratiosrc = @intval($ratiosrc)) > 0 ? $ratiosrc : 1;
$ratiodesc = ($ratiodesc = @intval($ratiodesc)) > 0 ? $ratiodesc : 1;
if(!empty($addexchange) && $this->submitcheck()) {
if($appsrc != $appdesc) {
$key = $appsrc.'_'.$creditsrc.'_'.$appdesc.'_'.$creditdesc;
$creditexchange[$key] = $ratiosrc."\t".$ratiodesc;
$this->set_setting('creditexchange', $creditexchange, TRUE);
$this->load('cache');
$_ENV['cache']->updatedata('settings');
$status = 1;
$this->writelog('credit_addexchange', $appsrc.'_'.$creditsrc.' : '.$appdesc.'_'.$creditdesc.'='.$ratiosrc.' : '.$ratiodesc);
} else {
$status = -1;
}
$settings = $this->get_setting(array('creditexchange'), TRUE);
$creditexchange = is_array($settings['creditexchange']) ? $settings['creditexchange'] : array();
} elseif(!empty($delexchange) && $this->submitcheck()) {
if(is_array($delete)) {
foreach($delete as $key) {
unset($creditexchange[$key]);
}
$this->set_setting('creditexchange', $creditexchange, TRUE);
$this->load('cache');
$_ENV['cache']->updatedata('settings');
$status = 1;
$this->writelog('credit_deleteexchange', "delete=".implode(',', $delete));
}
$settings = $this->get_setting(array('creditexchange'), TRUE);
$creditexchange = is_array($settings['creditexchange']) ? $settings['creditexchange'] : array();
}
$apps = unserialize($this->settings['credits']);
if(is_array($creditexchange)) {
foreach($creditexchange as $set => $ratio) {
$tmp = array();
list($tmp['appsrc'], $tmp['creditsrc'], $tmp['appdesc'], $tmp['creditdesc']) = explode('_', $set);
list($tmp['ratiosrc'], $tmp['ratiodesc']) = explode("\t", $ratio);
$tmp['creditsrc'] = $apps[$tmp['appsrc']][$tmp['creditsrc']][0];
$tmp['creditdesc'] = $apps[$tmp['appdesc']][$tmp['creditdesc']][0];
$tmp['appsrc'] = $this->cache['apps'][$tmp['appsrc']]['name'];
$tmp['appdesc'] = $this->cache['apps'][$tmp['appdesc']]['name'];
$creditexchange[$set] = $tmp;
}
}
$appselect = '';
if(is_array($apps)) {
foreach($apps as $appid => $credits) {
$appselect .= '<option value="'.$appid.'">'.$this->cache['apps'][$appid]['name'].'</option>';
$tmp = array();
if(is_array($credits)) {
foreach($credits as $id => $credit) {
$tmp[] = '['.$id.', \''.str_replace('\'', '\\\'', $credit[0]).'\']';
}
}
$creditselect[$appid] = 'credit['.$appid.'] = ['.implode(',', $tmp).'];';
}
}
$this->view->assign('status', $status);
$this->view->assign('appsrc', $appsrc);
$this->view->assign('creditsrc', $creditsrc);
$this->view->assign('appdesc', $appdesc);
$this->view->assign('creditdesc', $creditdesc);
$this->view->assign('ratiosrc', $ratiosrc);
$this->view->assign('ratiodesc', $ratiodesc);
$this->view->assign('appselect', $appselect);
$this->view->assign('creditselect', $creditselect);
$this->view->assign('creditexchange', $creditexchange);
$this->view->display('admin_credit');
}
function onsync() {
$this->load('note');
$this->load('misc');
$this->load('cache');
$step = intval(getgpc('step', 'G'));
if(!$step && is_array($this->cache['apps'])) {
$credits = array();
$stepapp = intval(getgpc('stepapp', 'G'));
$testrelease = intval(getgpc('testrelease', 'G'));
$appids = array_keys($this->cache['apps']);
$appid = $appids[$stepapp];
if(!$stepapp) {
$_CACHE['credits'] = array();
} else {
include UC_DATADIR.'cache/credits.php';
}
if($app = $this->cache['apps'][$appid]) {
$apifilename = isset($app['apifilename']) && $app['apifilename'] ? $app['apifilename'] : 'uc.php';
if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$apifilename) {
$uc_note = new uc_note();
$data = trim($uc_note->getcreditsettings('', ''));
} else {
$url = $_ENV['note']->get_url_code('getcreditsettings', '', $appid);
$data = trim($_ENV['misc']->dfopen($url, 0, '', '', 1));
}
if(!$testrelease) {
if(!($data = $this->sync_unserialize($data, ''))) {
header('location: '.UC_API.'/admin.php?m=credit&a=sync&step=0&stepapp='.$stepapp.'&testrelease=1&sid='.$this->view->sid);
exit();
} else {
$stepapp++;
}
} else {
$data = $this->sync_unserialize($data, 'release/20080429/');
$stepapp++;
}
if($data) {
$_CACHE['credits'][$appid] = $data;
$s = "<?php\r\n";
$s .= '$_CACHE[\'credits\'] = '.var_export($_CACHE['credits'], TRUE).";\r\n";
$s .= "\r\n?>";
$fp = @fopen(UC_DATADIR.'cache/credits.php', 'w');
@fwrite($fp, $s);
@fclose($fp);
}
header('location: '.UC_API.'/admin.php?m=credit&a=sync&step=0&stepapp='.$stepapp.'&sid='.$this->view->sid);
} else {
header('location: '.UC_API.'/admin.php?m=credit&a=sync&step=1&sid='.$this->view->sid);
}
exit();
}
include_once UC_DATADIR.'cache/credits.php';
$credits = $_CACHE['credits'];
$this->set_setting('credits', $credits, TRUE);
$this->load('cache');
$_ENV['cache']->updatedata('settings');
$this->writelog('credit_sync', 'succeed');
$settings = $this->get_setting(array('creditexchange'), TRUE);
$creditexchange = is_array($settings['creditexchange']) ? $settings['creditexchange'] : array();
$updaterequest = array();
$i = 0;
foreach($creditexchange as $set => $ratio) {
$tmp = array();
list($tmp['appsrc'], $tmp['creditsrc'], $tmp['appdesc'], $tmp['creditdesc']) = explode('_', $set);
list($tmp['ratiosrc'], $tmp['ratiodesc']) = explode("\t", $ratio);
$updaterequest[$tmp['appsrc']][] =
'&credit['.$tmp['appsrc'].']['.$i.'][creditsrc]='.intval($tmp['creditsrc']).
'&credit['.$tmp['appsrc'].']['.$i.'][appiddesc]='.urlencode($tmp['appdesc']).
'&credit['.$tmp['appsrc'].']['.$i.'][creditdesc]='.intval($tmp['creditdesc']).
'&credit['.$tmp['appsrc'].']['.$i.'][title]='.urlencode($this->cache['apps'][$tmp['appdesc']]['name'].' '.$credits[$tmp['appdesc']][$tmp['creditdesc']][0]).
'&credit['.$tmp['appsrc'].']['.$i.'][unit]='.urlencode($credits[$tmp['appdesc']][$tmp['creditdesc']][1]).
'&credit['.$tmp['appsrc'].']['.$i.'][ratiosrc]='.$tmp['ratiosrc'].
'&credit['.$tmp['appsrc'].']['.$i.'][ratiodesc]='.$tmp['ratiodesc'].
'&credit['.$tmp['appsrc'].']['.$i.'][ratio]='.($tmp['ratiosrc'] / $tmp['ratiodesc']);
$i++;
}
$data = array();
foreach($updaterequest as $appid => $value) {
$data[] = implode('', $updaterequest[$appid]);
}
$_ENV['note']->add('updatecreditsettings', implode('', $data));
$_ENV['note']->send();
$this->message('syncappcredits_updated','admin.php?m=credit&a=ls');
}
function sync_unserialize($s, $release_root) {
if(!function_exists('xml_unserialize')) {
if($release_root && file_exists(UC_ROOT.$release_root.'./lib/xml.class.php')) {
include UC_ROOT.$release_root.'./lib/xml.class.php';
} else {
include UC_ROOT.'./lib/xml.class.php';
}
}
return xml_unserialize($s);
}
}
?>