/** * Validate user data that comes from step "Funding". * * @param array $data * @param Joomla\Registry\Registry $params * * @return array */ protected function validateStepFunding(&$data, &$params) { $result = array("success" => false, "message" => ""); // Validate minimum and maximum amount. if ($this->params->get("validate_amount", 1)) { $goal = JArrayHelper::getValue($data, "goal", 0, "float"); $minAmount = $params->get("project_amount_minimum", 100); $maxAmount = $params->get("project_amount_maximum"); // Verify minimum amount if ($goal < $minAmount) { $result["message"] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_GOAL'); return $result; } // Verify maximum amount if (!empty($maxAmount) and $goal > $maxAmount) { $result["message"] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_GOAL'); return $result; } } // Validate funding duration - days or date. if ($this->params->get("validate_funding_duration", 1)) { $minDays = (int) $params->get("project_days_minimum", 15); $maxDays = (int) $params->get("project_days_maximum", 0); $fundingType = JArrayHelper::getValue($data, "funding_duration_type"); // Validate funding type "days" if (strcmp("days", $fundingType) == 0) { $days = JArrayHelper::getValue($data, "funding_days", 0, "integer"); if ($days < $minDays) { $result["message"] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_DAYS'); return $result; } if (!empty($maxDays) and $days > $maxDays) { $result["message"] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_DAYS'); return $result; } } else { // Validate funding type "date" $fundingEndDate = JArrayHelper::getValue($data, "funding_end"); $dateValidator = new ITPrismValidatorDate($fundingEndDate); if (!$dateValidator->isValid()) { $result["message"] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_DATE'); return $result; } } } // Validate funding duration when the projects is published and approved. if ($this->params->get("validate_funding_duration_approved", 1)) { // Get item and check it for active state ( published and approved ). $itemId = JArrayHelper::getValue($data, "id"); $userId = JFactory::getUser()->get("id"); $item = $this->getItem($itemId, $userId); // Validate date if user want to edit date, while the project is published. if ($item->published and $item->approved) { $minDays = (int) $params->get("project_days_minimum", 15); $maxDays = (int) $params->get("project_days_maximum", 0); $fundingType = JArrayHelper::getValue($data, "funding_duration_type"); // Generate funding end date from days. if (strcmp("days", $fundingType) == 0) { // Get funding days. $days = JArrayHelper::getValue($data, "funding_days", 0, "integer"); $fundingStartDate = new CrowdFundingDate($item->funding_start); $endDate = $fundingStartDate->calculateEndDate($days); $fundingEndDate = $endDate->format("Y-m-d"); } else { // Get funding end date from request $fundingEndDate = JArrayHelper::getValue($data, "funding_end"); } // Validate the period. $dateValidator = new CrowdFundingDate($item->funding_start); if (!$dateValidator->isValidPeriod($fundingEndDate, $minDays, $maxDays)) { $result["message"] = !empty($maxDays) ? JText::sprintf("PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_ENDING_DATE_MIN_MAX_DAYS", $minDays, $maxDays) : JText::sprintf("PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_ENDING_DATE_MIN_DAYS", $minDays); return $result; } } } // Validations completed successfully. $result = array("success" => true); return $result; }
/** * Method to change the published state of one or more records. * * @param array &$pks A list of the primary keys to change. * @param integer $value The value of the published state. * * @throws Exception * * @return boolean True on success. * * @since 12.2 */ public function publish(&$pks, $value = 0) { $table = $this->getTable(); /** @var $table CrowdFundingTableProject */ $pks = (array) $pks; // Access checks. foreach ($pks as $pk) { $table->reset(); if ($table->load($pk)) { if ($value == CrowdFundingConstants::PUBLISHED) { // Publish a project // Validate funding period jimport("itprism.validator.date"); $fundingEndValidator = new ITPrismValidatorDate($table->funding_end); if (!$table->funding_days and !$fundingEndValidator->isValid()) { throw new RuntimeException(JText::_("COM_CROWDFUNDING_ERROR_INVALID_DURATION_PERIOD")); } // Calculate starting date if the user publish a project for first time. $fundingStartValidator = new ITPrismValidatorDate($table->funding_start); if (!$fundingStartValidator->isValid()) { $fundingStart = new JDate(); $table->funding_start = $fundingStart->toSql(); // If funding type is "days", calculate end date. if (!empty($table->funding_days)) { jimport("crowdfunding.date"); $fundingStartDate = new CrowdFundingDate($table->funding_start); $fundingEndDate = $fundingStartDate->calculateEndDate($table->funding_days); $table->funding_end = $fundingEndDate->toSql(); } } // Validate the period if the funding type is days $params = JComponentHelper::getParams($this->option); /** @var $params Joomla\Registry\Registry */ $minDays = $params->get("project_days_minimum", 15); $maxDays = $params->get("project_days_maximum"); $fundingStartValidator = new ITPrismValidatorDate($table->funding_start); if ($fundingStartValidator->isValid()) { $dateValidator = new CrowdFundingDate($table->funding_start); if (!$dateValidator->isValidPeriod($table->funding_end, $minDays, $maxDays)) { if (!empty($maxDays)) { throw new RuntimeException(JText::sprintf("COM_CROWDFUNDING_ERROR_INVALID_ENDING_DATE_MIN_MAX_DAYS", $minDays, $maxDays)); } else { throw new RuntimeException(JText::sprintf("COM_CROWDFUNDING_ERROR_INVALID_ENDING_DATE_MIN_DAYS", $minDays)); } } } $table->set("published", CrowdFundingConstants::PUBLISHED); $table->store(); } else { // Set other states - unpublished, trash,... $table->publish(array($pk), $value); } } } // Trigger change state event $context = $this->option . '.' . $this->name; // Include the content plugins for the change of state event. JPluginHelper::importPlugin('content'); // Trigger the onContentChangeState event. $dispatcher = JEventDispatcher::getInstance(); $result = $dispatcher->trigger($this->event_change_state, array($context, $pks, $value)); if (in_array(false, $result, true)) { throw new Exception(JText::_("COM_CROWDFUNDING_ERROR_CHANGE_STATE")); } // Clear the component's cache $this->cleanCache(); }
/** * This method calculate start date and validate funding period. * * @param CrowdFundingTableProject $table * * @throws Exception */ protected function prepareTable(&$table) { // Calculate start and end date if the user publish a project for first time. $fundingStartDate = new ITPrismValidatorDate($table->funding_start); if (!$fundingStartDate->isValid($table->funding_start)) { $fundingStart = new JDate(); $table->funding_start = $fundingStart->toSql(); // If funding type is "days", calculate end date. if ($table->get("funding_days")) { $fundingStartDate = new CrowdFundingDate($table->get("funding_start")); $endDate = $fundingStartDate->calculateEndDate($table->get("funding_days")); $table->set("funding_end", $endDate->format("Y-m-d")); } } // Get parameters $app = JFactory::getApplication(); /** @var $app JApplicationSite */ $params = $app->getParams(); /** @var $params Joomla\Registry\Registry */ $minDays = $params->get("project_days_minimum", 15); $maxDays = $params->get("project_days_maximum"); // If there is an ending date, validate the period. $fundingEndDate = new ITPrismValidatorDate($table->get("funding_end")); if ($fundingEndDate->isValid()) { $fundingStartDate = new CrowdFundingDate($table->get("funding_start")); if (!$fundingStartDate->isValidPeriod($table->get("funding_end"), $minDays, $maxDays)) { if (!empty($maxDays)) { throw new RuntimeException(JText::sprintf("COM_CROWDFUNDING_ERROR_INVALID_ENDING_DATE_MIN_MAX_DAYS", $minDays, $maxDays)); } else { throw new RuntimeException(JText::sprintf("COM_CROWDFUNDING_ERROR_INVALID_ENDING_DATE_MIN_DAYS", $minDays)); } } } }