X-Git-Url: http://git.roojs.org/?p=web.mtrack;a=blobdiff_plain;f=MTrackWeb.php;h=27a511ae2f058cbea1d945b315c9d0afe0b9ed84;hp=618962b73eee28a23d800e4d60210ad96754bd04;hb=HEAD;hpb=cf9c3e0498481df22961e19bf59d815685b30b8d diff --git a/MTrackWeb.php b/MTrackWeb.php index 618962b7..03e3c3c2 100644 --- a/MTrackWeb.php +++ b/MTrackWeb.php @@ -10,6 +10,8 @@ class MTrackWeb extends HTML_FlexyFramework_Page var $priorities = array(); var $severities = array(); var $link = false; // the link handler.. + var $authUser; + var $currentProject; function hasPerm($what, $cando) { // our whole perm logic sits in here.... @@ -36,7 +38,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page if (!$project_id) { return false; } - $p = DB_DataObject::factory('Projects'); + $p = DB_DataObject::factory('core_project'); $p->get($project_id); if (!$this->authUser) { if ($p->code != '*PUBLIC') { @@ -75,78 +77,117 @@ class MTrackWeb extends HTML_FlexyFramework_Page return true; } + /** + * currentProject: + * + * @param {int} $val set the current project (optional) + * @return {int} The current project id. + * + * + * + */ function currentProject($val = false) { // we do need the option for me to look at all projects... + + static $currentProject = false; if (empty($_SESSION[__CLASS__])) { $_SESSION[__CLASS__] = array(); } + + if (isset($_SESSION[__CLASS__]['active_project_id'])) { + $currentProject = $_SESSION[__CLASS__]['active_project_id']; + } + if ($val !== false) { // attempt to set it.. $_SESSION[__CLASS__]['active_project_id'] = $val ; - $currentProject = false; + $currentProject = $val ; // reset to ensure not cached.. } - if ($currentProject !== false) { - return $currentProject; - } - $p = DB_DataObject::factory('Projects'); - $ar = array(); - if ($this->authUser) { - $p->applyFilters(array(), $this->authUser); - $p->whereAdd('id in (SELECT distinct(project_id) FROM mtrack_repos)'); - $ar = $p->fetchAll('id', 'name'); - } - print_r($ar); - if (empty($_SESSION[__CLASS__]['active_project_id']) || - !isset($ar[$_SESSION[__CLASS__]['active_project_id']])) - { + $ar = $this->userProjects(); + + if (!isset($ar[$currentProject])) { + $currentProject = false; + $_SESSION[__CLASS__]['active_project_id'] = false; + } + if ($currentProject !== false) { + // var_dump($currentProject); + return $currentProject; + } + + //print_r($ar); + + if (empty($currentProject)) { - $p = DB_DataObject::factory('Projects'); - $p->get('code', '*PUBLIC'); - $id = $p->id; + //$p = DB_DataObject::factory('core_project'); + //$p->get('code', '*PUBLIC'); + $id = 0; foreach($ar as $k=>$v) { $id= $k; break; } - $_SESSION[__CLASS__]['active_project_id'] = $idid; + $_SESSION[__CLASS__]['active_project_id'] = $id; $currentProject = $_SESSION[__CLASS__]['active_project_id']; return $id; // always allowed.. } + //var_dump($currentProject); $currentProject = $_SESSION[__CLASS__]['active_project_id']; return $_SESSION[__CLASS__]['active_project_id']; } - function loadProjectList() + + function userProjects() { - $p = DB_DataObject::factory('Projects'); + $p = DB_DataObject::factory('core_project'); if (!$this->authUser) { $p->code = '*PUBLIC'; $ar = $p->fetchAll('id', 'name'); } else { - $p->applyFilters(array(), $this->authUser); + // DB_DAtaObject::debugLevel(1); + $p->applyFilters(array(), $this->authUser, $this); + if (!$this->authUser->hasPerm('Core.Projects_All', 'S')) { + $p->whereAdd("Projects.id in (SELECT ProjectDirectory.project_id FROM ProjectDirectory WHERE + person_id = ". $this->authUser->id . " and role != '')"); + } + /* + * SOME PROJECTS MIGHT NOT HAVE REPO's... $p->whereAdd('id in (SELECT distinct(project_id) FROM mtrack_repos)'); + */ + // $pd->whereAdd("role != ''"); + + $p->orderBy('core_project.name ASC'); + unset($p->client_id); // default projects serach enforces this.. $ar = $p->fetchAll('id', 'name'); } + return $ar; + + } + + + function loadProjectList() + { + // DB_DataObject::debugLevel(1); + + $ar = $this->userProjects(); $this->elements['active_project_id'] = new HTML_Template_Flexy_Element(); $this->elements['active_project_id']->setOptions($ar); - $this->elements['active_project_id']->setValue($this->currentProject()); @@ -157,7 +198,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page function getAuthUser() { - $u = DB_DataObject::factory('Person'); + $u = DB_DataObject::factory('core_person'); if (!$u->isAuth()) { return false; } @@ -184,13 +225,23 @@ class MTrackWeb extends HTML_FlexyFramework_Page //MTrackConfig::boot(); // eak.. .remove me... - $this->authUser = DB_DataObject::factory('Person')->getAuthUser(); + $this->authUser = DB_DataObject::factory('core_person')->getAuthUser(); + $this->loadProjectList(); + + $p = DB_DataObject::factory('core_project'); + $p->get($this->currentProject()); + $this->currentProject = $p; /// mix up? + + + if (!$this->authUser) { return true; // we do allow people in this far.. } - + // very public?? + $this->authUserArray = $this->authUser->toArray(); + unset($this->authUserArray['passwd']); // timezone setting... -- this may be a good addon to our core person class. @@ -198,8 +249,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page date_default_timezone_set($this->authUser->timezone); } - - + /// fixme... //$this->authUser = @@ -208,19 +258,30 @@ class MTrackWeb extends HTML_FlexyFramework_Page function get($loc='') { // + + + HTML_FlexyFramework::get()->generateDataobjectsCache(); + + if (!empty($loc)) { die ("invalid location". htmlspecialchars($loc)); } + + + if (!$this->authUser) { return HTML_FlexyFramework::run('Wiki'); } + + + return HTML_FlexyFramework::run('Wiki/Today'); } - function post() + function post($request) { header("Status: 404 Not Found"); - die("not valid"); + die("invalid post request? "); } @@ -243,50 +304,14 @@ class MTrackWeb extends HTML_FlexyFramework_Page function registerClasses() { - require_once 'MTrack/Wiki.php'; - require_once 'MTrack/Wiki/Item.php'; - require_once 'MTrack/Milestone.php'; - - + // wiki rendering is done client side... + // require_once 'MTrack/Wiki/HTMLFormatter.php'; require_once 'MTrackWeb/LinkHandler.php'; - require_once 'MTrack/Wiki/HTMLFormatter.php'; - $this->link = new MTrackWeb_LinkHandler(); - MTrack_Wiki_HTMLFormatter::registerLinkHandler($this->link); + //MTrack_Wiki_HTMLFormatter::registerLinkHandler($this->link); - - $r = DB_DataObject::factory('mtrack_repos'); - $r->loadFromPath('default/wiki'); - MTrack_Wiki_Item::$repo = $r->impl(); - - - - //MTrack_Wiki::register_macro('MilestoneSummary', array('MTrack_Milestone', 'macro_MilestoneSummary')); - // MTrack_Wiki::register_macro('BurnDown', array('MTrack_Milestone', 'macro_BurnDown')); - //MTrack_Wiki::register_macro('RunReport', array('MTrack_Report', 'macro_RunReport')); << fixme how are we to hanlde this.. - //MTrack_Wiki::register_macro('TicketQuery', array('MTrack_Report', 'macro_TicketQuery')); - MTrack_Wiki::register_macro('IncludeWikiPage', array('MTrack_Wiki', 'macro_IncludeWiki')); - MTrack_Wiki::register_macro('IncludeHelpPage', array('MTrack_Wiki', 'macro_IncludeHelp')); - MTrack_Wiki::register_macro('Comment', array('MTrack_Wiki', 'macro_comment')); - MTrack_Wiki::register_processor('comment', array('MTrack_Wiki', 'processor_comment')); - MTrack_Wiki::register_processor('html', array('MTrack_Wiki', 'processor_html')); - MTrack_Wiki::register_processor('dataset', array('MTrack_Wiki', 'processor_dataset')); - + return; - //MTrackSearchDB::register_indexer('ticket', array('MTrackIssue', 'index_issue')); - //MTrackSearchDB::register_indexer('wiki', array('MTrack_Wiki_Item', 'index_item')); - - - - //MTrackWatch::registerEventTypes('ticket', array( 'ticket' => 'Tickets' )); - //MTrackWatch::registerEventTypes('milestone', array( 'ticket' => 'Tickets', 'changeset' => 'Code changes' )); - //MTrackWatch::registerEventTypes('repo', array( 'ticket' => 'Tickets', 'changeset' => 'Code changes' )); - - // should this get registered here?? - //MTrackCommitChecker::addCheck('Wiki'); - - - } function favicon() @@ -357,10 +382,8 @@ class MTrackWeb extends HTML_FlexyFramework_Page // log all errors!!! //$this->addEvent("ERROR", false, $str); - /* - if (!empty($_REQUEST['returnHTML']) || - (isset($_SERVER['CONTENT_TYPE']) && preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE'])) - ) { + + if ((isset($_SERVER['CONTENT_TYPE']) && preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE']))) { header('Content-type: text/html'); echo ""; echo $json->encodeUnsafe(array( @@ -373,7 +396,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page echo ""; exit; } - */ + echo $json->encode(array( 'success'=> false, 'data'=> array(), @@ -389,9 +412,8 @@ class MTrackWeb extends HTML_FlexyFramework_Page require_once 'Services/JSON.php'; $json = new Services_JSON(); - /* - if (!empty($_REQUEST['returnHTML']) || - (isset($_SERVER['CONTENT_TYPE']) && preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE'])) + + if ( (isset($_SERVER['CONTENT_TYPE']) && preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE'])) ) { header('Content-type: text/html'); @@ -400,7 +422,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page echo ""; exit; } - */ + echo $json->encode(array('success'=> true, 'data' => $str)); exit; @@ -487,6 +509,23 @@ class MTrackWeb extends HTML_FlexyFramework_Page } + function packJS($dir) + { + + // target has to be 'aliased' + // target filename can be an md5.. + + require_once 'Pman/Core/JsCompile.php'; + $x = new Pman_Core_JsCompile(); + $x->packScript(dirname(__FILE__).'/MTrackWeb/templates/images', + array($dir), + $this->rootURL . '/MTrackWeb/templates/images', + false // do not compile + ); + //); + + + }