public function createNew($key, $name, $value, $itemdata = null, $scope = null)
 {
     $scope = $scope === null ? TBGContext::getScope()->getID() : $scope;
     $trans = B2DB::startTransaction();
     $crit = $this->getCriteria();
     $crit->addWhere(self::CUSTOMFIELDS_KEY, $key);
     $crit->addSelectionColumn(self::SORT_ORDER, 'sortorder', B2DBCriteria::DB_MAX, '', '+1');
     $row = $this->doSelectOne($crit, 'none');
     $sort_order = (int) $row->get('sortorder');
     $sort_order = $sort_order > 0 ? $sort_order : 1;
     $crit = $this->getCriteria();
     $crit->addInsert(self::NAME, $name);
     $crit->addInsert(self::OPTION_VALUE, $value);
     $crit->addInsert(self::CUSTOMFIELDS_KEY, $key);
     $crit->addInsert(self::SORT_ORDER, $sort_order);
     if ($itemdata !== null) {
         $crit->addInsert(self::ITEMDATA, $itemdata);
     }
     $crit->addInsert(self::SCOPE, $scope);
     $trans->commitAndEnd();
     return $this->doInsert($crit);
 }
 public function addArticleHistory($article_name, $old_content, $new_content, $user_id, $reason = null)
 {
     $transaction = B2DB::startTransaction();
     $crit = $this->getCriteria();
     $crit->addInsert(self::ARTICLE_NAME, $article_name);
     $crit->addInsert(self::AUTHOR, $user_id);
     $revision_number = $this->_getNextRevisionNumberForArticle($article_name);
     $crit->addInsert(self::REVISION, $revision_number);
     if (!($revision_number == 1 && $old_content == $new_content)) {
         $crit->addInsert(self::OLD_CONTENT, $old_content);
     } else {
         $crit->addInsert(self::OLD_CONTENT, '');
     }
     $crit->addInsert(self::NEW_CONTENT, $new_content);
     if ($reason !== null) {
         $crit->addInsert(self::REASON, $reason);
     }
     $crit->addInsert(self::SCOPE, TBGContext::getScope()->getID());
     $crit->addInsert(self::DATE, time());
     $res = $this->doInsert($crit);
     $transaction->commitAndEnd();
     return $res->getInsertID();
 }
 protected function _upgradeFrom3dot0()
 {
     // Add new tables
     TBGScopeHostnamesTable::getTable()->create();
     // Add classpath for existing old tables used for upgrade
     TBGContext::addClasspath(THEBUGGENIE_MODULES_PATH . 'installation' . DS . 'classes' . DS . 'upgrade_3.0');
     // Upgrade old tables
     TBGScopesTable::getTable()->upgrade(TBGScopesTable3dot0::getTable());
     TBGIssueFieldsTable::getTable()->upgrade(TBGIssueFieldsTable3dot0::getTable());
     // Upgrade all modules
     foreach (TBGContext::getModules() as $module) {
         if (method_exists($module, 'upgradeFrom3dot0')) {
             $module->upgradeFrom3dot0();
         }
     }
     // Start a transaction to preserve the upgrade path
     $transaction = B2DB::startTransaction();
     // Add votes to feature requests for default issue type scheme
     $its = new TBGIssuetypeScheme(1);
     foreach (TBGIssuetype::getAll() as $fr) {
         if ($fr instanceof TBGIssuetype) {
             if (in_array($fr->getKey(), array('featurerequest', 'bugreport', 'enhancement'))) {
                 $its->setFieldAvailableForIssuetype($fr, 'votes');
             }
         }
     }
     $ut = TBGUsersTable::getTable();
     $crit = $ut->getCriteria();
     $crit->addUpdate(TBGUsersTable::PRIVATE_EMAIL, true);
     $ut->doUpdate($crit);
     // Add default gravatar setting
     TBGSettings::saveSetting(TBGSettings::SETTING_ENABLE_GRAVATARS, 1);
     $trans_crit = TBGWorkflowTransitionsTable::getTable()->getCriteria();
     $trans_crit->addWhere(TBGWorkflowTransitionsTable::NAME, 'Request more information');
     $trans_crit->addWhere(TBGWorkflowTransitionsTable::WORKFLOW_ID, 1);
     $trans_row = TBGWorkflowTransitionsTable::getTable()->doSelectOne($trans_crit);
     if ($trans_row) {
         $transition = new TBGWorkflowTransition($trans_row->get(TBGWorkflowTransitionsTable::ID), $trans_row);
         $transition->setTemplate('main/updateissueproperties');
         $transition->save();
     }
     // End transaction and finalize upgrade
     $transaction->commitAndEnd();
     $this->upgrade_complete = true;
 }