/**
  * 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;
 }
Пример #2
0
 /**
  * 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();
 }
Пример #3
0
 /**
  * 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));
             }
         }
     }
 }