X-Git-Url: http://git.roojs.org/?p=web.mtrack;a=blobdiff_plain;f=MTrackWeb.php;h=27a511ae2f058cbea1d945b315c9d0afe0b9ed84;hp=34a656aa34ff5d1ea9e2de4e921b4c9744dd7b9a;hb=HEAD;hpb=68b1b15c71901ed80a525ce5a662fd4ddaedc0d8 diff --git a/MTrackWeb.php b/MTrackWeb.php index 34a656aa..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,43 +69,128 @@ 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 loadProjectList() + + 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']; + } - $p = DB_DataObject::factory('Projects'); + if ($val !== false) { + // attempt to set it.. + $_SESSION[__CLASS__]['active_project_id'] = $val ; + $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('core_project'); + //$p->get('code', '*PUBLIC'); + $id = 0; + foreach($ar as $k=>$v) { + $id= $k; + break; + } + + + $_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 userProjects() + { + + $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'); } - print_R($ar); + 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); - - if (empty($_SESSION[__CLASS__]['active_project_id']) || - !isset($ar[$_SESSION[__CLASS__]['active_project_id']])) - { - $p = DB_DataObject::factory('Projects'); - DB_DataObject::debugLevel(1); - - $p->get('code', '*PUBLIC'); - $_SESSION[__CLASS__]['active_project_id'] = $p->id; - } - $this->elements['active_project_id']->setValue( $_SESSION[__CLASS__]['active_project_id']); - - return $p->toArray('id', 'name'); + + $this->elements['active_project_id']->setValue($this->currentProject()); + } @@ -111,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; } @@ -138,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. @@ -152,8 +249,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page date_default_timezone_set($this->authUser->timezone); } - - + /// fixme... //$this->authUser = @@ -162,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? "); } @@ -197,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() @@ -311,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( @@ -327,7 +396,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page echo ""; exit; } - */ + echo $json->encode(array( 'success'=> false, 'data'=> array(), @@ -343,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'); @@ -354,7 +422,7 @@ class MTrackWeb extends HTML_FlexyFramework_Page echo ""; exit; } - */ + echo $json->encode(array('success'=> true, 'data' => $str)); exit; @@ -441,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 + ); + //); + + + }