MTrackWeb.php
[web.mtrack] / MTrackWeb.php
1 <?php
2 /**
3  * every class extends this...
4  */
5  
6  
7 class MTrackWeb extends HTML_FlexyFramework_Page
8 {
9     var $template = 'wiki.html';
10     var $priorities = array();
11     var $severities = array();
12     var $link = false; // the link handler..
13     
14     function hasPerm($what, $cando) {
15         throw new Exception ("not supported yet");
16         return MTrackACL::hasAnyRights($what, $cando);
17     }
18     
19     function getAuthUser()
20     {
21         $u = DB_DataObject::factory('Person');
22         if (!$u->isAuth()) {
23             return false;
24         }
25         return $u->getAuthUser();
26     }
27     
28     function getAuth()
29     {
30         $this->registerClasses();
31         $ff = HTML_FlexyFramework::get();
32         if ($ff->cli) {
33             return true;
34         }
35         
36         // default timezone first..
37         $ff = HTML_FlexyFramework::get();
38         if (isset($ff->MTrack['timezone'])) {
39             date_default_timezone_set($ff->MTrack['timezone']);
40         }
41         
42         //MTrackConfig::boot(); // eak.. .remove me...
43       
44         $this->authUser = DB_DataObject::factory('Person')->getAuthUser();
45         if (!$this->authUser) {
46             return true; // we do allow people in this far..
47         }
48         
49         $me = MTrackAuth::whoami();
50         require_once 'MTrack/DataObjects/Userinfo.php';
51         $this->authUser = MTrack_DataObjects_UserInfo::get($me);
52         
53         // timezone setting... ???
54         if (!empty($this->authUser->timezone)) {
55             date_default_timezone_set($this->timezone);
56             return;
57         }
58         $ff = HTML_FlexyFramework::get();
59         if (isset($ff->MTrack['timezone'])) {
60             date_default_timezone_set($ff->MTrack['timezone']);
61         }
62         $this->authUser->setCurrentTimeZone();
63         
64         /// fixme...
65         //$this->authUser = 
66         return true; // anyone at present..
67     }
68     function get($loc='')
69     {
70                 
71         // 
72         if (!empty($loc)) {
73             die ("invalid location". htmlspecialchars($loc));
74         }
75         if ($this->authUser->userid == 'anonymous') {
76             die("wiki todo");
77             return HTML_FlexyFramework::run('Wiki'); 
78         }
79         return HTML_FlexyFramework::run('Wiki/Today'); 
80
81
82     }
83     function post()
84     {
85         header("Status: 404 Not Found");
86         die("not valid");
87     }
88     
89     
90     function initOptions()
91     {
92         
93          
94         $q = MTrackDB::q('select priorityname, value from priorities');
95
96         foreach ($q->fetchAll() as $row) {
97             $this->priorities[$row[0]] = $row[1];
98         }
99         $q = MTrackDB::q('select sevname, ordinal from severities');
100         
101         foreach ($q->fetchAll() as $row) {
102             $this->severities[$row[0]] = $row[1];
103         }
104
105     }
106     
107     function registerClasses()
108     {
109         require_once 'MTrack/Wiki.php';
110         require_once 'MTrack/Wiki/Item.php';
111         require_once 'MTrack/Milestone.php';
112         //require_once 'MTrack/Report.php';
113         require_once 'MTrack/ACL.php';
114         require_once 'MTrack/SearchDB.php';
115         require_once 'MTrack/Watch.php'; 
116         require_once 'MTrack/CommitChecker.php'; 
117         //require_once 'MTrack/Repo.php';
118         //require_once 'MTrack/SCM/Git/Repo.php';
119         //require_once 'MTrack/SCM/Svn.php';
120         //require_once 'MTrack/SCM/Hg.php';
121         require_once 'MTrackWeb/LinkHandler.php';
122          require_once 'MTrack/Wiki/HTMLFormatter.php';
123         
124         $this->link = new MTrackWeb_LinkHandler();
125         MTrack_Wiki_HTMLFormatter::registerLinkHandler($this->link);
126         
127         //MTrackRepo::registerSCM('git', 'MTrack_SCM_Git_Repo');
128         //MTrackRepo::registerSCM('svn', 'MTrackSCMSVN');
129         //MTrackRepo::registerSCM('hg', 'MTrackSCMHg');
130
131         $r = DB_DataObject::factory('repos');
132         $r->get('shortname', 'wiki'); // default wiki?
133         MTrack_Wiki_Item::$repo = $r->impl();
134         MTrack_Wiki::register_macro('MilestoneSummary', array('MTrack_Milestone', 'macro_MilestoneSummary'));
135         MTrack_Wiki::register_macro('BurnDown', array('MTrack_Milestone', 'macro_BurnDown'));
136         //MTrack_Wiki::register_macro('RunReport', array('MTrack_Report', 'macro_RunReport')); << fixme how are we to hanlde this..
137         MTrack_Wiki::register_macro('TicketQuery', array('MTrack_Report', 'macro_TicketQuery'));
138         MTrack_Wiki::register_macro('IncludeWikiPage', array('MTrack_Wiki', 'macro_IncludeWiki'));
139         MTrack_Wiki::register_macro('IncludeHelpPage', array('MTrack_Wiki', 'macro_IncludeHelp'));
140         MTrack_Wiki::register_macro('Comment', array('MTrack_Wiki', 'macro_comment'));
141         MTrack_Wiki::register_processor('comment', array('MTrack_Wiki', 'processor_comment'));
142         MTrack_Wiki::register_processor('html', array('MTrack_Wiki', 'processor_html'));
143         MTrack_Wiki::register_processor('dataset', array('MTrack_Wiki', 'processor_dataset'));
144
145
146         MTrackACL::registerAncestry('milestone', 'Roadmap');
147         MTrackACL::registerAncestry('report', 'Reports');
148         MTrackACL::registerAncestry('snippet', 'Snippets');
149         MTrackACL::registerAncestry('repo', 'Browser');
150         MTrackACL::registerAncestry('enum',     'Enumerations');
151         MTrackACL::registerAncestry("component", 'Components');
152         MTrackACL::registerAncestry("project",  'Projects');
153         MTrackACL::registerAncestry("ticket",   "Tickets");
154         MTrackACL::registerAncestry('wiki', array('MTrack_Wiki_Item', '_get_parent_for_acl'));
155
156         MTrackSearchDB::register_indexer('ticket', array('MTrackIssue', 'index_issue'));
157         MTrackSearchDB::register_indexer('wiki', array('MTrack_Wiki_Item', 'index_item'));
158
159
160
161         MTrackWatch::registerEventTypes('ticket', array( 'ticket' => 'Tickets' ));
162         MTrackWatch::registerEventTypes('milestone', array( 'ticket' => 'Tickets', 'changeset' => 'Code changes' ));
163         MTrackWatch::registerEventTypes('repo', array( 'ticket' => 'Tickets', 'changeset' => 'Code changes' ));
164
165         // should this get registered here??
166         MTrackCommitChecker::addCheck('Wiki');
167         
168         
169         
170    }
171     
172     function favicon()
173     {
174         return false;
175         /// FIXME - we should allow upload of a favion...
176         $ff = HTML_FlexyFramework::get();
177         
178         
179     }
180      
181     
182     /* renders the attachment list for a given object */
183     // was Attachments::render
184     // move it to MTrackWebAttachemnt...
185     
186   function attachmentsToHtml($object)
187   {
188     if (is_object($object)) {
189         $object = $object->toIdString(); // eg. ticket:1
190     }
191     $atts = MTrackDB::q('
192       select * from attachments
193       left join changes on (attachments.cid = changes.cid)
194       where attachments.object = ? order by changedate, filename',
195         $object)->fetchAll(PDO::FETCH_ASSOC);
196
197     if (count($atts) == 0) return '';
198
199     $max_dim = 150;
200
201     $html = "<div class='attachment-list'><b>Attachments</b><ul>";
202     foreach ($atts as $row) {
203       $url = "{$this->baseURL}/Attachment/$object/". $row['cid'] . '/' . $row['filename'];
204       
205       $html .= "<li><a class='attachment'" .
206         " href='$url'>".
207         "$row[filename]</a> ($row[size]) added by " .
208         $this->link->username($row['who'], array(
209           'no_image' => true
210         )) .
211         " " . $this->link->date($row['changedate']);
212         require_once 'MTrack/Attachment.php';
213       list($width, $height) = getimagesize(MTrackAttachment::local_path($row['hash']));
214       if ($width + $height) {
215         /* limit maximum size */
216         if ($width > $max_dim) {
217           $height *= $max_dim / $width;
218           $width = $max_dim;
219         }
220         if ($height > $max_dim) {
221           $width *= $max_dim / $height;
222           $height = $max_dim;
223         }
224         $html .= "<br><a href='$url'><img src='$url' width='$width' border='0' height='$height'></a>";
225       }
226
227       $html .= "</li>\n";
228     }
229     $html .= "</ul></div>";
230     return $html;
231   }
232     
233     
234
235 }