X-Git-Url: http://git.roojs.org/?p=web.mtrack;a=blobdiff_plain;f=MTrackWeb.php;h=27a511ae2f058cbea1d945b315c9d0afe0b9ed84;hp=3f2d2aa9e3af309d3db03e18280c378e698cf5d3;hb=HEAD;hpb=615f2bc79c3ece0bc3b8e09197c1b0dc6f43134f diff --git a/MTrackWeb.php b/MTrackWeb.php index 3f2d2aa9..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') { @@ -67,72 +69,127 @@ class MTrackWeb extends HTML_FlexyFramework_Page $pd = DB_DataObject::factory('ProjectDirectory'); $pd->project_id = $project_id; $pd->user_id = $this->authUser->id; + $pd->whereAdd("role != ''"); + if (!$pd->count()) { return false; } 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.. } + + + + + $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'); - $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'); - } + //$p = DB_DataObject::factory('core_project'); + //$p->get('code', '*PUBLIC'); + $id = 0; + foreach($ar as $k=>$v) { + $id= $k; + break; + } + - if (empty($_SESSION[__CLASS__]['active_project_id']) || - !isset($ar[$_SESSION[__CLASS__]['active_project_id']])) - { - $p = DB_DataObject::factory('Projects'); - - $p->get('code', '*PUBLIC'); - $_SESSION[__CLASS__]['active_project_id'] = $p->id; - return $p->id; // always allowed.. + $_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( $_SESSION[__CLASS__]['active_project_id']); + $this->elements['active_project_id']->setValue($this->currentProject()); @@ -141,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; } @@ -168,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. @@ -182,8 +249,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page date_default_timezone_set($this->authUser->timezone); } - - + /// fixme... //$this->authUser = @@ -192,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? "); } @@ -227,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() @@ -341,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( @@ -357,7 +396,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page echo ""; exit; } - */ + echo $json->encode(array( 'success'=> false, 'data'=> array(), @@ -373,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'); @@ -384,7 +422,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page echo ""; exit; } - */ + echo $json->encode(array('success'=> true, 'data' => $str)); exit; @@ -471,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 + ); + //); + + + }