Changeset 1460

Show
Ignore:
Timestamp:
02/04/10 11:42:06 (5 weeks ago)
Author:
teow
Message:

<?php
class Log extends AppModel? {

var $name = 'Log';
var $validate = array(

'user_id' => array('numeric'),
'controller' => array('notempty'),
'action' => array('notempty'),
'url' => array('notempty')

);

//The Associations below have been created with all possible keys, those that are not needed can be removed

/*remove the user and log relation

var $belongsTo = array(

'User' => array('className' => 'User',

'foreignKey' => 'user_id',
'conditions' => ,
'fields' =>
,
'order' =>

)

);

*/

function getReport($type) {


if ($type == 'USERS') {

//get user and login information
$sql3 = "select u.id, u.name, u.job_title, t.long_name

from titles as t, users as u
where u.deleted!='1' and t.id=u.title_id
group by u.id
order by u.name asc";

$m = $this->query($sql3);
$user_id=implode(',',Set::extract($m,'{n}.u.id'));


//get login info
$sql = "select l.user_id, count(l.id) as login from logs as l

where l.url='/' and l.user_id in (".$user_id.")
group by l.user_id";

$p = $this->query($sql);
$pval=set::extract($p,'{n}.l.user_id');


//get comment info
$sql1 = "select c.user_id,count(c.id) as comment from comments as c

where c.user_id in (".$user_id.") group by c.user_id";

$o = $this->query($sql1);
$oval=set::extract($o,'{n}.c.user_id');


//get status info
$sql2 = "select us.updater,count(us.id) as feedback from userstatuses as us

where us.updater in (".$user_id.") group by us.updater";

$n=$this->query($sql2);
$nval=set::extract($n,'{n}.us.updater');
$sql2a = "select gs.user_id,count(gs.id) as feedback from groupstatuses as gs

where gs.user_id in (".$user_id.") group by gs.user_id";

$na = $this->query($sql2a);
$naval=set::extract($na,'{n}.gs.user_id');


foreach ($m as $mkey=>$mval) {

$m[$mkey][0]feedback? =

$this->getInfo($mvalu?id?,$nval,$n,'feedback')+
$this->getInfo($mvalu?id?,$naval,$na,'feedback');

$m[$mkey]0?comment?=$this->getInfo($mvalu?id?,$oval,$o,'comment');
$m[$mkey]0?login?=$this->getInfo($mvalu?id?,$pval,$p,'login');

}
return $m;


} else if ($type == 'MEETINGS') {

// get num of meetings for each committee
$sql = "select c.name, m.meeting_title, count(m.id) as kuantiti

from committees as c
join meetings as m on (c.id=m.committee_id and m.deleted!='1')
where c.deleted!='1'
group by m.meeting_title
order by c.name asc, m.meeting_title asc";

$r = $this->query($sql);
$meeting_title='"'.implode('","',Set::extract($r,'{n}.m.meeting_title')).'"';

// get num of decisions for each meeting
$sql4 = "select m.meeting_title, count(d.id) as numofdec

from meetings as m, decisions as d
where m.deleted!='1' and d.deleted!='1' and d.meeting_id=m.id
and m.meeting_title in (".$meeting_title.")
group by m.meeting_title";

$q = $this->query($sql4);
$qval=set::extract($q,'{n}.m.meeting_title');


// get num of individual status for each meeting
$sql2 = "select m.meeting_title, count(us.id) as numofstat_usr

from meetings as m, decisions as d
left join userstatuses as us on (us.decision_id=d.id)
where d.meeting_id=m.id and m.deleted!='1' and d.deleted!='1'
and m.meeting_title in (".$meeting_title.")
group by m.meeting_title";

$s = $this->query($sql2);
$sval=set::extract($s,'{n}.m.meeting_title');


// get num of group status for each meeting
$sql3 = "select m.meeting_title, count(gs.id) as numofstat_grp

from meetings as m, decisions as d
left join groupstatuses as gs on (gs.decision_id=d.id)
where d.meeting_id=m.id and m.deleted!='1' and d.deleted!='1'
and m.meeting_title in (".$meeting_title.")
group by m.meeting_title";

$t = $this->query($sql3);
$tval=set::extract($t,'{n}.m.meeting_title');


// get num of individual implementor for each meeting
$sql5 = "select m.meeting_title, count(DISTINCT du.id) as numofdec_assg_usr

from meetings as m, decisions as d
left join decisions_users as du on (d.id=du.decision_id)
where m.id=d.meeting_id and m.deleted!='1' and d.deleted!='1'
and m.meeting_title in (".$meeting_title.")
group by m.meeting_title";

$u = $this->query($sql5);
$uval=set::extract($u,'{n}.m.meeting_title');

// get num of group implementor for each meeting
$sql6 = "select m.meeting_title, count(DISTINCT dg.id) as numofdec_assg_grp

from meetings as m, decisions as d
left join decisions_groups as dg on (d.id=dg.decision_id)
where m.id=d.meeting_id and m.deleted!='1' and d.deleted!='1'
and m.meeting_title in (".$meeting_title.")
group by m.meeting_title";

$v = $this->query($sql6);
$vval=set::extract($v,'{n}.m.meeting_title');


// combine all these into 1 nice array
foreach ($r as $rkey=>$rval) {

$r[$rkey]0?numofdec?=$this->getInfo($rvalm?meeting_title?,$qval,$q,'numofdec');
$r[$rkey]0?numofdec_assg_usr? = $this->getInfo($rvalm?meeting_title?,$uval,$u,'numofdec_assg_usr');
$r[$rkey]0?numofdec_assg_grp? = $this->getInfo($rvalm?meeting_title?,$vval,$v,'numofdec_assg_grp');
$r[$rkey]0?numofstat_usr? = $this->getInfo($rvalm?meeting_title?,$sval,$s,'numofstat_usr');
$r[$rkey]0?numofstat_grp? = $this->getInfo($rvalm?meeting_title?,$tval,$t,'numofstat_grp');

}
return $r;


}


}


/*describe getInfo

  • Find the needed information
  • @param $needle
  • @param $haystack
  • @param $array -the array of the info
  • @param $info - variable name of the needed info
  • @return the needed value

*/
function getInfo($needle,$haystack,$array,$info){

if(in_array($needle,$haystack)){

$key=array_search($needle,$haystack);
return $array[$key][0][$info];

}else{

return 0;

}

}

}
?>

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/app/models/log.php

    r1459 r1460  
    3131                    order by u.name asc"; 
    3232            $m = $this->query($sql3); 
     33            $user_id=implode(',',Set::extract($m,'{n}.u.id')); 
    3334             
    3435            //get login info 
    3536            $sql = "select l.user_id, count(l.id) as login from logs as l  
    36                     where l.url='/' group by l.user_id"; 
     37                    where l.url='/' and l.user_id in (".$user_id.") 
     38                    group by l.user_id"; 
    3739            $p = $this->query($sql); 
     40            $pval=set::extract($p,'{n}.l.user_id'); 
    3841             
    3942            //get comment info 
    4043            $sql1 = "select c.user_id,count(c.id) as comment from comments as c  
    41                     where c.user_id!=0 group by c.user_id"; 
     44                    where c.user_id in (".$user_id.") group by c.user_id"; 
    4245            $o = $this->query($sql1); 
     46            $oval=set::extract($o,'{n}.c.user_id'); 
    4347             
    4448            //get status info 
    4549            $sql2 = "select us.updater,count(us.id) as feedback from userstatuses as us 
    46                     where us.updater!=0 group by us.updater"; 
     50                    where us.updater in (".$user_id.") group by us.updater"; 
    4751            $n=$this->query($sql2); 
     52            $nval=set::extract($n,'{n}.us.updater'); 
    4853            $sql2a = "select gs.user_id,count(gs.id) as feedback from groupstatuses as gs  
    49                     where gs.user_id!=0 group by gs.user_id";        
     54                    where gs.user_id in (".$user_id.") group by gs.user_id";        
    5055            $na = $this->query($sql2a); 
     56            $naval=set::extract($na,'{n}.gs.user_id'); 
    5157             
    5258            foreach ($m as $mkey=>$mval) { 
    53                 $ncalc=0; 
    54                 foreach ($n as $nval) { 
    55                     if($nval['us']['updater']==$mval['u']['id']){ 
    56                         $ncalc=$nval[0]['feedback']; 
    57                     } 
    58                 } 
    59                 foreach ($na as $nval) { 
    60                     if($nval['gs']['user_id']==$mval['u']['id']){ 
    61                         $ncalc+=$nval[0]['feedback']; 
    62                     } 
    63                 } 
    64                 $m[$mkey][0]['feedback'] = $ncalc;  
    65                  
    66                 foreach ($o as $oval) { 
    67                     if ($oval['c']['user_id']==$mval['u']['id'])  
    68                         $m[$mkey]['0']['comment'] = $oval['0']['comment'];  
    69                 } 
    70                  
    71                 foreach ($p as $pval) { 
    72                     if ($pval['l']['user_id']==$mval['u']['id'])  
    73                         $m[$mkey]['0']['login'] = $pval['0']['login'];  
    74                 } 
     59                $m[$mkey][0]['feedback'] = 
     60                    $this->getInfo($mval['u']['id'],$nval,$n,'feedback')+ 
     61                    $this->getInfo($mval['u']['id'],$naval,$na,'feedback'); 
     62                $m[$mkey]['0']['comment']=$this->getInfo($mval['u']['id'],$oval,$o,'comment'); 
     63                $m[$mkey]['0']['login']=$this->getInfo($mval['u']['id'],$pval,$p,'login'); 
    7564            } 
    7665            return $m; 
    7766             
    7867        } else if ($type == 'MEETINGS') { 
    79             // get num of decisions for each meeting 
    80             $sql4 = "select m.meeting_title, count(d.id) as numofdec 
    81                     from meetings as m, decisions as d 
    82                     where m.deleted!='1' and d.deleted!='1' and d.meeting_id=m.id 
    83                     group by m.meeting_title"; 
    84             $q = $this->query($sql4); 
    85              
    8668            // get num of meetings for each committee 
    8769            $sql = "select c.name, m.meeting_title, count(m.id) as kuantiti 
     
    9274                    order by c.name asc, m.meeting_title asc"; 
    9375            $r = $this->query($sql); 
     76            $meeting_title='"'.implode('","',Set::extract($r,'{n}.m.meeting_title')).'"'; 
    9477 
     78            // get num of decisions for each meeting 
     79            $sql4 = "select m.meeting_title, count(d.id) as numofdec 
     80                    from meetings as m, decisions as d 
     81                    where m.deleted!='1' and d.deleted!='1' and d.meeting_id=m.id  
     82                    and m.meeting_title in (".$meeting_title.")  
     83                    group by m.meeting_title"; 
     84            $q = $this->query($sql4); 
     85            $qval=set::extract($q,'{n}.m.meeting_title');  
     86             
    9587            // get num of individual status for each meeting 
    9688            $sql2 = "select m.meeting_title, count(us.id) as numofstat_usr 
     
    9890                    left join userstatuses as us on (us.decision_id=d.id) 
    9991                    where d.meeting_id=m.id and m.deleted!='1' and d.deleted!='1' 
     92                    and m.meeting_title in (".$meeting_title.")  
    10093                    group by m.meeting_title"; 
    10194            $s = $this->query($sql2); 
     95            $sval=set::extract($s,'{n}.m.meeting_title');  
    10296                 
    10397            // get num of group status for each meeting 
     
    106100                    left join groupstatuses as gs on (gs.decision_id=d.id) 
    107101                    where d.meeting_id=m.id and m.deleted!='1' and d.deleted!='1' 
     102                    and m.meeting_title in (".$meeting_title.")  
    108103                    group by m.meeting_title"; 
    109104            $t = $this->query($sql3); 
     105            $tval=set::extract($t,'{n}.m.meeting_title');  
    110106                 
    111107            // get num of individual implementor for each meeting 
     
    114110                    left join decisions_users as du on (d.id=du.decision_id) 
    115111                    where m.id=d.meeting_id and m.deleted!='1' and d.deleted!='1'  
     112                    and m.meeting_title in (".$meeting_title.")  
    116113                    group by m.meeting_title"; 
    117114            $u = $this->query($sql5); 
     115            $uval=set::extract($u,'{n}.m.meeting_title');  
    118116 
    119117            // get num of group implementor for each meeting 
     
    122120                    left join decisions_groups as dg on (d.id=dg.decision_id) 
    123121                    where m.id=d.meeting_id and m.deleted!='1' and d.deleted!='1'  
     122                    and m.meeting_title in (".$meeting_title.")  
    124123                    group by m.meeting_title"; 
    125124            $v = $this->query($sql6); 
    126                  
     125            $vval=set::extract($v,'{n}.m.meeting_title');  
     126                
    127127            // combine all these into 1 nice array 
    128128            foreach ($r as $rkey=>$rval) { 
    129                 // make sure all index exist 
    130                 $r[$rkey]['0']['numofdec'] = '0'; 
    131                 $r[$rkey]['0']['numofdec_assg_usr'] = '0'; 
    132                 $r[$rkey]['0']['numofdec_assg_grp'] = '0'; 
    133                 $r[$rkey]['0']['numofstat_usr'] = '0'; 
    134                 $r[$rkey]['0']['numofstat_grp'] = '0'; 
    135                      
    136                 // merge with the rest of sql 
    137                 foreach ($q as $qval)  
    138                     if ($qval['m']['meeting_title']==$rval['m']['meeting_title'])  
    139                         $r[$rkey]['0']['numofdec'] = $qval['0']['numofdec'];  
    140                 foreach ($s as $sval)  
    141                     if ($sval['m']['meeting_title']==$rval['m']['meeting_title'])  
    142                         $r[$rkey]['0']['numofstat_usr'] = $sval['0']['numofstat_usr'];  
    143                 foreach ($t as $tval)  
    144                     if ($tval['m']['meeting_title']==$rval['m']['meeting_title'])  
    145                         $r[$rkey]['0']['numofstat_grp'] = $tval['0']['numofstat_grp'];  
    146                 foreach ($u as $uval)  
    147                     if ($uval['m']['meeting_title']==$rval['m']['meeting_title'])  
    148                         $r[$rkey]['0']['numofdec_assg_usr'] = $uval['0']['numofdec_assg_usr'];  
    149                 foreach ($v as $vval)  
    150                     if ($vval['m']['meeting_title']==$rval['m']['meeting_title'])  
    151                         $r[$rkey]['0']['numofdec_assg_grp'] = $vval['0']['numofdec_assg_grp'];  
     129                $r[$rkey]['0']['numofdec']=$this->getInfo($rval['m']['meeting_title'],$qval,$q,'numofdec'); 
     130                $r[$rkey]['0']['numofdec_assg_usr'] = $this->getInfo($rval['m']['meeting_title'],$uval,$u,'numofdec_assg_usr'); 
     131                $r[$rkey]['0']['numofdec_assg_grp'] = $this->getInfo($rval['m']['meeting_title'],$vval,$v,'numofdec_assg_grp'); 
     132                $r[$rkey]['0']['numofstat_usr'] = $this->getInfo($rval['m']['meeting_title'],$sval,$s,'numofstat_usr'); 
     133                $r[$rkey]['0']['numofstat_grp'] = $this->getInfo($rval['m']['meeting_title'],$tval,$t,'numofstat_grp'); 
    152134            } 
    153135            return $r; 
     
    156138        
    157139    } 
     140     
     141    /*describe getInfo 
     142     * Find the needed information 
     143     * @param $needle  
     144     * @param $haystack  
     145     * @param $array -the array of the info  
     146     * @param $info - variable name of the needed info 
     147     * @return the needed value  
     148    */ 
     149    function getInfo($needle,$haystack,$array,$info){ 
     150        if(in_array($needle,$haystack)){ 
     151            $key=array_search($needle,$haystack); 
     152            return $array[$key][0][$info]; 
     153        }else{ 
     154            return 0; 
     155        } 
     156    } 
    158157 
    159158}