3 require_once 'Pman/Core/DataObjects/Core_project.php';
5 class Pman_MTrack_DataObjects_Core_project extends Pman_Core_DataObjects_Core_project
9 * check who is trying to access this. false == access denied..
11 function checkPerm($lvl, $au)
13 // var_dump(array($lvl,$au));
18 if (!$au->company_id) {
21 if ($au->company()->comptype != 'OWNER') {
24 // owner.. - we can rely on perms...
26 return $au->hasPerm("Core.Projects_Member_Of",$lvl) || $au->hasPerm("Core.Projects_All",$lvl);
29 // any other action on perms has to be done by company onwer at present..
30 if (!$au || !$au->company_id || $au->company()->comptype != 'OWNER') {
34 return $au->hasPerm("Core.Projects_Member_Of",$lvl) || $au->hasPerm("Core.Projects_All",$lvl);
37 function applyFilters($q, $au, $roo)
39 $tn = $this->tableName();
41 $this->code = '*PUBLIC';
43 $this->selectAs(array('id','name','code')); // public an only see so much data.?
45 $roo->jdata($this->fetchAll(false,false,'toArray'));
47 // not sure why this used to say array().. for filter???
48 parent::applyFilters($q, $au, $roo);
50 if (!$au->hasPerm('Core.Projects_All', 'S')) {
51 $pdtn = $this->factory('ProjectDirectory')->tableName();
53 // default behaviour is to only allow access to projects
54 // where the user has a role..
58 (SELECT {$pdtn}.project_id FROM {$pdtn} WHERE
59 person_id = ". $au->id . " and role != ''
62 // can only see projects with repo's.. by default..
67 if (isset($q['_with_tickets'])) {
71 count(mtrack_ticket.id)
75 core_enum as join_status_id
77 join_status_id.id = mtrack_ticket.status
79 (join_status_id.name NOT IN('closed', 'on hold') OR mtrack_ticket.status = 0)
81 mtrack_ticket.project_id = core_project.id
88 if (isset($q['_mtrack_repos_only'])) {
89 //?/ should we hide closed projects by default even from admin?
90 $this->whereAdd("{$tn}.id in (SELECT distinct(project_id) FROM mtrack_repos)");
93 //$p->orderBy('{$tn}.name ASC');
94 //unset($p->client_id); // default projects serach enforces this..
95 //$ar = $p->fetchAll('id', 'name');
110 function projectPerm($project_id, $what, $cando)
115 $p = DB_DataObject::factory('Projects');
116 $p->get($project_id);
117 if (!$this->authUser) {
118 if ($p->code != '*PUBLIC') {
119 return false; // only public projects
124 // all permissions to view public stuff.
127 if (!$this->authUser->hasPerm($what, $cando)) {
128 echo "NO PERMS $what $cando";
129 echo '<PRE>'; print_r($this->authUser->getPerms());
133 //echo "COMPTYPE " . $this->authUser->company()->comptype ;
134 if ($this->authUser->company()->comptype == 'OWNER') {
136 if ($this->authUser->hasPerm('Core.Projects_All', $cando)) { // they can do what they like on all projects.
139 // return $p->hasPerm($what, $cando);
141 // otherwise they have to be a team member of that project.
143 $pd = DB_DataObject::factory('ProjectDirectory');
144 $pd->project_id = $project_id;
145 $pd->user_id = $this->authUser->id;
146 $pd->whereAdd("role != ''");
156 function notifyENDOFDAYMAIL($rcpt, $last_sent_date, $notify, $force)
158 // fisrst use history to show a list of changes between the dates.
159 //die("building end of day mail");
160 //DB_DataObject::debugLevel(1);
161 $start = date('Y-m-d H:i:s', strtotime($notify->act_start . ' - 1 DAY'));
162 $end = date('Y-m-d H:i:s', strtotime($notify->act_start));
164 $d = DB_DataObject::factory('mtrack_change');
165 $d->ontable = 'mtrack_ticket';
166 $d->whereAdd(" mtrack_change.changedate >= '$start' AND mtrack_change.changedate <= '$end'");
168 $d->autoJoinObject('mtrack_ticket');
169 $d->whereAdd('join_project_id_id.id = '. $this->pid());
171 $d->orderBy('mtrack_change.changedate ASC');
173 $res = $d->fetchAll();
176 // group it by projects...
178 foreach($res as $o) {
180 if (!isset($tickets[$o->ontable_id])) {
181 $tickets[$o->ontable_id] = clone($o);
182 $tickets[$o->ontable_id]->changes = array();
185 $tickets[$o->ontable_id]->changes[] = clone($o);
193 //print_r($obj);exit;
194 $ret = $rcpt->buildMail('mtrack_ticket_daily_changes', array(
196 'tickets' => $tickets,
197 'date' => date('d/M/Y', strtotime($notify->act_start)),
200 //print_r($ret);exit;
204 //$rcpt->sendTemplate('repo_daily_changes', $obj);
206 //echo '<PRE>'.htmlspecialchars(print_r($mr,true));