Example #1
0
 /**
  * Removes an issue from the list of flagged issues
  *
  * @param integer $issue_id ID of issue to remove
  */
 public function removeStarredIssue($issue_id)
 {
     TBGUserIssuesTable::getTable()->removeStarredIssue($this->getID(), $issue_id);
     if (is_array($this->_starredissues) && array_key_exists($issue_id, $this->_starredissues)) {
         unset($this->_starredissues[$issue_id]);
     }
     return true;
 }
Example #2
0
 public function addSubscriber($user_id)
 {
     TBGUserIssuesTable::getTable()->addStarredIssue($user_id, $this->getID());
 }
Example #3
0
 protected function _upgradeFrom3dot1()
 {
     // Add classpath for existing old tables used for upgrade
     TBGContext::addAutoloaderClassPath(THEBUGGENIE_MODULES_PATH . 'installation' . DS . 'classes' . DS . 'upgrade_3.1');
     TBGContext::addAutoloaderClassPath(THEBUGGENIE_MODULES_PATH . 'mailing' . DS . 'classes' . DS . 'B2DB');
     TBGContext::addAutoloaderClassPath(THEBUGGENIE_MODULES_PATH . 'mailing' . DS . 'classes');
     TBGContext::addAutoloaderClassPath(THEBUGGENIE_MODULES_PATH . 'publish' . DS . 'classes' . DS . 'B2DB');
     TBGContext::addAutoloaderClassPath(THEBUGGENIE_MODULES_PATH . 'publish' . DS . 'classes');
     // Create new tables
     TBGDashboardViewsTable::getTable()->create();
     TBGOpenIdAccountsTable::getTable()->create();
     TBGProjectAssignedUsersTable::getTable()->create();
     TBGProjectAssignedTeamsTable::getTable()->create();
     TBGEditionAssignedUsersTable::getTable()->create();
     TBGEditionAssignedTeamsTable::getTable()->create();
     TBGComponentAssignedUsersTable::getTable()->create();
     TBGComponentAssignedTeamsTable::getTable()->create();
     TBGRolePermissionsTable::getTable()->create();
     TBGUserScopesTable::getTable()->create();
     // Upgrade existing tables
     TBGProjectsTable::getTable()->upgrade(TBGProjectsTable3dot1::getTable());
     TBGUsersTable::getTable()->upgrade(TBGUsersTable3dot1::getTable());
     TBGIssuesTable::getTable()->upgrade(TBGIssuesTable3dot1::getTable());
     TBGIssueTypesTable::getTable()->upgrade(TBGIssueTypesTable3dot1::getTable());
     TBGListTypesTable::getTable()->upgrade(TBGListTypesTable3dot1::getTable());
     TBGEditionsTable::getTable()->upgrade(TBGEditionsTable3dot1::getTable());
     TBGBuildsTable::getTable()->upgrade(TBGBuildsTable3dot1::getTable());
     TBGCommentsTable::getTable()->upgrade(TBGCommentsTable3dot1::getTable());
     TBGComponentsTable::getTable()->upgrade(TBGComponentsTable3dot1::getTable());
     TBGCustomFieldsTable::getTable()->upgrade(TBGCustomFieldsTable3dot1::getTable());
     TBGCustomFieldOptionsTable::getTable()->upgrade(TBGCustomFieldOptionsTable3dot1::getTable());
     TBGIssueCustomFieldsTable::getTable()->upgrade(TBGIssueCustomFieldsTable3dot1::getTable());
     // Create new module tables
     TBGIncomingEmailAccountTable::getTable()->create();
     // Add new indexes
     TBGArticlesTable::getTable()->createIndexes();
     TBGCommentsTable::getTable()->createIndexes();
     TBGIssueAffectsBuildTable::getTable()->createIndexes();
     TBGIssueAffectsComponentTable::getTable()->createIndexes();
     TBGIssueAffectsEditionTable::getTable()->createIndexes();
     TBGIssueFieldsTable::getTable()->createIndexes();
     TBGIssueFilesTable::getTable()->createIndexes();
     TBGIssuesTable::getTable()->createIndexes();
     TBGIssuetypeSchemesTable::getTable()->createIndexes();
     TBGPermissionsTable::getTable()->createIndexes();
     TBGProjectsTable::getTable()->createIndexes();
     TBGSettingsTable::getTable()->createIndexes();
     TBGTeamMembersTable::getTable()->createIndexes();
     TBGUserIssuesTable::getTable()->createIndexes();
     TBGUsersTable::getTable()->createIndexes();
     TBGUserScopesTable::getTable()->createIndexes();
     if (TBGContext::getRequest()->getParameter('fix_my_timestamps', false)) {
         $this->_fixTimestamps();
     }
     foreach (TBGScope::getAll() as $scope) {
         TBGRole::loadFixtures($scope);
         foreach (TBGDatatype::getTypes() as $type => $class) {
             TBGContext::setPermission('set_datatype_' . $type, 0, 'core', 0, 0, 0, true, $scope->getID());
         }
         TBGContext::setPermission('page_confirm_scope_access', 0, 'core', 0, 0, 0, true, $scope->getID());
         if (!TBGSettings::get(TBGSettings::SETTING_DEFAULT_WORKFLOW, 'core', $scope->getID())) {
             $workflow_id = TBGWorkflowsTable::getTable()->getFirstIdByScope($scope->getID());
             if ($workflow_id) {
                 TBGSettings::saveSetting(TBGSettings::SETTING_DEFAULT_WORKFLOW, $workflow_id, 'core', $scope->getID());
             } else {
                 TBGWorkflow::loadFixtures($scope);
             }
         }
         if (!TBGSettings::get(TBGSettings::SETTING_DEFAULT_WORKFLOWSCHEME, 'core', $scope->getID())) {
             $workflow_scheme_id = TBGWorkflowSchemesTable::getTable()->getFirstIdByScope($scope->getID());
             if ($workflow_scheme_id) {
                 TBGSettings::saveSetting(TBGSettings::SETTING_DEFAULT_WORKFLOWSCHEME, $workflow_scheme_id, 'core', $scope->getID());
             } else {
                 TBGWorkflowScheme::loadFixtures($scope);
             }
         }
         if (!TBGSettings::get(TBGSettings::SETTING_DEFAULT_ISSUETYPESCHEME, 'core', $scope->getID())) {
             $issuetype_scheme_id = TBGIssuetypeSchemesTable::getTable()->getFirstIdByScope($scope->getID());
             if ($issuetype_scheme_id) {
                 TBGSettings::saveSetting(TBGSettings::SETTING_DEFAULT_ISSUETYPESCHEME, $issuetype_scheme_id, 'core', $scope->getID());
             } else {
                 TBGIssuetypeScheme::loadFixtures($scope);
             }
         }
         TBGSettings::saveSetting(TBGSettings::SETTING_FAVICON_ID, 0, 'core', $scope->getID());
         TBGSettings::saveSetting(TBGSettings::SETTING_FAVICON_TYPE, 0, 'core', $scope->getID());
         TBGSettings::saveSetting(TBGSettings::SETTING_HEADER_ICON_ID, 0, 'core', $scope->getID());
         TBGSettings::saveSetting(TBGSettings::SETTING_HEADER_ICON_TYPE, 0, 'core', $scope->getID());
     }
     $linkstable = TBGLinksTable::getTable();
     $crit = $linkstable->getCriteria();
     $crit->addUpdate(TBGLinksTable::URL, 'http://issues.thebuggenie.com');
     $crit->addWhere(TBGLinksTable::URL, 'http://thebuggenie.com/thebuggenie');
     $crit->addOr(TBGLinksTable::URL, 'http://www.thebuggenie.com/thebuggenie');
     $linkstable->doUpdate($crit);
     $listtypestable = TBGListTypesTable::getTable();
     $crit = $listtypestable->getCriteria();
     $crit->addUpdate(TBGListTypesTable::ITEMTYPE, 'role');
     $crit->addWhere(TBGListTypesTable::ITEMTYPE, 'projectrole');
     $listtypestable->doUpdate($crit);
     $crit = $listtypestable->getCriteria();
     $crit->addUpdate(TBGListTypesTable::ITEMTYPE, 'priority');
     $crit->addWhere(TBGListTypesTable::ITEMTYPE, 'b2_prioritytypes');
     $listtypestable->doUpdate($crit);
     TBGWorkflowTransitionsTable::getTable()->upgradeFrom3dot1();
     TBGSettings::saveSetting(TBGSettings::SETTING_ICONSET, TBGSettings::get(TBGSettings::SETTING_THEME_NAME));
     TBGContext::setPermission('readarticle', 0, 'publish', 0, 0, 0, true);
     foreach (TBGProject::getAll() as $project) {
         TBGDashboardViewsTable::getTable()->setDefaultViews($project->getID(), TBGDashboardViewsTable::TYPE_PROJECT);
         if (!$project->getKey()) {
             $project->setName($project->getName());
         }
     }
     $this->upgrade_complete = true;
 }
 protected function _getIssueRelatedUsers(TBGIssue $issue)
 {
     $uids = array();
     $cu = TBGContext::getUser()->getID();
     $ns = $this->getSetting(self::NOTIFY_ISSUE_UPDATED_SELF, $cu);
     // Add all users who's marked this issue as interesting
     $uids = TBGUserIssuesTable::getTable()->getUserIDsByIssueID($issue->getID());
     // Add all users from the team owning the issue if valid
     // or add the owning user if a user owns the issue
     if ($issue->getOwnerType() == TBGIdentifiableClass::TYPE_TEAM) {
         foreach ($issue->getOwner()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getOwnerType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getOwnerID() == $cu && !$ns)) {
             $uids[$issue->getOwnerID()] = $issue->getOwnerID();
         }
     }
     // Add the poster
     if ($this->getSetting(self::NOTIFY_ISSUE_POSTED_UPDATED, $issue->getPostedByID())) {
         if (!($issue->getPostedByID() == $cu && !$ns)) {
             $uids[$issue->getPostedByID()] = $issue->getPostedByID();
         }
     }
     // Add all users from the team assigned to the issue if valid
     // or add the assigned user if a user is assigned to the issue
     if ($issue->getAssigneeType() == TBGIdentifiableClass::TYPE_TEAM) {
         // Get team member IDs
         foreach ($issue->getAssignee()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_TEAMASSIGNED_UPDATED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getAssigneeType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getAssigneeID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_ASSIGNED_UPDATED, $issue->getAssigneeID())) {
             $uids[$issue->getAssigneeID()] = $issue->getAssigneeID();
         }
     }
     // Add all users in the team who leads the project, if valid
     // or add the user who leads the project, if valid
     if ($issue->getProject()->getLeaderType() == TBGIdentifiableClass::TYPE_TEAM) {
         foreach ($issue->getProject()->getLeader()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getProject()->getLeaderType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getProject()->getLeaderID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $issue->getProject()->getLeaderID())) {
             $uids[$issue->getProject()->getLeaderID()] = $issue->getProject()->getLeaderID();
         }
     }
     // Same for QA
     if ($issue->getProject()->getQaResponsibleType() == TBGIdentifiableClass::TYPE_TEAM) {
         foreach ($issue->getProject()->getQaResponsible()->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     } elseif ($issue->getProject()->getQaResponsibleType() == TBGIdentifiableClass::TYPE_USER) {
         if (!($issue->getProject()->getQaResponsibleID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $issue->getProject()->getQaResponsibleID())) {
             $uids[$issue->getProject()->getQaResponsibleID()] = $issue->getProject()->getQaResponsibleID();
         }
     }
     foreach ($issue->getProject()->getAssignedTeams() as $team_id => $assignments) {
         foreach (TBGContext::factory()->TBGTeam($team_id)->getMembers() as $member) {
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     }
     foreach ($issue->getProject()->getAssignedUsers() as $user_id => $assignments) {
         $member = TBGContext::factory()->TBGUser($user_id);
         if (!($member->getID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $member->getID())) {
             $uids[$member->getID()] = $member->getID();
         }
     }
     // Add all users relevant for all affected editions
     foreach ($issue->getEditions() as $edition_list) {
         if ($edition_list['edition']->getLeaderType() == TBGIdentifiableClass::TYPE_TEAM) {
             foreach ($edition_list['edition']->getLeader()->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         } elseif ($edition_list['edition']->getLeaderType() == TBGIdentifiableClass::TYPE_USER) {
             if (!($edition_list['edition']->getLeaderID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $edition_list['edition']->getLeaderID())) {
                 $uids[$edition_list['edition']->getLeaderID()] = $edition_list['edition']->getLeaderID();
             }
         }
         if ($edition_list['edition']->getQaResponsibleType() == TBGIdentifiableClass::TYPE_TEAM) {
             foreach ($edition_list['edition']->getQaResponsible()->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         } elseif ($edition_list['edition']->getQaResponsibleType() == TBGIdentifiableClass::TYPE_USER) {
             if (!($edition_list['edition']->getQaResponsibleID() == $cu && !$ns) && !!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $edition_list['edition']->getQaResponsibleID())) {
                 $uids[$edition_list['edition']->getQaResponsibleID()] = $edition_list['edition']->getQaResponsibleID();
             }
         }
         foreach ($edition_list['edition']->getAssignedTeams() as $team_id => $assignments) {
             foreach (TBGContext::factory()->TBGTeam($team_id)->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         }
         foreach ($edition_list['edition']->getAssignedUsers() as $user_id => $assignments) {
             $member = TBGContext::factory()->TBGUser($user_id);
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     }
     // Add all users relevant for all affected components
     foreach ($issue->getComponents() as $component_list) {
         foreach ($component_list['component']->getAssignedTeams() as $team_id => $assignments) {
             foreach (TBGContext::factory()->TBGTeam($team_id)->getMembers() as $member) {
                 if ($member->getID() == $cu && !$ns) {
                     continue;
                 }
                 if (!$this->getSetting(self::NOTIFY_ISSUE_RELATED_PROJECT_TEAMASSIGNED, $member->getID())) {
                     continue;
                 }
                 $uids[$member->getID()] = $member->getID();
             }
         }
         foreach ($component_list['component']->getAssignedUsers() as $user_id => $assignments) {
             $member = TBGContext::factory()->TBGUser($user_id);
             if ($member->getID() == $cu && !$ns) {
                 continue;
             }
             if (!$this->getSetting(self::NOTIFY_ISSUE_PROJECT_ASSIGNED, $member->getID())) {
                 continue;
             }
             $uids[$member->getID()] = $member->getID();
         }
     }
     foreach ($uids as $uid => $val) {
         if ($this->getSetting(self::NOTIFY_ISSUE_ONCE, $uid)) {
             if ($this->getSetting(self::NOTIFY_ISSUE_ONCE . '_' . $issue->getID(), $uid)) {
                 unset($uids[$uid]);
                 continue;
             } else {
                 $this->saveSetting(self::NOTIFY_ISSUE_ONCE . '_' . $issue->getID(), 1, $uid);
             }
         }
         $uids[$uid] = TBGContext::factory()->TBGUser($uid);
     }
     return $uids;
 }