diff --git a/application/admin/index/controllers/ProposalsController.php b/application/admin/index/controllers/ProposalsController.php
index adebc95..616ff14 100644
--- a/application/admin/index/controllers/ProposalsController.php
+++ b/application/admin/index/controllers/ProposalsController.php
@@ -77,7 +77,7 @@ class ProposalsController extends IP_Controller_EventAction {
foreach ($this->_getProposalQuestions() as $question) {
$element = $form->getElement(AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID);
- if ($element) {
+ if ($element && $element->getValue()) {
$obj->{AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID} = $element->getValue();
}
}
@@ -346,8 +346,17 @@ class ProposalsController extends IP_Controller_EventAction {
foreach ($this->_getProposalQuestions() as $question) {
$element = $form->getElement(AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID);
if ($element) {
- if(!$notFullAccess || $obj->canWrite(AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID))
- $obj->{AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID} = $element->getValue();
+ if(!$notFullAccess || $obj->canWrite(AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID)) {
+ if ($element->getValue()) {
+ $obj->{AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID} = $element->getValue();
+ } else if ($obj->{AdditionalQuestionConfigs::KEY_PREFIX . $question->recordID}) {
+ $responses = parent::getTableObject('AdditionalQuestionResponses')->fetchAll(
+ array('objectID = ?' => $preID, 'questionID = ?' => $question->recordID, 'objectType = ?' => 'Proposals'));
+ foreach ($responses as $response) {
+ $response->delete();
+ }
+ }
+ }
}
}
diff --git a/db/Event/481-DeleteEmptyResponses.php b/db/Event/481-DeleteEmptyResponses.php
new file mode 100644
index 0000000..5baeeb7
--- /dev/null
+++ b/db/Event/481-DeleteEmptyResponses.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Delete Empty Proposal Additional Questions Responses
+ **/
+class Event_481 extends Migration
+{
+ public function deploy()
+ {
+ $sql = "DELETE FROM " . $this->getTableName(AdditionalQuestionResponses::TABLE) .
+ "WHERE (ISNULL(`writeInResponse`) OR `writeInResponse`='')
+ AND (ISNULL(`responseID`) OR `responseID`='')
+ AND (ISNULL(`textResponse`) OR `textResponse`='')
+ AND `objectType` = 'Proposals'";
+ return MyDB::getInstance()->execute($sql);
+ }
+}
diff --git a/model/AdditionalQuestionConfig.php b/model/AdditionalQuestionConfig.php
index ec51180..13a96a8 100644
--- a/model/AdditionalQuestionConfig.php
+++ b/model/AdditionalQuestionConfig.php
@@ -272,11 +272,25 @@ class AdditionalQuestionConfig extends IP_Db_Table_Row_EventAbstract implements
}
/**
+ * Get Usage count from Additional Questions Options.
+ */
+ public function getOptionsUsageCount() {
+ $optionsUsage=0;
+ $additionalQuestionsOptionsTable= IP::getInstance()->getEvent()->getTableObject('AdditionalQuestionOptions');
+ $select = $additionalQuestionsOptionsTable->select()
+ ->where('questionID = ' . $this->recordID);
+
+ $optionsUsage=$additionalQuestionsOptionsTable->fetchAll($select);
+
+ return count($optionsUsage);
+ }
+
+ /**
* Get Responses count from Additional Questions Responses.
*/
public function getResponseUsageCount() {
$responseUsage=0;
- $additionalQuestionsResponseTable= IP::getInstance()->getEvent()->getTableObject('AdditionalQuestionOptions');
+ $additionalQuestionsResponseTable= IP::getInstance()->getEvent()->getTableObject('AdditionalQuestionResponses');
$select = $additionalQuestionsResponseTable->select()
->where('questionID = ' . $this->recordID);
@@ -284,7 +298,7 @@ class AdditionalQuestionConfig extends IP_Db_Table_Row_EventAbstract implements
return count($responseUsage);
}
-
+
/**
* Get usage count from Additional Questions Page Builder.
*/
@@ -352,6 +366,7 @@ class AdditionalQuestionConfig extends IP_Db_Table_Row_EventAbstract implements
* preDelete: Throw exception if Additional Questions Exist in AdditionalQuestionResponses or in the Page Builder Elements.
*/
public function preDelete() {
+ $optionsUsageCount=$this->getOptionsUsageCount();
$responseUsageCount=$this->getResponseUsageCount();
$pageBuilderUsageCount = $this->getPageBuilderUsageCount();
$savedReportUsageCount = $this->getSavedReportsUsageCount();
@@ -359,10 +374,10 @@ class AdditionalQuestionConfig extends IP_Db_Table_Row_EventAbstract implements
$templatesUsageCount = $this->getTemplatesUsageCount();
$sponsorshipItemUsageCount = $this->getSponsorshipItemsUsageCount();
- if($responseUsageCount > 0) {
+ if($optionsUsageCount > 0) {
throw new MessageException(AdditionalQuestionConfigs::DELETE_ADDITIONAL_VALUES);
}
-
+
/**
* If in use add to list to display error message to user.
*/
@@ -382,6 +397,9 @@ class AdditionalQuestionConfig extends IP_Db_Table_Row_EventAbstract implements
if ($sponsorshipItemUsageCount > 0) {
$usedBy[] = $sponsorshipItemUsageCount . ' ' . (($sponsorshipItemUsageCount > 1) ? IP::_('SponsorshipItems::PLURAL') : IP::_('SponsorshipItems::SINGULAR'));
}
+ if ($responseUsageCount > 0) {
+ $usedBy[] = $responseUsageCount . ' ' . (($responseUsageCount > 1) ? IP::_('Proposals::PLURAL') : IP::_('Proposals::SINGULAR'));
+ }
if (count($usedBy) > 0) {
$usageMessage = str_replace('{usedBy}', implode(', ', $usedBy), IP::_('AdditionalQuestionConfigs::DELETE_FAILED_NON_EMPTY'));
throw new MessageException($usageMessage);