<?
global $CFG,$UE,$AGREES;
$UE=$CFG['UE'];
$ORDERS=array(
'0'=>array('img'=>'c_888','text'=>'Еще не активирован'),
'1'=>array('img'=>'c_0f0','text'=>'Активно, работает'),
'X'=>array('img'=>'c_f00','text'=>'В очереди на удаление'),
'-'=>array('img'=>'c_f0f','text'=>'Отключен или заблокирован'),
'.'=>array('img'=>'c_0ff','text'=>'Выполнен, можно удалять'),
'8'=>array('img'=>'c_00f','text'=>'Работает постоянно')
);
global $ORDS;
$ORDS=array(
'0'=>'Новый',
'1'=>'Активный',
'X'=>'На удалении',
'-'=>'Отключен',
'.'=>'Выполнен',
'8'=>'Постоянный'
);
$REASONS=array(
'C'=>'Недостаточно средств на счету заказа',
'U'=>'По запросу владельца',
'X'=>'Нарушение договора-оферты',
'T'=>'Техническая неисправность',
'W'=>'Обслуживание персоналом'
);
function calc_seq($n,$x,$min,$mul) {
for ($i=2; $i<=$n; $i++) {
if ($x*$mul<=$min) return($min);
else $x*=$mul;
}
return($x);
}
function calc_price($s,$n) {
global $UE,$USER;
$r=isset($USER->ratio)?$USER->ratio:1; if ($r<0) $r=1;
if (!$s or !is_array($s)) return array('p'=>0,'p1'=>0,'d'=>0);
$d=$n>1?$s['dec']*$n:0;
$p1=round($s['price']*(1-$d)*$UE*$r,2);
$p=$p1*$n;
return(array('d'=>$d,'p1'=>$p1,'p'=>$p));
}
function calc_price_h($s,$n) {
$x=calc_price($s,$n);
$x['p']=round($x['p']);
$x['p1']=round($x['p1']);
$x['d']=round($x['d']*100);
return($x);
}
function hosting_core_users_list_head() {
$r=mysql_query("select user,count(*) from orders group by user");
$o=array(); while (list($id,$n)=mysql_fetch_row($r)) $o[$id]=$n;
}
function hosting_operation_admin($add) {
global $MODULE;
return module_url($MODULE,"admin/actions?$add");
}
function order_remove($id,$rm=false) {
global $USER;
if (!$o=get_sql_row('orders',"id=$id")) return;
$s=get_sql_row('hserv',"id=$o[service]");
$u=get_sql_row('users',"id=$o[user]");
$rm=$rm?",rm='1'":",rm='0'";
mysql_query("update orders set dt_block=now()$rm where id=$o[id]");
mysql_query("update hserv set rm='1' where user=0 and (select count(*) from orders where service=$s[id] and rm='0')<1");
sys_log('O','hosting.order',$o['id'],"Удален заказ");
if ($o['money']!=0) {
$o['money']=round($o['money'],2);
mysql_query("update orders set money=0 where id=$o[id]");
mysql_query("update users set money=money+$o[money] where id=$o[user]");
if ($o['money']>0) { $cr='I.O'; $db='I.U'; $dir='c'; }
else { $cr='I.U'; $db='I.X'; $dir='c'; }
if ($USER->id==$o['user']) $USER->fetch();
$m=new money();
$m->create($cr,$db,abs($o['money']),$u['id'],"Удаление заказа пользователя $u[id] ($u[login])");
$m->addapp('hosting.order',$o['id'],$dir);
sys_log('$','fin.money',$m->id,"Средства $o[money] Р. возвращены при удалении заказа #$o[id]");
}
}
class order {
function order($id=0) {
$this->id=$id;
$this->fetch($id);
}
function clean() {
$o=get_sql_fields('orders');
$o['id']=0;
foreach ($o as $p=>$v) $this->$p=$v;
}
function fetch($id=0) {
global $USER;
if ($id!=0) $this->id=$id;
if ($this->id) {
if (!$o=get_sql_row('orders',"id='$this->id'")) $this->clean();
else foreach ($o as $p=>$v) $this->$p=$v;
}
else $this->clean();
if ($this->id) {
if ($this->user!=$USER->id and !$USER->allowed('a')) $this->clean();
}
}
function store1($p,$v=null) {
if (!$this->id) return false;
if (!isset($this->$p)) return false;
if ($v==null) $v=$this->$p;
mysql_query("update users set $p='$v' where id=$this->id");
return true;
}
function info() {
if (!$this->id) return "";
global $ORDS;
$h=get_sql_row('hosts',"id='$this->host'");
$s=get_sql_row('hserv',"id='$this->service'");
$tip=array();
$tip[]="<b>ID:</b> $this->id";
if ($this->st) $tip[]='<b>Статус:</b> '.$ORDS[$this->st];
if ($this->dt) $tip[]="<b>Создан:</b> $this->dt";
if ($this->rm=='1' and $this->dt_block) $tip[]="<b>Удалён:</b> $this->dt";
if (isset($this->money)) $tip[]='<b>Счёт:</b> '.round($this->money,2).' Р.';
$tip[]='';
if ($s) $tip[]="<b>Услуга:</b> $s[name]";
if ($this->num) $tip[]="<b>Срок:</b> $this->num";
if ($this->name) $tip[]="<b>Название:</b> $this->name";
$tip[]='';
if ($h) $tip[]="<b>Сервер:</b> ".($h['purl']?"<a href='$h[purl]' title='$h[pname]'>$h[name]</a>":$h['name']);
if ($this->login) $tip[]="<b>Логин/ID:</b> $this->login";
if ($this->ip) $tip[]="<b>IP:</b> $this->ip";
$tip=implode('<br>',$tip);
return $tip;
}
function linkto($text='') {
global $USER;
if (!$this->id) return('(нет)');
if (!$USER->allowed('a')) return "Заказ #$this->id";
if ($text=='') $text=module_to('hosting',"admin/orders?edit=$this->id","Заказ #$this->id");
$s='<nobr>'.$text.' ';
$s.=skin_tt_load(self_url("_CLEAN&TOOLTIP_ORDER=$this->id")).'</nobr>';
return($s);
}
}
function cron() {
global $MODULE,$PAR,$CFG,$USER;
$P=$PAR['hosting'];
mysql_query("lock tables config WRITE");
mysql_query("update config set val=val+1 where module='hosting' and par='CRON'");
$r=mysql_query("select val from config where module='hosting' and par='CRON'");
list($cron)=mysql_fetch_row($r);
mysql_query("unlock tables");
if ($cron%$P['CRON_PERIOD']!=0) return;
// Обработка не активированных заказов
$r=mysql_query("select id from orders where st='0' and rm='0' and timestampdiff(day,dt,now())>=3");
while (list($id)=mysql_fetch_row($r)) {
$o=get_sql_row('orders',"id=$id");
$s=get_sql_row('hserv',"id=$o[service]");
$u=user_array($o['user']);
$p=calc_price_h($s,$o['num']);
$a="Заказ не активирован 3 дня, удалён автоматически";
if (round($o['money'],2)>0) {
mysql_query("update users set money=money+$o[money] where id=$o[user]");
$a.=" (возвращено $o[money] Р.)";
$m=new money();
$m->create('I.O','I.U',$o['money'],$u['id'],'Удаление неактивированного заказа');
$m->addapp('hosting.order',$o['id'],'c');
}
sys_log('O','hosting.order',$id,$a);
$x=array_merge(mail_tpl_mkpar('ORDER_',$o),mail_tpl_mkpar('SERVICE_',$s),mail_tpl_mkpar('PRICE_',$p),mail_tpl_mkpar('USER_',$u));
$x['ORDER_MONEY']=round($x['ORDER_MONEY'],2);
if ($t=mail_tpl_get('mail_user_order_newrm')) mail_tpl_mail($t,$u['email'],$x);
mysql_query("delete from orders where id=$id");
}
?>