/**
  * Retrieve all editions for a specific project
  *
  * @param integer $project_id
  * 
  * @return array
  */
 public static function getAllByProjectID($project_id)
 {
     if (self::$_editions === null) {
         self::$_editions = array();
     }
     if (!array_key_exists($project_id, self::$_editions)) {
         self::$_editions[$project_id] = array();
         if ($res = B2DB::getTable('TBGEditionsTable')->getByProjectID($project_id)) {
             while ($row = $res->getNextRow()) {
                 $edition = TBGContext::factory()->TBGEdition($row->get(TBGEditionsTable::ID), $row);
                 self::$_editions[$project_id][$edition->getID()] = $edition;
             }
         }
     }
     return self::$_editions[$project_id];
 }
 public function runDeleteEdition(TBGRequest $request)
 {
     if ($this->access_level == TBGSettings::ACCESS_FULL) {
         try {
             $theEdition = TBGContext::factory()->TBGEdition($request->getParameter('edition_id'));
             $project = $theEdition->getProject();
             $theEdition->delete();
             $count = count(TBGEdition::getAllByProjectID($project->getID()));
             return $this->renderJSON(array('failed' => false, 'deleted' => true, 'itemcount' => $count, 'message' => TBGContext::getI18n()->__('Edition deleted')));
         } catch (Exception $e) {
             return $this->renderJSON(array('failed' => true, "error" => TBGContext::getI18n()->__('Could not delete this edition') . ", " . $e->getMessage()));
         }
     }
     return $this->renderJSON(array('failed' => true, "error" => $i18n->__("You don't have access to modify edition")));
 }
 /**
  * Adds an edition to the project
  *
  * @param string $e_name
  * 
  * @return TBGEdition
  */
 public function addEdition($e_name)
 {
     $this->_editions = null;
     $edition = new TBGEdition();
     $edition->setName($e_name);
     $edition->setProject($this);
     $edition->save();
     return $edition;
 }
            switch ($info['type']) {
                case TBGCustomDatatype::EDITIONS_CHOICE:
                    ?>
								<a href="javascript:void(0);" onclick="setField('<?php 
                    echo make_url('issue_setfield', array('project_key' => $issue->getProject()->getKey(), 'issue_id' => $issue->getID(), 'field' => $field, $field . '_value' => ""));
                    ?>
', '<?php 
                    echo $field;
                    ?>
');"><?php 
                    echo $info['clear'];
                    ?>
</a><br>
								<ul class="choices">
									<?php 
                    foreach (TBGEdition::getAllByProjectID($issue->getProject()->getID()) as $choice) {
                        ?>
										<li>
											<?php 
                        echo image_tag('icon_edition.png', array('style' => 'float: left; margin-right: 5px;'));
                        ?>
<a href="javascript:void(0);" onclick="setField('<?php 
                        echo make_url('issue_setfield', array('project_key' => $issue->getProject()->getKey(), 'issue_id' => $issue->getID(), 'field' => $field, $field . '_value' => $choice->getID()));
                        ?>
', '<?php 
                        echo $field;
                        ?>
');"><?php 
                        echo $choice->getName();
                        ?>
</a>
												<?php 
                break;
            case TBGCustomDatatype::EDITIONS_CHOICE:
                ?>
												<select name="<?php 
                echo $customdatatype->getKey();
                ?>
_id" id="<?php 
                echo $customdatatype->getKey();
                ?>
_id_additional">
													<?php 
                if ($selected_project instanceof TBGProject) {
                    ?>
														<?php 
                    foreach (TBGEdition::getAllByProjectID($selected_project->getID()) as $option) {
                        ?>
														<option value="<?php 
                        echo $option->getID();
                        ?>
"<?php 
                        if ($selected_customdatatype[$customdatatype->getKey()] == $option->getID()) {
                            ?>
 selected<?php 
                        }
                        ?>
><?php 
                        echo $option->getName();
                        ?>
</option>
														<?php 
 /**
  * Returns the project
  *
  * @return TBGProject
  */
 public function getProject()
 {
     return $this->_project !== null || !is_object($this->_edition) ? $this->_project : $this->_edition->getProject();
 }
Example #7
0
 public function getEditionID()
 {
     return $this->_edition instanceof TBGEdition ? $this->_edition->getID() : (int) $this->_edition;
 }
Example #8
0
 /**
  * Set status for affected edition
  * 
  * @see setAffectedItemStatus()
  * @see setAffectedBuildStatus()
  * @see setAffectedComponentStatus()
  * 
  * @param TBGEdition $item The edition to set status for
  * @param TBGDatatype $status The status to set
  * 
  * @return boolean
  */
 public function setAffectedEditionStatus($item, $status)
 {
     if (TBGIssueAffectsEditionTable::getTable()->setStatusByIssueIDandEditionID($this->getID(), $item->getID(), $status->getID())) {
         $this->addLogEntry(TBGLogTable::LOG_AFF_DELETE, TBGContext::getI18n()->__("'%item_name' -> '%status_name", array('%item_name' => $item->getName(), '%status_name' => $status->getName())));
         return true;
     }
     return false;
 }
 /**
  * Set status for affected edition
  * 
  * @see setAffectedItemStatus()
  * @see setAffectedBuildStatus()
  * @see setAffectedComponentStatus()
  * 
  * @param TBGEdition $item The edition to set status for
  * @param TBGDatatype $status The status to set
  * 
  * @return boolean
  */
 public function setAffectedEditionStatus($item, $status)
 {
     if (B2DB::getTable('TBGIssueAffectsEditionTable')->setStatusByIssueIDandEditionID($this->getID(), $item->getID(), $status->getID())) {
         $this->addLogEntry(TBGLogTable::LOG_AFF_DELETE, TBGContext::getI18n()->__("'%item_name%' -> '%status_name%", array('%item_name%' => $item->getName(), '%status_name%' => $status->getName())));
         $this->addSystemComment(TBGContext::getI18n()->__('Affected edition updated'), TBGContext::getI18n()->__('Edition \'\'\'%edition%\'\'\' is now %status%', array('%edition%' => $item->getName(), '%status%' => $status->getName())), TBGContext::getUser()->getID());
         return true;
     }
     return false;
 }
 /**
  * Sets an issue field to a specified value
  * 
  * @param TBGRequest $request
  */
 public function runIssueSetField(TBGRequest $request)
 {
     if ($issue_id = $request->getParameter('issue_id')) {
         try {
             $issue = TBGContext::factory()->TBGIssue($issue_id);
         } catch (Exception $e) {
             $this->getResponse()->setHttpStatus(400);
             return $this->renderText('fail');
         }
     } else {
         $this->getResponse()->setHttpStatus(400);
         return $this->renderText('no issue');
     }
     TBGContext::loadLibrary('common');
     if (!$issue instanceof TBGIssue) {
         return false;
     }
     switch ($request->getParameter('field')) {
         case 'description':
             if (!$issue->canEditDescription()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             $issue->setDescription($request->getRawParameter('value'));
             return $this->renderJSON(array('changed' => $issue->isDescriptionChanged(), 'field' => array('id' => (int) ($issue->getDescription() != ''), 'name' => tbg_parse_text($issue->getDescription(), false, null, array('issue' => $issue))), 'description' => tbg_parse_text($issue->getDescription(), false, null, array('issue' => $issue))));
             break;
         case 'reproduction_steps':
             if (!$issue->canEditReproductionSteps()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             $issue->setReproductionSteps($request->getRawParameter('value'));
             return $this->renderJSON(array('changed' => $issue->isReproductionStepsChanged(), 'field' => array('id' => (int) ($issue->getReproductionSteps() != ''), 'name' => tbg_parse_text($issue->getReproductionSteps(), false, null, array('issue' => $issue))), 'reproduction_steps' => tbg_parse_text($issue->getReproductionSteps(), false, null, array('issue' => $issue))));
             break;
         case 'title':
             if (!$issue->canEditTitle()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             if ($request->getParameter('value') == '') {
                 return $this->renderJSON(array('changed' => false, 'failed' => true, 'error' => TBGContext::getI18n()->__('You have to provide a title')));
             } else {
                 $issue->setTitle($request->getRawParameter('value'));
                 return $this->renderJSON(array('changed' => $issue->isTitleChanged(), 'field' => array('id' => 1, 'name' => strip_tags($issue->getTitle())), 'title' => strip_tags($issue->getTitle())));
             }
             break;
         case 'percent':
             if (!$issue->canEditPercentage()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             $issue->setPercentCompleted($request->getParameter('percent'));
             return $this->renderJSON(array('changed' => $issue->isPercentCompletedChanged(), 'percent' => $issue->getPercentCompleted()));
             break;
         case 'estimated_time':
             if (!$issue->canEditEstimatedTime()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             if ($request->getParameter('estimated_time') != TBGContext::getI18n()->__('Enter your estimate here') && $request->getParameter('estimated_time')) {
                 $issue->setEstimatedTime($request->getParameter('estimated_time'));
             } elseif ($request->hasParameter('value')) {
                 $issue->setEstimatedTime($request->getParameter('value'));
             } else {
                 $issue->setEstimatedMonths($request->getParameter('estimated_time_months'));
                 $issue->setEstimatedWeeks($request->getParameter('estimated_time_weeks'));
                 $issue->setEstimatedDays($request->getParameter('estimated_time_days'));
                 $issue->setEstimatedHours($request->getParameter('estimated_time_hours'));
                 $issue->setEstimatedPoints($request->getParameter('estimated_time_points'));
             }
             return $this->renderJSON(array('changed' => $issue->isEstimatedTimeChanged(), 'field' => $issue->hasEstimatedTime() ? array('id' => 1, 'name' => $issue->getFormattedTime($issue->getEstimatedTime())) : array('id' => 0), 'values' => $issue->getEstimatedTime()));
             break;
         case 'owned_by':
         case 'posted_by':
         case 'assigned_to':
             if ($request->getParameter('field') == 'owned_by' && !$issue->canEditOwnedBy()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'posted_by' && !$issue->canEditPostedBy()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'assigned_to' && !$issue->canEditAssignedTo()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             if ($request->hasParameter('value')) {
                 if ($request->hasParameter('identifiable_type')) {
                     if (in_array($request->getParameter('identifiable_type'), array(TBGIdentifiableClass::TYPE_USER, TBGIdentifiableClass::TYPE_TEAM))) {
                         switch ($request->getParameter('identifiable_type')) {
                             case TBGIdentifiableClass::TYPE_USER:
                                 $identified = TBGContext::factory()->TBGUser($request->getParameter('value'));
                                 break;
                             case TBGIdentifiableClass::TYPE_TEAM:
                                 $identified = TBGContext::factory()->TBGTeam($request->getParameter('value'));
                                 break;
                         }
                         if ($identified instanceof TBGIdentifiableClass) {
                             if ((bool) $request->getParameter('teamup', false)) {
                                 $team = new TBGTeam();
                                 $team->setName($identified->getBuddyname() . ' & ' . TBGContext::getUser()->getBuddyname());
                                 $team->setOndemand(true);
                                 $team->save();
                                 $team->addMember($identified);
                                 $team->addMember(TBGContext::getUser());
                                 $identified = $team;
                             }
                             if ($request->getParameter('field') == 'owned_by') {
                                 $issue->setOwner($identified);
                             } elseif ($request->getParameter('field') == 'assigned_to') {
                                 $issue->setAssignee($identified);
                             }
                         }
                     } else {
                         if ($request->getParameter('field') == 'owned_by') {
                             $issue->unsetOwner();
                         } elseif ($request->getParameter('field') == 'assigned_to') {
                             $issue->unsetAssignee();
                         }
                     }
                 } elseif ($request->getParameter('field') == 'posted_by') {
                     $identified = TBGContext::factory()->TBGUser($request->getParameter('value'));
                     if ($identified instanceof TBGIdentifiableClass) {
                         $issue->setPostedBy($identified);
                     }
                 }
                 if ($request->getParameter('field') == 'owned_by') {
                     return $this->renderJSON(array('changed' => $issue->isOwnedByChanged(), 'field' => $issue->isOwned() ? array('id' => $issue->getOwnerID(), 'name' => $issue->getOwnerType() == TBGIdentifiableClass::TYPE_USER ? $this->getComponentHTML('main/userdropdown', array('user' => $issue->getOwner())) : $this->getComponentHTML('main/teamdropdown', array('team' => $issue->getOwner()))) : array('id' => 0)));
                 }
                 if ($request->getParameter('field') == 'posted_by') {
                     return $this->renderJSON(array('changed' => $issue->isPostedByChanged(), 'field' => array('id' => $issue->getPostedByID(), 'name' => $this->getComponentHTML('main/userdropdown', array('user' => $issue->getPostedBy())))));
                 }
                 if ($request->getParameter('field') == 'assigned_to') {
                     return $this->renderJSON(array('changed' => $issue->isAssignedToChanged(), 'field' => $issue->isAssigned() ? array('id' => $issue->getAssigneeID(), 'name' => $issue->getAssigneeType() == TBGIdentifiableClass::TYPE_USER ? $this->getComponentHTML('main/userdropdown', array('user' => $issue->getAssignee())) : $this->getComponentHTML('main/teamdropdown', array('team' => $issue->getAssignee()))) : array('id' => 0)));
                 }
             }
             break;
         case 'spent_time':
             if (!$issue->canEditSpentTime()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             if ($request->getParameter('spent_time') != TBGContext::getI18n()->__('Enter time spent here') && $request->getParameter('spent_time')) {
                 $function = $request->hasParameter('spent_time_added_text') ? 'addSpentTime' : 'setSpentTime';
                 $issue->{$function}($request->getParameter('spent_time'));
             } elseif ($request->hasParameter('value')) {
                 $issue->setSpentTime($request->getParameter('value'));
             } else {
                 if ($request->hasParameter('spent_time_added_input')) {
                     $issue->addSpentMonths($request->getParameter('spent_time_months'));
                     $issue->addSpentWeeks($request->getParameter('spent_time_weeks'));
                     $issue->addSpentDays($request->getParameter('spent_time_days'));
                     $issue->addSpentHours($request->getParameter('spent_time_hours'));
                     $issue->addSpentPoints($request->getParameter('spent_time_points'));
                 } else {
                     $issue->setSpentMonths($request->getParameter('spent_time_months'));
                     $issue->setSpentWeeks($request->getParameter('spent_time_weeks'));
                     $issue->setSpentDays($request->getParameter('spent_time_days'));
                     $issue->setSpentHours($request->getParameter('spent_time_hours'));
                     $issue->setSpentPoints($request->getParameter('spent_time_points'));
                 }
             }
             return $this->renderJSON(array('changed' => $issue->isSpentTimeChanged(), 'field' => $issue->hasSpentTime() ? array('id' => 1, 'name' => $issue->getFormattedTime($issue->getSpentTime())) : array('id' => 0), 'values' => $issue->getSpentTime()));
             break;
         case 'category':
         case 'resolution':
         case 'severity':
         case 'reproducability':
         case 'priority':
         case 'milestone':
         case 'issuetype':
         case 'status':
         case 'pain_bug_type':
         case 'pain_likelihood':
         case 'pain_effect':
             if ($request->getParameter('field') == 'category' && !$issue->canEditCategory()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'resolution' && !$issue->canEditResolution()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'severity' && !$issue->canEditSeverity()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'reproducability' && !$issue->canEditReproducability()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'priority' && !$issue->canEditPriority()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'milestone' && !$issue->canEditMilestone()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'issuetype' && !$issue->canEditIssuetype()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif ($request->getParameter('field') == 'status' && !$issue->canEditStatus()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             } elseif (in_array($request->getParameter('field'), array('pain_bug_type', 'pain_likelihood', 'pain_effect')) && !$issue->canEditUserPain()) {
                 return $this->renderJSON(array('changed' => false, 'error' => TBGContext::getI18n()->__('You do not have permission to perform this action')));
             }
             try {
                 $classname = null;
                 $parameter_name = strtolower($request->getParameter('field'));
                 $parameter_id_name = "{$parameter_name}_id";
                 $is_pain = in_array($parameter_name, array('pain_bug_type', 'pain_likelihood', 'pain_effect'));
                 if ($is_pain) {
                     switch ($parameter_name) {
                         case 'pain_bug_type':
                             $set_function_name = 'setPainBugType';
                             $is_changed_function_name = 'isPainBugTypeChanged';
                             $get_pain_type_label_function = 'getPainBugTypeLabel';
                             break;
                         case 'pain_likelihood':
                             $set_function_name = 'setPainLikelihood';
                             $is_changed_function_name = 'isPainLikelihoodChanged';
                             $get_pain_type_label_function = 'getPainLikelihoodLabel';
                             break;
                         case 'pain_effect':
                             $set_function_name = 'setPainEffect';
                             $is_changed_function_name = 'isPainEffectChanged';
                             $get_pain_type_label_function = 'getPainEffectLabel';
                             break;
                     }
                 } else {
                     $classname = 'TBG' . ucfirst($parameter_name);
                     $lab_function_name = $classname;
                     $set_function_name = 'set' . ucfirst($parameter_name);
                     $is_changed_function_name = 'is' . ucfirst($parameter_name) . 'Changed';
                 }
                 if ($request->hasParameter($parameter_id_name)) {
                     $parameter_id = $request->getParameter($parameter_id_name);
                     if ($parameter_id !== 0) {
                         $is_valid = $is_pain ? in_array($parameter_id, array_keys(TBGIssue::getPainTypesOrLabel($parameter_name))) : $parameter_id == 0 || ($parameter = TBGContext::factory()->{$lab_function_name}($parameter_id)) instanceof TBGIdentifiableClass;
                     }
                     if ($parameter_id == 0 || $parameter_id !== 0 && $is_valid) {
                         if ($classname == 'TBGIssuetype') {
                             $visible_fields = $issue->getIssuetype() instanceof TBGIssuetype ? $issue->getProject()->getVisibleFieldsArray($issue->getIssuetype()->getID()) : array();
                         } else {
                             $visible_fields = null;
                         }
                         $issue->{$set_function_name}($parameter_id);
                         if ($is_pain) {
                             if (!$issue->{$is_changed_function_name}()) {
                                 return $this->renderJSON(array('changed' => false, 'field' => array('id' => 0), 'user_pain' => $issue->getUserPain(), 'user_pain_diff_text' => $issue->getUserPainDiffText()));
                             }
                             return $parameter_id == 0 ? $this->renderJSON(array('changed' => true, 'field' => array('id' => 0), 'user_pain' => $issue->getUserPain(), 'user_pain_diff_text' => $issue->getUserPainDiffText())) : $this->renderJSON(array('changed' => true, 'field' => array('id' => $parameter_id, 'name' => $issue->{$get_pain_type_label_function}()), 'user_pain' => $issue->getUserPain(), 'user_pain_diff_text' => $issue->getUserPainDiffText()));
                         } else {
                             if (!$issue->{$is_changed_function_name}()) {
                                 return $this->renderJSON(array('changed' => false));
                             }
                             if (isset($parameter)) {
                                 $name = $parameter->getName();
                             } else {
                                 $name = null;
                             }
                             $field = array('id' => $parameter_id, 'name' => $name);
                             if ($classname == 'TBGIssuetype') {
                                 TBGContext::loadLibrary('ui');
                                 $field['src'] = htmlspecialchars(TBGContext::getTBGPath() . 'themes/' . TBGSettings::getThemeName() . '/' . $issue->getIssuetype()->getIcon() . '_small.png');
                             }
                             return $parameter_id == 0 ? $this->renderJSON(array('changed' => true, 'field' => array('id' => 0))) : $this->renderJSON(array('changed' => true, 'visible_fields' => $visible_fields, 'field' => $field));
                         }
                     }
                 }
             } catch (Exception $e) {
                 $this->getResponse()->setHttpStatus(400);
                 return $this->renderJSON(array('error' => $e->getMessage()));
             }
             $this->getResponse()->setHttpStatus(400);
             return $this->renderJSON(array('error' => TBGContext::getI18n()->__('No valid field value specified')));
             break;
         default:
             if ($customdatatype = TBGCustomDatatype::getByKey($request->getParameter('field'))) {
                 $key = $customdatatype->getKey();
                 $customdatatypeoption_value = $request->getParameter("{$key}_value");
                 if (!$customdatatype->hasCustomOptions()) {
                     switch ($customdatatype->getType()) {
                         case TBGCustomDatatype::EDITIONS_CHOICE:
                         case TBGCustomDatatype::COMPONENTS_CHOICE:
                         case TBGCustomDatatype::RELEASES_CHOICE:
                         case TBGCustomDatatype::STATUS_CHOICE:
                             if ($customdatatypeoption_value == '') {
                                 $issue->setCustomField($key, "");
                             } else {
                                 switch ($customdatatype->getType()) {
                                     case TBGCustomDatatype::EDITIONS_CHOICE:
                                         $temp = new TBGEdition($request->getRawParameter("{$key}_value"));
                                         $finalvalue = $temp->getName();
                                         break;
                                     case TBGCustomDatatype::COMPONENTS_CHOICE:
                                         $temp = new TBGComponent($request->getRawParameter("{$key}_value"));
                                         $finalvalue = $temp->getName();
                                         break;
                                     case TBGCustomDatatype::RELEASES_CHOICE:
                                         $temp = new TBGBuild($request->getRawParameter("{$key}_value"));
                                         $finalvalue = $temp->getName();
                                         break;
                                     case TBGCustomDatatype::STATUS_CHOICE:
                                         $temp = new TBGStatus($request->getRawParameter("{$key}_value"));
                                         $finalvalue = $temp->getName();
                                         break;
                                 }
                                 $issue->setCustomField($key, $request->getRawParameter("{$key}_value"));
                             }
                             if (isset($temp) && $customdatatype->getType() == TBGCustomDatatype::STATUS_CHOICE && is_object($temp)) {
                                 $finalvalue = '<div style="border: 1px solid #AAA; background-color: ' . $temp->getColor() . '; font-size: 1px; width: 20px; height: 15px; margin-right: 5px; float: left;" id="status_color">&nbsp;</div>' . $finalvalue;
                             }
                             $changed_methodname = "isCustomfield{$key}Changed";
                             if (!$issue->{$changed_methodname}()) {
                                 return $this->renderJSON(array('changed' => false));
                             }
                             return $customdatatypeoption_value == '' ? $this->renderJSON(array('changed' => true, 'field' => array('id' => 0))) : $this->renderJSON(array('changed' => true, 'field' => array('value' => $key, 'name' => $finalvalue)));
                             break;
                         case TBGCustomDatatype::INPUT_TEXTAREA_MAIN:
                         case TBGCustomDatatype::INPUT_TEXTAREA_SMALL:
                             if ($customdatatypeoption_value == '') {
                                 $issue->setCustomField($key, "");
                             } else {
                                 $issue->setCustomField($key, $request->getRawParameter("{$key}_value"));
                             }
                             $changed_methodname = "isCustomfield{$key}Changed";
                             if (!$issue->{$changed_methodname}()) {
                                 return $this->renderJSON(array('changed' => false));
                             }
                             return $customdatatypeoption_value == '' ? $this->renderJSON(array('changed' => true, 'field' => array('id' => 0))) : $this->renderJSON(array('changed' => true, 'field' => array('value' => $key, 'name' => tbg_parse_text($request->getRawParameter("{$key}_value"), false, null, array('issue' => $issue)))));
                             break;
                         default:
                             if ($customdatatypeoption_value == '') {
                                 $issue->setCustomField($key, "");
                             } else {
                                 $issue->setCustomField($key, $request->getParameter("{$key}_value"));
                             }
                             $changed_methodname = "isCustomfield{$key}Changed";
                             if (!$issue->{$changed_methodname}()) {
                                 return $this->renderJSON(array('changed' => false));
                             }
                             return $customdatatypeoption_value == '' ? $this->renderJSON(array('changed' => true, 'field' => array('id' => 0))) : $this->renderJSON(array('changed' => true, 'field' => array('value' => $key, 'name' => $customdatatypeoption_value)));
                             break;
                     }
                 }
                 if ($customdatatypeoption_value == '' || $customdatatypeoption_value && ($customdatatypeoption = TBGCustomDatatypeOption::getByValueAndKey($customdatatypeoption_value, $key)) instanceof TBGCustomDatatypeOption) {
                     if ($customdatatypeoption_value == '') {
                         $issue->setCustomField($key, "");
                     } else {
                         $issue->setCustomField($key, $customdatatypeoption->getValue());
                     }
                     $changed_methodname = "isCustomfield{$key}Changed";
                     if (!$issue->{$changed_methodname}()) {
                         return $this->renderJSON(array('changed' => false));
                     }
                     return $customdatatypeoption_value == '' ? $this->renderJSON(array('changed' => true, 'field' => array('id' => 0))) : $this->renderJSON(array('changed' => true, 'field' => array('value' => $customdatatypeoption_value, 'name' => $customdatatypeoption->getName())));
                 }
             }
             break;
     }
     $this->getResponse()->setHttpStatus(400);
     return $this->renderJSON(array('error' => TBGContext::getI18n()->__('No valid field specified (%field%)', array('%field%' => $request->getParameter('field')))));
 }