Тиграми не рождаются
Энди (19:40:37 4/05/2009)
читать дальше<?
class CProjects extends Manager{
var $forms=array();
var $cache_list2=array();
var $owner=1;
var $f='uid';
//===============================================================
// Общие функции
//===============================================================
/*
Функция получения данных
Входные данные:
* $id - id проекта.
Выходные данные:
* ассоциативный массив с данными проекта.
*/
public function getdata($id,$withkw=false){
if (!array_key_exists($id,$this->cache_list)){
parent::$DB->query ("SELECT p.*, u.URL
FROM `".TABLE_PROJECTS."` AS p
LEFT JOIN `".TABLE_URLS."` AS `u` ON u.id=p.URLid
WHERE p.`id`=".$id."" );
$this->cache_list[$id]=parent::$DB->get_one();
}
$data=$this->cache_list[$id];
if ($withkw&&!array_key_exists($id,$this->cache_list2)){
$kws_array=$this->__squery_get_data_P($id);
$this->cache_list2[$id]=$kws_array;
}
if ($withkw) {
$data['kws_array']=$this->cache_list2[$id];
$kws=array();foreach ($data['kws_array'] as $k) $kws[]=$k['txt'];
$data['keywords']=implode("\r\n",$kws);
}
return $data;
}
/*
Функция получения данных
Входные данные:
* $ids - id проектов через запятую.
Выходные данные:
* массив ассоциативных массивов с данными проектов.
*/
public function getplist($_DATA){
$data=array();
$_DATA['where'].=' AND c.type=3';
$_DATA['group']='p.id';
$dob= parent::$DB->construct_query($_DATA);
$qr="SELECT p.*,u.URL,c.realv,c.bonusv,c.creditv
FROM `".TABLE_PROJECTS."` AS `p`
LEFT JOIN `".TABLE_URLS."` AS `u` ON u.id=p.URLid
LEFT JOIN `".TABLE_COUNTS."` AS `c` ON c.owner=p.id
".$dob;
parent::$DB->query ($qr);
return parent::$DB->getlist('');;
}
/*
Функция смены статуса активности проекта
Входные данные:
* $_DATA['act'] - новый статус.
* $_DATA['id'] - ид проекта.
Выходные данные:
true 72-9-28
*/
public function project_activate($_DATA){
$act=intval($_DATA['act']);
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$dis= $_DATA['dis'];
$comments=(isset($_DATA['comments']))?parent::$DB->escape($_DATA['comments']):'';
$this->test_access($meid,$id);
$old_data=$this->getdata($id);
$can_deactivate= parent::$ME['data']['can_editproject']&&($old_data['status']==1&&$old_data['seo_stat']<3);
$can_activate= parent::$ME['data']['can_editproject']&&($old_data['status']==0);
$can_close= parent::$ME['data']['can_editproject']&&($old_data['status']==1 && $old_data['seo_stat']!=3);
if ($act==1&&!$can_activate) die('Access denied');
if ($act==0&&!$can_deactivate) die('Access denied');
if ($act==2&&!$can_close) die('Access denied');
$rashod=0;
if (isset($_DATA['rashod']) && $act==1) $rashod=$_DATA['rashod'];
$dop='';$dopol='';
if ($comments) {$dop.=", `comments`='".$comments."' ";$dopol=$this->L('PROJECTS_CLOSECAUSE').$comments;}
if ($act==1) {$dop.=", `time_activate`=".time().", `time_pospay`=".(time()+86400)." ";}
parent::$DB->query("UPDATE `".TABLE_PROJECTS."` SET `status`=$act, `rashod`='$rashod' $dop WHERE id=".$id);
$count=$this->__counts_getdata($old_data['payer_id']);
$counts=array($count['id']=>$count);
// print ($rashod)ie();
if ($rashod>0)
$this->__operations_payforproject('pos', $old_data['currency'], $id,$rashod*$dis,array(0,$old_data['payer_id'],0),$counts,1);
$this->_add_to_log($this->LOGS['3'],array(
'STATUS'=>$this->status_text($act),
'NAME'=>$old_data['name'],
'DOPOL'=>$dopol ,'pid'=>$id
));
return true;
}
public function mainstart($pid,$scid){
$scheme=$this->_schemes_getdatafull($scid);
$npr=array();
$npr['seo_stat']=3;
$npr['time_dogovor']=time();
$npr['time_dogovorpay']=time()+86400;
$npr['stagen']=1;
parent::$DB->edit_record(TABLE_PROJECTS,$pid,$npr);
}
//===============================================================
// Вспомогательные функции
//===============================================================
/*
Функция проверяет доступ к проекту $id клиента $uid
Входные данные:
* $uid - id клиента.
* $id - id проекта.
Выходные данные:
true / завершение работы скрипта + редирект.
*/
public function test_access($meid,$id=0){
if (!$meid) {return redirect(BASEPATH.'/index/',AUTH_NEED)ie();}
$data=array();
if ($id){
$data=$this->getdata($id);
if (!isset($data[$this->f]) || $data[$this->f]!=$meid) {
redirect(BASEPATH.'/index/',AUTH_INVALID)ie();
}
}
return true;
}
/*
Функция добавления проекта.
Входные данные:
* $_DATA - ассоциативный массив с данными.
ВНИМАНИЕ! Нет проверки входных данных - все поля должны быть в таблице БД.
Выходные данные:
* id нового проекта.
*/
private function add_project($_DATA){
$kwa=array();
if (isset($_DATA['keywords'])){
$kw=trim($_DATA['keywords']);
if (strlen($kw)>0) $kwa=explode("\n",$kw);
unset($_DATA['keywords']);
}
$URL=norm_URL($_DATA['URL']);
unset($_DATA['URL']);
$_DATA['URLid']=$this->__urls_update($URL);
$_DATA['time_create']=time();
$_DATA['payer_id']=parent::$ME['data']['count_'.$_DATA['currency']];
$r1= parent::$DB->add_record(TABLE_PROJECTS,$_DATA);
if (!$r1) return false;
$cnt=$this->__counts_create($_DATA['currency'],3,$r1);
$this->__squery_editlist(array('kws'=>$kwa,'pid'=>$r1));
parent::$DB->add_record(TABLE_PROJECTS,array('count_id'=>$cnt),$r1);
return $r1;
}
/*
Функция редактирования проекта.
Входные данные:
* $id - номер проекта.
* $_DATA - ассоциативный массив с данными. $_DATA['login'] и т.п.
ВНИМАНИЕ! Нет проверки входных данных - все поля должны быть в таблице БД.
Выходные данные:
нет
*/
private function edit_project($id,$_DATA){
$kwa=array();
if (isset($_DATA['keywords'])){
$kw=trim($_DATA['keywords']);
$kwa1=array();
if (strlen($kw)>0) $kwa1=explode("\n",$kw);
foreach ($kwa1 as $kw1) {$kw1=trim($kw1);if ($kw1!='') $kwa[]=$kw1;}
unset($_DATA['keywords']);
$old=$this->getdata($id,true);
$tarif=$this->__tarifs_getdata(parent::$ME['data']['tarif']);
$curr=$this->__currencies_getdata($old['currency']);
if ($old['status']==1){
$deltakw=count($kwa)-count($old['kws_array']);
if ($deltakw>0){
if ($tarif['rashod_each']>0){
$rashod=$deltakw*$tarif['rashod_each']*$curr['course'];
$count=$this->__counts_getdata($old['payer_id']);
$counts=array($count['id']=>$count);
//$this->__operations_payproject(array('count_id'=>$old['payer_id'],
// 'summ'=>$rashod,'currency'=>$old['currency'],'act'=>'pos'));
$this->__operations_payforproject('pos', $old['currency'], $old['id'],$rashod,array(0,$old['payer_id'],0),$counts,1);
}
}
}
$_DATA['rashod']=count($kwa)*$tarif['rashod_each']*$curr['course'];
}
$r1= parent::$DB->edit_record(TABLE_PROJECTS,$id,$_DATA);
if (!$r1) return false;
$this->__squery_editlist(array('kws'=>$kwa,'pid'=>$id));
return $r1;
}
/*
Текстовые статусы для проектов.
Входные данные:
$n - номер статуса.
Выходные данные:
* текст- его название.
*/
private function status_text($n){
$key= 'PROJECTS_STATUS_'.$n;
$rt=$this->L($key);
if ($rt=='') return $this->L('PROJECTS_STATUS_999');
else return $rt;
}
/*
определение числа запросов для пользователя $uid
*/
private function get_kw_count(){
$meid=parent::$ME['id'];
$data=array();
$qr="SELECT COUNT(s.id) AS 'words_count'
FROM `".TABLE_PROJECTS."` AS `p`
LEFT JOIN `".TABLE_SQUERY."` AS `s` ON s.pid=p.id
WHERE p.status=1 AND p.`".$this->f."`=$meid AND p.payer_k=".$this->owner."
GROUP BY p.id ;";
parent::$DB->query ($qr);
//print $qr;
if (parent::$DB->num_rows()>0){
$cnt=0;
while ($r=parent::$DB->next_record()) $cnt+=$r['words_count'];
return $cnt;
}
return 0;
}
/*
вспомогательная функция - аналог explode()
*/
private function explode2($stri,$del="\r\n"){
$stri=trim($stri);
$rt=array();
if ($stri!='') $rt=explode($del,$stri);
return $rt;
}
private function ya_indexed($URL){
$url='yandex.ru/yandsearch?serverurl='.$URL;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//$follow_location);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$result=curl_exec($ch);
if (preg_match('#'.preg_quote('').'[^><]*?(\d+)[^><]*?'.preg_quote('').'#',$result,$match)){
return 1;
}
return 0;
}
//===============================================================
// Ajax функции
//===============================================================
public function ajax_edit($_DATA=''){
$POST=$_DATA;
$id=intval($POST['pid']);
$meid=parent::$ME['id'];
$_DATA_FOR_HTML=array();
$errors=true;
$this->test_access($meid,$id);
$groups=array();
if ($id==0)$groups[]=0;
else $groups[]=1;
$this->checkform('projects',$groups);
$data=$this->forms['projects']->get_PHP_data($POST);
$errors='';
$errors.=$this->forms['projects']->PHP_validator($data);
// if ($data['guest'] && $data['gst_psw']=='') {unset($data['gst_psw']);}
if (isset($data['URL'])) $data['URL']=norm_URL($data['URL']);
if (!$id){
if (gethostbyname($data['URL'])==$data['URL']) $errors.=$this->L('PROJECTS_URLNOTFOUND');
if (!in_array( $data['currency'],array(1,2,3)) ) $errors.='Fatal currency error
';
$data['ya_indexed']=$this->ya_indexed($data['URL']);
}
if ($errors=='') {
/* unset($data['gst_psw2']);
if (isset($data['gst_psw']) && !$data['guest']) unset($data['gst_psw']);
if (isset($data['gst_psw'])) {
$data['gst_psw']=create_pass($data['gst_psw']);
} */
$data[$this->f]=$meid;
if ($id==0) {
$data['status']='0';
$ret=$this->add_project($data);
$this->_add_to_log($this->LOGS['0'],array('NAME'=>$data['name'],'pid'=>$ret));
}else{
unset($data['URL']);
$this->edit_project($id,$data);
$this->_add_to_log($this->LOGS['1'],array('pid'=>$id,'NAME'=>$data['name']));
}
jQuery('#messages')->html('');
jQuery('#editform')->html($this->L('CHANGES_DONE'));
jQuery::evalScript("document.location.href='".BASEPATH."/project_list/';");
$errors=false;
}else{
jQuery('#messages')->html($errors);
}
}
//===============================================================
// Основные функции
//===============================================================
/*
Функция отображает список проектов.
*/
public function start($_DATA){
$meid=parent::$ME['id'];
$this->test_access($meid);
$me=parent::$ME['data'];
$counts=$this->__counts_getdata2(2,$me['id']);
$currencies=$this->__currencies_getlist('id');
$_DATA_FOR_HTML =array();
$_DATA_FOR_HTML_1 =array();
$_DATA_FOR_HTML_1['can_viewbalance']=parent::$ME['data']['can_viewbalance'];
if ($me['can_viewbalance'] ){
$_DATA_FOR_HTML_1['BALANCE']=array();
for ($i=0;$i<3;$i++){
$c=$counts[$i];
$c['currency']=$currencies[$c['curr_id']]['name1'];
$_DATA_FOR_HTML_1['BALANCE'][$i]=$c;
}
}
$rows=$this->getplist(array('where'=>'p.`'.$this->f.'`='.$meid,
'order'=>' `URL` ASC'));
$numr=count($rows);$mids=array(); $uids=array();
for ($counter=0;$counter<$numr;$counter++){$mids[]=$rows[$counter]['mid'];$uids[]=$rows[$counter]['uid']; }
if ($this->f!='mid'&&$mids)
$this->__managers_create_data_IDS($mids);
for ($counter=0;$counter<$numr;$counter++){
$row=$rows[$counter];
if ($this->f=='uid'){
if ($row['mid']>0){
$m= $this->__managers_getdata($row['mid']);
if ($m){
$row['manager_fio']=fio($m['famil'],$m['ima'],$m['otch']);
$row['manager_link']=BASEPATH.'/manager_show/'.$m['id'];
}else {$row['manager_fio']=$this->L('PROJECTS_UNKNOWN');}
}
}
//$row['rashod']=round($row['rashod']*$me['skidka'],1);
$row['realv']=round($row['realv']);
$row['creditv']=round($row['creditv']);
$row['statustext']=ucfirst($this->status_text($row['status']));
$row['can_editproject']= $me['can_editproject']&&($row['status']==0||$row['status']==1&&$row['seo_stat']<3);
$row['can_activate']= $me['can_editproject']&&($row['status']==0&&$row['payer_k']==$this->owner);
$row['can_deactivate']= $me['can_editproject']&&($row['status']==1&&$row['seo_stat']<3&&$row['payer_k']==$this->owner);
$row['can_close']= $me['can_editproject']&&($row['status']==0&&$row['seo_stat']!=3);
$row['cu_short']=$currencies[$row['currency']]['short'];
$_DATA_FOR_HTML["PROJECTS"][$counter]=$row;
}
$se_list=$this->__searchengines_getlist();
$_DATA_FOR_HTML['SEARCHES']=array();$i=0;
foreach ($se_list as $se){
$_DATA_FOR_HTML['SEARCHES'][$i++]=$se;
}
$_DATA_FOR_HTML['can_addproject']= $me['can_addproject'];
$_DATA_FOR_HTML['can_markword']= $me['can_markword'];
// print_r($_DATA_FOR_HTML
$HTML=parent::$HTML->ini_insert("projects/view_all.tpl",$_DATA_FOR_HTML);
$_DATA_FOR_HTML_1['PLIST']=$HTML;
return array("HTML"=>parent::$HTML->ini_insert("projects/start.tpl",$_DATA_FOR_HTML_1),
"result"=>true,
"cfg"=>parent::$HTML->config);
}
/*
Функция редактирования/создания проекта
Входные данные:
* $_DATA['POST'] - массив $_POST;
* $_DATA['id'] - номер проекта (0 для нового).
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного редактирования.
* ["result"] => true, если редактирование успешно (редирект) , false если нет.
*/
public function edit($_DATA){
$POST=$_DATA['POST'];
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$_DATA_FOR_HTML=array();
$errors=true;
$this->test_access($meid,$id);
//print_r(parent::$ME['data']);
if (!parent::$ME['data']['can_editproject'] && $id>0) die('Access denied');
if (!parent::$ME['data']['can_addproject'] && $id==0) die('Access denied');
$se_list=$this->__searchengines_getlist();
$se_list2=array();
foreach ($se_list as $se) {
$se_list2[]=array('text'=>$se['name'],'value'=>$se['id']);
}
$groups=array();
if ($id==0)$groups[]=0;
else $groups[]=1;
$this->checkform('projects',$groups);
$currencylist=$this->__currencies_getlist();
$currencylist2=array();
foreach($currencylist as $currency)
{$currencylist2[] = array('text'=>$currency['name1'],'value'=>$currency['id']); }
$user=parent::$ME['data'];
$this->forms['projects']->set_select_options('currency',$currencylist2);
$this->forms['projects']->bind(array('currency'=>$user['pref_currency']));
$this->forms['projects']->set_select_options('SS_ids',$se_list2);
// print_r($this->forms['projects']->f);
// $_DATA_FOR_HTML['register']=$id==0;
$this->forms['projects']->bind(array('SS_ids'=>'2,3,4,5'));
$_DATA_FOR_HTML['each_kw']=0; $_DATA_FOR_HTML['kw_count']=0;
if ($id>0) {
$data=$this->getdata($id,true);
if (empty($data)) return array("HTML"=>'invalid id','result'=>false);
$this->forms['projects']->bind($data);
$curr=$this->__currencies_getdata($data['currency']);
$_DATA_FOR_HTML['currency']=$curr['short'];
//
if ( $data['status']==1){
$tarif=$this->__tarifs_getdata(parent::$ME['data']['tarif']);
$_DATA_FOR_HTML['each_kw']=$tarif['rashod_each']*$curr['course'];
}
$_DATA_FOR_HTML['kw_count']=count($data['kws_array']);
}
$_DATA_FOR_HTML_1=$this->forms['projects']->get_HTML_data();
$_DATA_FOR_HTML['FORMA']=parent::$HTML->ini_insert("forms.tpl",$_DATA_FOR_HTML_1);
$_DATA_FOR_HTML['validator']=$this->forms['projects']->get_JS_validator();
$_DATA_FOR_HTML['id']=$id;
return array("HTML"=>parent::$HTML->ini_insert("projects/edit.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
/*
Функция активации проекта
Входные данные:
* $_DATA['id'] - номер проекта .
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного активирования.
* ["result"] => true, если активация успешна (редирект) , false если нет.
*/
public function activate($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$_DATA_FOR_HTML=array();
$_DATA_FOR_HTML['MESSAGES']='';
$_DATA_FOR_HTML['CAPTION']='';
$errors=true;
$POST=$_DATA['POST'];
$user=parent::$ME['data'];
$pr=$this->getdata($id,true);
$can_activate= $user['can_editproject']&&($pr['status']==0);
if (!$can_activate) die('Access denied');
$curr=$this->__currencies_getdata($pr['currency']);
$c=strtolower($curr['mychar']);
$me=parent::$ME['data'];
$count=$this->__counts_getdata($pr['payer_id']);
$balance=$count['realv']+$count['bonusv'];
$kw_p_count=count($pr['kws_array']);
$infodata=array('before'=>$this->get_kw_count(),'pcount'=>$kw_p_count,
'tarif'=>$user['tarif'],'balance'=>$balance,'pid'=>$id,'currency'=>$curr);
$info=$this->__tarifs_get_tarif_info($infodata);
$_DATA_FOR_HTML['id']=$id;
$_DATA_FOR_HTML['INFO']=$info['HTML'];
$inf=$info['info'];
$_DATA_FOR_HTML['ok']=0; // 0-ok 1-нехватка средств, 2-превышение лимита.
$ownerok=$pr['payer_k']==$this->owner;
$allok=$inf['limitok']&&$inf['balanceok']&&$ownerok;
if (isset($POST['act'])&&$allok){
$this->project_activate(array('id'=>$id,'act'=>1,'rashod'=>$inf['rashod'],'dis'=>$inf['dis']));
return array("HTML"=>false,'result'=>true);
}
$_DATA_FOR_HTML['allok']=$allok;
$_DATA_FOR_HTML['balanceok']=$inf['balanceok'];
$_DATA_FOR_HTML['limitok']=$inf['limitok'];
$_DATA_FOR_HTML['ownerok']=$ownerok;
return array("HTML"=>parent::$HTML->ini_insert("projects/activate.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
/*
Функция закрытия проекта
Входные данные:
* $_DATA['id'] - номер проекта .
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного закрытия.
* ["result"] => true, если успешно (редирект) , false если нет.
*/
public function closing($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$_DATA_FOR_HTML=array();
$_DATA_FOR_HTML['MESSAGES']='';
$_DATA_FOR_HTML['CAPTION']='';
$POST=$_DATA['POST'];
$errors=true;
$pr=$this->getdata($id);
$can_close= parent::$ME['data']['can_editproject']&&($pr['status']==1&&$pr['seo_stat']!=3);
if (!$can_close) die('access_denied');
$_DATA_FOR_HTML['id']=$id;
if (isset($POST['act'])){
$this->project_activate(array('id'=>$id,'act'=>3,'comments'=>$POST['comments']));
return array("HTML"=>false,'result'=>true);
}
return array("HTML"=>parent::$HTML->ini_insert("projects/close.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
/*
Функция продвижения проекта
Входные данные:
* $_DATA['id'] - номер проекта .
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного закрытия.
* ["result"] => true, если успешно (редирект) , false если нет.
*/
public function addusl($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$pr=$this->getdata($id,true);
if ($pr['seo_stat']!=0) return array("HTML"=>$this->L('PROJECTS_STATUS_INVALID'),'result'=>false);
$currency=$this->__currencies_getdata($pr['currency']);
$_DATA_FOR_HTML=array();
// $this->get_uslug_list();
$_DATA_FOR_HTML['MESSAGES']='';
$_DATA_FOR_HTML['CAPTION']='';
$POST=$_DATA['POST'];
// $pr=$this->getdata($id);
$_DATA_FOR_HTML['id']=$id;
$total_price=0;
if (isset($POST['act'])){
parent::$DB->edit_record(TABLE_PROJECTS,$pr['id'],array('seo_stat'=>1));
$kws_in=$POST['qids'];
foreach ($pr['kws_array'] as $kw){
parent::$DB->edit_record(TABLE_SQUERY,$kw['id'],array('use_indogovor'=>in_array($kw['id'],$kws_in)));
}
return array("HTML"=>false,'result'=>true);
}
$counter=0;
foreach ($pr['kws_array'] as $kw){
$_DATA_FOR_HTML['KEYWORDS'][$counter++]=$kw;
$total_price+=$kw['base_price'];
}
$_DATA_FOR_HTML['total_price']=$total_price;
$_DATA_FOR_HTML['currency']= $currency['short'];
return array("HTML"=>parent::$HTML->ini_insert("projects/addusl.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
public function showpos($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$_DATA_FOR_HTML=array();
$pr=$this->getdata($id,true);
// $pos=$this->__rserequest_queries($pr);
$URLid=$pr['URLid'];
$ses=array();
$se_list=$this->__searchengines_getlist();
foreach ($se_list as $se) $ses[$se['ucode']]=$se['name'];
$_DATA_FOR_HTML['QUERIES']=array();
$counter=0;
foreach ($pr['kws_array'] as $q){
$ktxt=$q['txt'];
$rows=$this->__positions_sitepositions(array('qid'=>$q['qid'],'URLid'=>$URLid));
foreach ($rows as $p){
$q['query']=$ktxt;
if ($p['search_id'])
$q['sname']=$ses[$p['search_id']];
// $q['domain']=$p['domain'];
$q['position']=$p['position'];
$q['scan_date']=date("d.m.Y H:i",$p['scan_date']);
$_DATA_FOR_HTML['QUERIES'][$counter++]=$q;
}
}
return array("HTML"=>parent::$HTML->ini_insert("projects/positions.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
public function showprice($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$POST=$_DATA['POST'];
$this->test_access($meid,$id);
if (!parent::$ME['data']['can_markword'] && $id>0||$id==0) die('Access denied');
$_DATA_FOR_HTML=array();
$pr=$this->getdata($id,true);
$tarif=$this->__tarifs_getdata(parent::$ME['data']['tarif']);
$baseprice_price=$tarif['baseprice_price'];
$currency=$this->__currencies_getdata($pr['currency']);
$count=$this->__counts_getdata(parent::$ME['data']['count_'.$pr['currency']]);
$baseprice_price *= $currency['course'];
$balance=$count['realv']+$count['bonusv'];
$_DATA_FOR_HTML['QUERIES']=array();
$counter=0;$counter2=0;
foreach ($pr['kws_array'] as $q){
if ($q['base_price']==0) $counter2++;
$_DATA_FOR_HTML['QUERIES'][$counter++]=$q;
}
$spis=$counter2*$baseprice_price;
// $comission_mult=
$counts=array($count['id']=>$count);
$result=$this->__operations_payforproject('price', $pr['currency'], $pr['id'],$spis,array(0,$count['id'],0),$counts,1,true);
// var_dump($result);
// exit;
if (isset($POST['post_data'])&&$result==0){
$pr['cu_course']=$currency['course'];
$result=$this->__operations_payforproject('price', $pr['currency'], $pr['id'],$spis,array(0,$count['id'],0),$counts,1);
if ($result==0){
$this->__squery_priceprice($pr);
}
// $this->__operations_payproject(array('count_id'=>$count['id'],'summ'=>$spis,'currency'=>$pr['currency'],'act'=>'price'));
return array("HTML"=>$this->L('PROJECTS_PRICEDONE'),'result'=>true);
}
$_DATA_FOR_HTML['N']=$counter;
$_DATA_FOR_HTML['N2']=$counter2;
$_DATA_FOR_HTML['pid']=$id;
$_DATA_FOR_HTML['allprice']=round($spis,2);
$_DATA_FOR_HTML['balance']=$balance;
$_DATA_FOR_HTML['ok']=$result==0;
$_DATA_FOR_HTML['currency']= $currency['short'];
return array("HTML"=>parent::$HTML->ini_insert("projects/showprice.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
public function managerreq($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$pr=$this->getdata($id);
if ($pr['mid']==0)
parent::$DB->edit_record(TABLE_PROJECTS,$id,array('mid'=>-1));
}
public function managerreqc($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$pr=$this->getdata($id);
if ($pr['mid']==-1)
parent::$DB->edit_record(TABLE_PROJECTS,$id,array('mid'=>0));
}
}
?>
Энди (19:40:38 4/05/2009)
бляяяяяяяяяяяяяяяяяяяяяяяяя
читать дальше<?
class CProjects extends Manager{
var $forms=array();
var $cache_list2=array();
var $owner=1;
var $f='uid';
//===============================================================
// Общие функции
//===============================================================
/*
Функция получения данных
Входные данные:
* $id - id проекта.
Выходные данные:
* ассоциативный массив с данными проекта.
*/
public function getdata($id,$withkw=false){
if (!array_key_exists($id,$this->cache_list)){
parent::$DB->query ("SELECT p.*, u.URL
FROM `".TABLE_PROJECTS."` AS p
LEFT JOIN `".TABLE_URLS."` AS `u` ON u.id=p.URLid
WHERE p.`id`=".$id."" );
$this->cache_list[$id]=parent::$DB->get_one();
}
$data=$this->cache_list[$id];
if ($withkw&&!array_key_exists($id,$this->cache_list2)){
$kws_array=$this->__squery_get_data_P($id);
$this->cache_list2[$id]=$kws_array;
}
if ($withkw) {
$data['kws_array']=$this->cache_list2[$id];
$kws=array();foreach ($data['kws_array'] as $k) $kws[]=$k['txt'];
$data['keywords']=implode("\r\n",$kws);
}
return $data;
}
/*
Функция получения данных
Входные данные:
* $ids - id проектов через запятую.
Выходные данные:
* массив ассоциативных массивов с данными проектов.
*/
public function getplist($_DATA){
$data=array();
$_DATA['where'].=' AND c.type=3';
$_DATA['group']='p.id';
$dob= parent::$DB->construct_query($_DATA);
$qr="SELECT p.*,u.URL,c.realv,c.bonusv,c.creditv
FROM `".TABLE_PROJECTS."` AS `p`
LEFT JOIN `".TABLE_URLS."` AS `u` ON u.id=p.URLid
LEFT JOIN `".TABLE_COUNTS."` AS `c` ON c.owner=p.id
".$dob;
parent::$DB->query ($qr);
return parent::$DB->getlist('');;
}
/*
Функция смены статуса активности проекта
Входные данные:
* $_DATA['act'] - новый статус.
* $_DATA['id'] - ид проекта.
Выходные данные:
true 72-9-28
*/
public function project_activate($_DATA){
$act=intval($_DATA['act']);
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$dis= $_DATA['dis'];
$comments=(isset($_DATA['comments']))?parent::$DB->escape($_DATA['comments']):'';
$this->test_access($meid,$id);
$old_data=$this->getdata($id);
$can_deactivate= parent::$ME['data']['can_editproject']&&($old_data['status']==1&&$old_data['seo_stat']<3);
$can_activate= parent::$ME['data']['can_editproject']&&($old_data['status']==0);
$can_close= parent::$ME['data']['can_editproject']&&($old_data['status']==1 && $old_data['seo_stat']!=3);
if ($act==1&&!$can_activate) die('Access denied');
if ($act==0&&!$can_deactivate) die('Access denied');
if ($act==2&&!$can_close) die('Access denied');
$rashod=0;
if (isset($_DATA['rashod']) && $act==1) $rashod=$_DATA['rashod'];
$dop='';$dopol='';
if ($comments) {$dop.=", `comments`='".$comments."' ";$dopol=$this->L('PROJECTS_CLOSECAUSE').$comments;}
if ($act==1) {$dop.=", `time_activate`=".time().", `time_pospay`=".(time()+86400)." ";}
parent::$DB->query("UPDATE `".TABLE_PROJECTS."` SET `status`=$act, `rashod`='$rashod' $dop WHERE id=".$id);
$count=$this->__counts_getdata($old_data['payer_id']);
$counts=array($count['id']=>$count);
// print ($rashod)ie();
if ($rashod>0)
$this->__operations_payforproject('pos', $old_data['currency'], $id,$rashod*$dis,array(0,$old_data['payer_id'],0),$counts,1);
$this->_add_to_log($this->LOGS['3'],array(
'STATUS'=>$this->status_text($act),
'NAME'=>$old_data['name'],
'DOPOL'=>$dopol ,'pid'=>$id
));
return true;
}
public function mainstart($pid,$scid){
$scheme=$this->_schemes_getdatafull($scid);
$npr=array();
$npr['seo_stat']=3;
$npr['time_dogovor']=time();
$npr['time_dogovorpay']=time()+86400;
$npr['stagen']=1;
parent::$DB->edit_record(TABLE_PROJECTS,$pid,$npr);
}
//===============================================================
// Вспомогательные функции
//===============================================================
/*
Функция проверяет доступ к проекту $id клиента $uid
Входные данные:
* $uid - id клиента.
* $id - id проекта.
Выходные данные:
true / завершение работы скрипта + редирект.
*/
public function test_access($meid,$id=0){
if (!$meid) {return redirect(BASEPATH.'/index/',AUTH_NEED)ie();}
$data=array();
if ($id){
$data=$this->getdata($id);
if (!isset($data[$this->f]) || $data[$this->f]!=$meid) {
redirect(BASEPATH.'/index/',AUTH_INVALID)ie();
}
}
return true;
}
/*
Функция добавления проекта.
Входные данные:
* $_DATA - ассоциативный массив с данными.
ВНИМАНИЕ! Нет проверки входных данных - все поля должны быть в таблице БД.
Выходные данные:
* id нового проекта.
*/
private function add_project($_DATA){
$kwa=array();
if (isset($_DATA['keywords'])){
$kw=trim($_DATA['keywords']);
if (strlen($kw)>0) $kwa=explode("\n",$kw);
unset($_DATA['keywords']);
}
$URL=norm_URL($_DATA['URL']);
unset($_DATA['URL']);
$_DATA['URLid']=$this->__urls_update($URL);
$_DATA['time_create']=time();
$_DATA['payer_id']=parent::$ME['data']['count_'.$_DATA['currency']];
$r1= parent::$DB->add_record(TABLE_PROJECTS,$_DATA);
if (!$r1) return false;
$cnt=$this->__counts_create($_DATA['currency'],3,$r1);
$this->__squery_editlist(array('kws'=>$kwa,'pid'=>$r1));
parent::$DB->add_record(TABLE_PROJECTS,array('count_id'=>$cnt),$r1);
return $r1;
}
/*
Функция редактирования проекта.
Входные данные:
* $id - номер проекта.
* $_DATA - ассоциативный массив с данными. $_DATA['login'] и т.п.
ВНИМАНИЕ! Нет проверки входных данных - все поля должны быть в таблице БД.
Выходные данные:
нет
*/
private function edit_project($id,$_DATA){
$kwa=array();
if (isset($_DATA['keywords'])){
$kw=trim($_DATA['keywords']);
$kwa1=array();
if (strlen($kw)>0) $kwa1=explode("\n",$kw);
foreach ($kwa1 as $kw1) {$kw1=trim($kw1);if ($kw1!='') $kwa[]=$kw1;}
unset($_DATA['keywords']);
$old=$this->getdata($id,true);
$tarif=$this->__tarifs_getdata(parent::$ME['data']['tarif']);
$curr=$this->__currencies_getdata($old['currency']);
if ($old['status']==1){
$deltakw=count($kwa)-count($old['kws_array']);
if ($deltakw>0){
if ($tarif['rashod_each']>0){
$rashod=$deltakw*$tarif['rashod_each']*$curr['course'];
$count=$this->__counts_getdata($old['payer_id']);
$counts=array($count['id']=>$count);
//$this->__operations_payproject(array('count_id'=>$old['payer_id'],
// 'summ'=>$rashod,'currency'=>$old['currency'],'act'=>'pos'));
$this->__operations_payforproject('pos', $old['currency'], $old['id'],$rashod,array(0,$old['payer_id'],0),$counts,1);
}
}
}
$_DATA['rashod']=count($kwa)*$tarif['rashod_each']*$curr['course'];
}
$r1= parent::$DB->edit_record(TABLE_PROJECTS,$id,$_DATA);
if (!$r1) return false;
$this->__squery_editlist(array('kws'=>$kwa,'pid'=>$id));
return $r1;
}
/*
Текстовые статусы для проектов.
Входные данные:
$n - номер статуса.
Выходные данные:
* текст- его название.
*/
private function status_text($n){
$key= 'PROJECTS_STATUS_'.$n;
$rt=$this->L($key);
if ($rt=='') return $this->L('PROJECTS_STATUS_999');
else return $rt;
}
/*
определение числа запросов для пользователя $uid
*/
private function get_kw_count(){
$meid=parent::$ME['id'];
$data=array();
$qr="SELECT COUNT(s.id) AS 'words_count'
FROM `".TABLE_PROJECTS."` AS `p`
LEFT JOIN `".TABLE_SQUERY."` AS `s` ON s.pid=p.id
WHERE p.status=1 AND p.`".$this->f."`=$meid AND p.payer_k=".$this->owner."
GROUP BY p.id ;";
parent::$DB->query ($qr);
//print $qr;
if (parent::$DB->num_rows()>0){
$cnt=0;
while ($r=parent::$DB->next_record()) $cnt+=$r['words_count'];
return $cnt;
}
return 0;
}
/*
вспомогательная функция - аналог explode()
*/
private function explode2($stri,$del="\r\n"){
$stri=trim($stri);
$rt=array();
if ($stri!='') $rt=explode($del,$stri);
return $rt;
}
private function ya_indexed($URL){
$url='yandex.ru/yandsearch?serverurl='.$URL;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//$follow_location);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$result=curl_exec($ch);
if (preg_match('#'.preg_quote('').'[^><]*?(\d+)[^><]*?'.preg_quote('').'#',$result,$match)){
return 1;
}
return 0;
}
//===============================================================
// Ajax функции
//===============================================================
public function ajax_edit($_DATA=''){
$POST=$_DATA;
$id=intval($POST['pid']);
$meid=parent::$ME['id'];
$_DATA_FOR_HTML=array();
$errors=true;
$this->test_access($meid,$id);
$groups=array();
if ($id==0)$groups[]=0;
else $groups[]=1;
$this->checkform('projects',$groups);
$data=$this->forms['projects']->get_PHP_data($POST);
$errors='';
$errors.=$this->forms['projects']->PHP_validator($data);
// if ($data['guest'] && $data['gst_psw']=='') {unset($data['gst_psw']);}
if (isset($data['URL'])) $data['URL']=norm_URL($data['URL']);
if (!$id){
if (gethostbyname($data['URL'])==$data['URL']) $errors.=$this->L('PROJECTS_URLNOTFOUND');
if (!in_array( $data['currency'],array(1,2,3)) ) $errors.='Fatal currency error
';
$data['ya_indexed']=$this->ya_indexed($data['URL']);
}
if ($errors=='') {
/* unset($data['gst_psw2']);
if (isset($data['gst_psw']) && !$data['guest']) unset($data['gst_psw']);
if (isset($data['gst_psw'])) {
$data['gst_psw']=create_pass($data['gst_psw']);
} */
$data[$this->f]=$meid;
if ($id==0) {
$data['status']='0';
$ret=$this->add_project($data);
$this->_add_to_log($this->LOGS['0'],array('NAME'=>$data['name'],'pid'=>$ret));
}else{
unset($data['URL']);
$this->edit_project($id,$data);
$this->_add_to_log($this->LOGS['1'],array('pid'=>$id,'NAME'=>$data['name']));
}
jQuery('#messages')->html('');
jQuery('#editform')->html($this->L('CHANGES_DONE'));
jQuery::evalScript("document.location.href='".BASEPATH."/project_list/';");
$errors=false;
}else{
jQuery('#messages')->html($errors);
}
}
//===============================================================
// Основные функции
//===============================================================
/*
Функция отображает список проектов.
*/
public function start($_DATA){
$meid=parent::$ME['id'];
$this->test_access($meid);
$me=parent::$ME['data'];
$counts=$this->__counts_getdata2(2,$me['id']);
$currencies=$this->__currencies_getlist('id');
$_DATA_FOR_HTML =array();
$_DATA_FOR_HTML_1 =array();
$_DATA_FOR_HTML_1['can_viewbalance']=parent::$ME['data']['can_viewbalance'];
if ($me['can_viewbalance'] ){
$_DATA_FOR_HTML_1['BALANCE']=array();
for ($i=0;$i<3;$i++){
$c=$counts[$i];
$c['currency']=$currencies[$c['curr_id']]['name1'];
$_DATA_FOR_HTML_1['BALANCE'][$i]=$c;
}
}
$rows=$this->getplist(array('where'=>'p.`'.$this->f.'`='.$meid,
'order'=>' `URL` ASC'));
$numr=count($rows);$mids=array(); $uids=array();
for ($counter=0;$counter<$numr;$counter++){$mids[]=$rows[$counter]['mid'];$uids[]=$rows[$counter]['uid']; }
if ($this->f!='mid'&&$mids)
$this->__managers_create_data_IDS($mids);
for ($counter=0;$counter<$numr;$counter++){
$row=$rows[$counter];
if ($this->f=='uid'){
if ($row['mid']>0){
$m= $this->__managers_getdata($row['mid']);
if ($m){
$row['manager_fio']=fio($m['famil'],$m['ima'],$m['otch']);
$row['manager_link']=BASEPATH.'/manager_show/'.$m['id'];
}else {$row['manager_fio']=$this->L('PROJECTS_UNKNOWN');}
}
}
//$row['rashod']=round($row['rashod']*$me['skidka'],1);
$row['realv']=round($row['realv']);
$row['creditv']=round($row['creditv']);
$row['statustext']=ucfirst($this->status_text($row['status']));
$row['can_editproject']= $me['can_editproject']&&($row['status']==0||$row['status']==1&&$row['seo_stat']<3);
$row['can_activate']= $me['can_editproject']&&($row['status']==0&&$row['payer_k']==$this->owner);
$row['can_deactivate']= $me['can_editproject']&&($row['status']==1&&$row['seo_stat']<3&&$row['payer_k']==$this->owner);
$row['can_close']= $me['can_editproject']&&($row['status']==0&&$row['seo_stat']!=3);
$row['cu_short']=$currencies[$row['currency']]['short'];
$_DATA_FOR_HTML["PROJECTS"][$counter]=$row;
}
$se_list=$this->__searchengines_getlist();
$_DATA_FOR_HTML['SEARCHES']=array();$i=0;
foreach ($se_list as $se){
$_DATA_FOR_HTML['SEARCHES'][$i++]=$se;
}
$_DATA_FOR_HTML['can_addproject']= $me['can_addproject'];
$_DATA_FOR_HTML['can_markword']= $me['can_markword'];
// print_r($_DATA_FOR_HTML
$HTML=parent::$HTML->ini_insert("projects/view_all.tpl",$_DATA_FOR_HTML);
$_DATA_FOR_HTML_1['PLIST']=$HTML;
return array("HTML"=>parent::$HTML->ini_insert("projects/start.tpl",$_DATA_FOR_HTML_1),
"result"=>true,
"cfg"=>parent::$HTML->config);
}
/*
Функция редактирования/создания проекта
Входные данные:
* $_DATA['POST'] - массив $_POST;
* $_DATA['id'] - номер проекта (0 для нового).
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного редактирования.
* ["result"] => true, если редактирование успешно (редирект) , false если нет.
*/
public function edit($_DATA){
$POST=$_DATA['POST'];
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$_DATA_FOR_HTML=array();
$errors=true;
$this->test_access($meid,$id);
//print_r(parent::$ME['data']);
if (!parent::$ME['data']['can_editproject'] && $id>0) die('Access denied');
if (!parent::$ME['data']['can_addproject'] && $id==0) die('Access denied');
$se_list=$this->__searchengines_getlist();
$se_list2=array();
foreach ($se_list as $se) {
$se_list2[]=array('text'=>$se['name'],'value'=>$se['id']);
}
$groups=array();
if ($id==0)$groups[]=0;
else $groups[]=1;
$this->checkform('projects',$groups);
$currencylist=$this->__currencies_getlist();
$currencylist2=array();
foreach($currencylist as $currency)
{$currencylist2[] = array('text'=>$currency['name1'],'value'=>$currency['id']); }
$user=parent::$ME['data'];
$this->forms['projects']->set_select_options('currency',$currencylist2);
$this->forms['projects']->bind(array('currency'=>$user['pref_currency']));
$this->forms['projects']->set_select_options('SS_ids',$se_list2);
// print_r($this->forms['projects']->f);
// $_DATA_FOR_HTML['register']=$id==0;
$this->forms['projects']->bind(array('SS_ids'=>'2,3,4,5'));
$_DATA_FOR_HTML['each_kw']=0; $_DATA_FOR_HTML['kw_count']=0;
if ($id>0) {
$data=$this->getdata($id,true);
if (empty($data)) return array("HTML"=>'invalid id','result'=>false);
$this->forms['projects']->bind($data);
$curr=$this->__currencies_getdata($data['currency']);
$_DATA_FOR_HTML['currency']=$curr['short'];
//
if ( $data['status']==1){
$tarif=$this->__tarifs_getdata(parent::$ME['data']['tarif']);
$_DATA_FOR_HTML['each_kw']=$tarif['rashod_each']*$curr['course'];
}
$_DATA_FOR_HTML['kw_count']=count($data['kws_array']);
}
$_DATA_FOR_HTML_1=$this->forms['projects']->get_HTML_data();
$_DATA_FOR_HTML['FORMA']=parent::$HTML->ini_insert("forms.tpl",$_DATA_FOR_HTML_1);
$_DATA_FOR_HTML['validator']=$this->forms['projects']->get_JS_validator();
$_DATA_FOR_HTML['id']=$id;
return array("HTML"=>parent::$HTML->ini_insert("projects/edit.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
/*
Функция активации проекта
Входные данные:
* $_DATA['id'] - номер проекта .
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного активирования.
* ["result"] => true, если активация успешна (редирект) , false если нет.
*/
public function activate($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$_DATA_FOR_HTML=array();
$_DATA_FOR_HTML['MESSAGES']='';
$_DATA_FOR_HTML['CAPTION']='';
$errors=true;
$POST=$_DATA['POST'];
$user=parent::$ME['data'];
$pr=$this->getdata($id,true);
$can_activate= $user['can_editproject']&&($pr['status']==0);
if (!$can_activate) die('Access denied');
$curr=$this->__currencies_getdata($pr['currency']);
$c=strtolower($curr['mychar']);
$me=parent::$ME['data'];
$count=$this->__counts_getdata($pr['payer_id']);
$balance=$count['realv']+$count['bonusv'];
$kw_p_count=count($pr['kws_array']);
$infodata=array('before'=>$this->get_kw_count(),'pcount'=>$kw_p_count,
'tarif'=>$user['tarif'],'balance'=>$balance,'pid'=>$id,'currency'=>$curr);
$info=$this->__tarifs_get_tarif_info($infodata);
$_DATA_FOR_HTML['id']=$id;
$_DATA_FOR_HTML['INFO']=$info['HTML'];
$inf=$info['info'];
$_DATA_FOR_HTML['ok']=0; // 0-ok 1-нехватка средств, 2-превышение лимита.
$ownerok=$pr['payer_k']==$this->owner;
$allok=$inf['limitok']&&$inf['balanceok']&&$ownerok;
if (isset($POST['act'])&&$allok){
$this->project_activate(array('id'=>$id,'act'=>1,'rashod'=>$inf['rashod'],'dis'=>$inf['dis']));
return array("HTML"=>false,'result'=>true);
}
$_DATA_FOR_HTML['allok']=$allok;
$_DATA_FOR_HTML['balanceok']=$inf['balanceok'];
$_DATA_FOR_HTML['limitok']=$inf['limitok'];
$_DATA_FOR_HTML['ownerok']=$ownerok;
return array("HTML"=>parent::$HTML->ini_insert("projects/activate.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
/*
Функция закрытия проекта
Входные данные:
* $_DATA['id'] - номер проекта .
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного закрытия.
* ["result"] => true, если успешно (редирект) , false если нет.
*/
public function closing($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$_DATA_FOR_HTML=array();
$_DATA_FOR_HTML['MESSAGES']='';
$_DATA_FOR_HTML['CAPTION']='';
$POST=$_DATA['POST'];
$errors=true;
$pr=$this->getdata($id);
$can_close= parent::$ME['data']['can_editproject']&&($pr['status']==1&&$pr['seo_stat']!=3);
if (!$can_close) die('access_denied');
$_DATA_FOR_HTML['id']=$id;
if (isset($POST['act'])){
$this->project_activate(array('id'=>$id,'act'=>3,'comments'=>$POST['comments']));
return array("HTML"=>false,'result'=>true);
}
return array("HTML"=>parent::$HTML->ini_insert("projects/close.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
/*
Функция продвижения проекта
Входные данные:
* $_DATA['id'] - номер проекта .
Выходные данные:
* ["HTML"] => HTML-код формы, либо false в случае успешного закрытия.
* ["result"] => true, если успешно (редирект) , false если нет.
*/
public function addusl($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$pr=$this->getdata($id,true);
if ($pr['seo_stat']!=0) return array("HTML"=>$this->L('PROJECTS_STATUS_INVALID'),'result'=>false);
$currency=$this->__currencies_getdata($pr['currency']);
$_DATA_FOR_HTML=array();
// $this->get_uslug_list();
$_DATA_FOR_HTML['MESSAGES']='';
$_DATA_FOR_HTML['CAPTION']='';
$POST=$_DATA['POST'];
// $pr=$this->getdata($id);
$_DATA_FOR_HTML['id']=$id;
$total_price=0;
if (isset($POST['act'])){
parent::$DB->edit_record(TABLE_PROJECTS,$pr['id'],array('seo_stat'=>1));
$kws_in=$POST['qids'];
foreach ($pr['kws_array'] as $kw){
parent::$DB->edit_record(TABLE_SQUERY,$kw['id'],array('use_indogovor'=>in_array($kw['id'],$kws_in)));
}
return array("HTML"=>false,'result'=>true);
}
$counter=0;
foreach ($pr['kws_array'] as $kw){
$_DATA_FOR_HTML['KEYWORDS'][$counter++]=$kw;
$total_price+=$kw['base_price'];
}
$_DATA_FOR_HTML['total_price']=$total_price;
$_DATA_FOR_HTML['currency']= $currency['short'];
return array("HTML"=>parent::$HTML->ini_insert("projects/addusl.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
public function showpos($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$_DATA_FOR_HTML=array();
$pr=$this->getdata($id,true);
// $pos=$this->__rserequest_queries($pr);
$URLid=$pr['URLid'];
$ses=array();
$se_list=$this->__searchengines_getlist();
foreach ($se_list as $se) $ses[$se['ucode']]=$se['name'];
$_DATA_FOR_HTML['QUERIES']=array();
$counter=0;
foreach ($pr['kws_array'] as $q){
$ktxt=$q['txt'];
$rows=$this->__positions_sitepositions(array('qid'=>$q['qid'],'URLid'=>$URLid));
foreach ($rows as $p){
$q['query']=$ktxt;
if ($p['search_id'])
$q['sname']=$ses[$p['search_id']];
// $q['domain']=$p['domain'];
$q['position']=$p['position'];
$q['scan_date']=date("d.m.Y H:i",$p['scan_date']);
$_DATA_FOR_HTML['QUERIES'][$counter++]=$q;
}
}
return array("HTML"=>parent::$HTML->ini_insert("projects/positions.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
public function showprice($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$POST=$_DATA['POST'];
$this->test_access($meid,$id);
if (!parent::$ME['data']['can_markword'] && $id>0||$id==0) die('Access denied');
$_DATA_FOR_HTML=array();
$pr=$this->getdata($id,true);
$tarif=$this->__tarifs_getdata(parent::$ME['data']['tarif']);
$baseprice_price=$tarif['baseprice_price'];
$currency=$this->__currencies_getdata($pr['currency']);
$count=$this->__counts_getdata(parent::$ME['data']['count_'.$pr['currency']]);
$baseprice_price *= $currency['course'];
$balance=$count['realv']+$count['bonusv'];
$_DATA_FOR_HTML['QUERIES']=array();
$counter=0;$counter2=0;
foreach ($pr['kws_array'] as $q){
if ($q['base_price']==0) $counter2++;
$_DATA_FOR_HTML['QUERIES'][$counter++]=$q;
}
$spis=$counter2*$baseprice_price;
// $comission_mult=
$counts=array($count['id']=>$count);
$result=$this->__operations_payforproject('price', $pr['currency'], $pr['id'],$spis,array(0,$count['id'],0),$counts,1,true);
// var_dump($result);
// exit;
if (isset($POST['post_data'])&&$result==0){
$pr['cu_course']=$currency['course'];
$result=$this->__operations_payforproject('price', $pr['currency'], $pr['id'],$spis,array(0,$count['id'],0),$counts,1);
if ($result==0){
$this->__squery_priceprice($pr);
}
// $this->__operations_payproject(array('count_id'=>$count['id'],'summ'=>$spis,'currency'=>$pr['currency'],'act'=>'price'));
return array("HTML"=>$this->L('PROJECTS_PRICEDONE'),'result'=>true);
}
$_DATA_FOR_HTML['N']=$counter;
$_DATA_FOR_HTML['N2']=$counter2;
$_DATA_FOR_HTML['pid']=$id;
$_DATA_FOR_HTML['allprice']=round($spis,2);
$_DATA_FOR_HTML['balance']=$balance;
$_DATA_FOR_HTML['ok']=$result==0;
$_DATA_FOR_HTML['currency']= $currency['short'];
return array("HTML"=>parent::$HTML->ini_insert("projects/showprice.tpl",$_DATA_FOR_HTML),'result'=>false,
"cfg"=>parent::$HTML->config);
}
public function managerreq($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$pr=$this->getdata($id);
if ($pr['mid']==0)
parent::$DB->edit_record(TABLE_PROJECTS,$id,array('mid'=>-1));
}
public function managerreqc($_DATA){
$id=intval($_DATA['id']);
$meid=parent::$ME['id'];
$this->test_access($meid,$id);
$pr=$this->getdata($id);
if ($pr['mid']==-1)
parent::$DB->edit_record(TABLE_PROJECTS,$id,array('mid'=>0));
}
}
?>
Энди (19:40:38 4/05/2009)
бляяяяяяяяяяяяяяяяяяяяяяяяя