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