예제 #1
0
파일: project.php 프로젝트: pashakiz/crowdf
 /**
  * Method to load a row from the database by primary key and bind the fields
  * to the JTable instance properties.
  *
  * @param   mixed   $keys  An optional primary key value to load the row by, or an array of fields to match.  If not
  *                         set the instance property value is used.
  * @param   boolean $reset True to reset the default values before loading the new row.
  *
  * @return  boolean  True if successful. False if row not found or on error (internal error state set in that case).
  *
  * @link    http://docs.joomla.org/JTable/load
  * @since   11.1
  */
 public function load($keys = null, $reset = true)
 {
     parent::load($keys, $reset);
     $this->slug = $this->id . "." . $this->alias;
     // Calculate funded percent
     if (!$this->goal) {
         $this->fundedPercent = 0;
     } else {
         $percentage = new Prism\Math();
         $percentage->calculatePercentage($this->funded, $this->goal, 0);
         $this->fundedPercent = (string) $percentage;
     }
     // Calculate end date
     if (!empty($this->funding_days)) {
         $fundingStartDateValidator = new Prism\Validator\Date($this->funding_start);
         if (!$fundingStartDateValidator->isValid()) {
             $this->funding_end = "0000-00-00";
         } else {
             $fundingStartDate = new Crowdfunding\Date($this->funding_start);
             $fundingEndDate = $fundingStartDate->calculateEndDate($this->funding_days);
             $this->funding_end = $fundingEndDate->toSql();
         }
     }
     // Calculate days left
     $today = new Crowdfunding\Date();
     $this->daysLeft = $today->calculateDaysLeft($this->funding_days, $this->funding_start, $this->funding_end);
     return true;
 }
예제 #2
0
 /**
  * Prepare some specific data.
  */
 public function prepareData()
 {
     $this->slug = $this->id . ':' . $this->alias;
     $this->catslug = $this->getCatSlug();
     // Calculate funded percent
     if (!$this->goal) {
         $this->fundedPercent = 0;
     } else {
         $this->fundedPercent = (string) Prism\Utilities\MathHelper::calculatePercentage($this->funded, $this->goal, 0);
     }
     // Calculate end date
     if ($this->funding_days > 0) {
         $fundingStartDateValidator = new Prism\Validator\Date($this->funding_start);
         if (!$fundingStartDateValidator->isValid()) {
             $this->funding_end = '1000-01-01';
         } else {
             $fundingStartDate = new Crowdfunding\Date($this->funding_start);
             $fundingEndDate = $fundingStartDate->calculateEndDate($this->funding_days);
             $this->funding_end = $fundingEndDate->toSql();
         }
     }
     // Calculate days left
     $today = new Crowdfunding\Date();
     $this->daysLeft = $today->calculateDaysLeft($this->funding_days, $this->funding_start, $this->funding_end);
 }
예제 #3
0
 /**
  * Method to get an object.
  *
  * @param    integer  $id The id of the object to get.
  *
  * @return    mixed    Object on success, false on failure.
  */
 public function getItem($id = 0)
 {
     if ((int) $id === 0) {
         $id = $this->getState($this->context . '.id');
     }
     $storedId = $this->getStoreId($id);
     if (!array_key_exists($storedId, $this->item)) {
         $this->item[$storedId] = null;
         $db = $this->getDbo();
         $query = $db->getQuery(true);
         $query->select('a.id, a.title, a.short_desc, a.image,  ' . 'a.funded, a.goal, a.user_id, a.funding_type, ' . 'a.funding_start, a.funding_end, a.funding_days,  ' . $query->concatenate(array('a.id', 'a.alias'), ':') . ' AS slug, ' . 'b.name AS user_name, ' . $query->concatenate(array('c.id', 'c.alias'), ':') . ' AS catslug ')->from($db->quoteName('#__crowdf_projects', 'a'))->innerJoin($db->quoteName('#__users', 'b') . ' ON a.user_id = b.id')->innerJoin($db->quoteName('#__categories', 'c') . ' ON a.catid = c.id')->where('a.id = ' . (int) $id)->where('a.published = 1')->where('a.approved  = 1');
         $db->setQuery($query, 0, 1);
         $result = $db->loadObject();
         // Attempt to load the row.
         if ($result !== null and is_object($result)) {
             // Calculate funded percentage.
             $result->funded_percents = Prism\Utilities\MathHelper::calculatePercentage($result->funded, $result->goal, 0);
             // Calculate days left
             $today = new Crowdfunding\Date();
             $result->days_left = $today->calculateDaysLeft($result->funding_days, $result->funding_start, $result->funding_end);
             $this->item[$storedId] = $result;
         }
     }
     return $this->item[$storedId];
 }
예제 #4
0
파일: embed.php 프로젝트: pashakiz/crowdf
 /**
  * Method to get an object.
  *
  * @param    integer  $id The id of the object to get.
  *
  * @return    mixed    Object on success, false on failure.
  */
 public function getItem($id = null)
 {
     if (empty($id)) {
         $id = $this->getState($this->context . '.id');
     }
     $storedId = $this->getStoreId($id);
     if (!isset($this->item[$storedId])) {
         $this->item[$storedId] = null;
         $db = $this->getDbo();
         $query = $db->getQuery(true);
         $query->select("a.id, a.title, a.short_desc, a.image,  " . "a.funded, a.goal, a.user_id, " . "a.funding_start, a.funding_end, a.funding_days,  " . $query->concatenate(array("a.id", "a.alias"), ":") . ' AS slug, ' . "b.name AS user_name, " . $query->concatenate(array("c.id", "c.alias"), ":") . ' AS catslug ')->from($db->quoteName("#__crowdf_projects", "a"))->innerJoin($db->quoteName('#__users', 'b') . ' ON a.user_id = b.id')->innerJoin($db->quoteName('#__categories', 'c') . ' ON a.catid = c.id')->where("a.id = " . (int) $id)->where("a.published = 1")->where("a.approved  = 1");
         $db->setQuery($query, 0, 1);
         $result = $db->loadObject();
         // Attempt to load the row.
         if (!empty($result)) {
             // Calculate funded percentage.
             $percent = new Prism\Math();
             $percent->calculatePercentage($result->funded, $result->goal, 0);
             $result->funded_percents = (string) $percent;
             // Calculate days left
             $today = new Crowdfunding\Date();
             $result->days_left = $today->calculateDaysLeft($result->funding_days, $result->funding_start, $result->funding_end);
             $this->item[$storedId] = $result;
         }
     }
     return $this->item[$storedId];
 }
예제 #5
0
 /**
  * This method calculates 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 Prism\Validator\Date($table->get('funding_start'));
     if (!$fundingStartDate->isValid()) {
         $app = JFactory::getApplication();
         /** @var $app JApplicationSite */
         $fundingStart = new JDate('now', $app->get('offset'));
         $table->set('funding_start', $fundingStart->toSql());
         // If funding type is 'days', calculate end date.
         if ($table->get('funding_days')) {
             $fundingStartDate = new Crowdfunding\Date($table->get('funding_start'));
             $endDate = $fundingStartDate->calculateEndDate($table->get('funding_days'));
             $table->set('funding_end', $endDate->toSql());
         }
     }
     // Get parameters
     $params = JComponentHelper::getParams('com_crowdfunding');
     /** @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 Prism\Validator\Date($table->get('funding_end'));
     if ($fundingEndDate->isValid()) {
         $validatorPeriod = new Crowdfunding\Validator\Project\Period($table->get('funding_start'), $table->get('funding_end'), $minDays, $maxDays);
         if (!$validatorPeriod->isValid()) {
             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));
             }
         }
     }
 }
예제 #6
0
 public static function prepareItems($items)
 {
     $result = array();
     if (!empty($items)) {
         foreach ($items as $key => $item) {
             // Calculate funding end date
             if (!empty($item->funding_days)) {
                 $fundingStartDate = new Crowdfunding\Date($item->funding_start);
                 $endDate = $fundingStartDate->calculateEndDate($item->funding_days);
                 $item->funding_end = $endDate->format("Y-m-d");
             }
             // Calculate funded percentage.
             $percent = new Prism\Math();
             $percent->calculatePercentage($item->funded, $item->goal, 0);
             $item->funded_percents = (string) $percent;
             // Calculate days left
             $today = new Crowdfunding\Date();
             $item->days_left = $today->calculateDaysLeft($item->funding_days, $item->funding_start, $item->funding_end);
             $result[$key] = $item;
         }
     }
     return $result;
 }
 /**
  * Validate user data that comes from step "Funding".
  *
  * @param array $data
  * @param Joomla\Registry\Registry $params
  *
  * @throws \RuntimeException
  * @throws \InvalidArgumentException
  *
  * @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 = Joomla\Utilities\ArrayHelper::getValue($data, 'goal', 0, 'float');
         $minAmount = (double) $params->get('project_amount_minimum', 100);
         $maxAmount = (double) $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 ($maxAmount > 0 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 = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_duration_type');
         // Validate funding type 'days'
         if (strcmp('days', $fundingType) === 0) {
             $days = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_days', 0, 'integer');
             if ($days < $minDays) {
                 $result['message'] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_DAYS');
                 return $result;
             }
             if ($maxDays > 0 and $days > $maxDays) {
                 $result['message'] = JText::_('PLG_CONTENT_CROWDFUNDINGVALIDATOR_ERROR_INVALID_DAYS');
                 return $result;
             }
         } else {
             // Validate funding type 'date'
             $fundingEndDate = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_end');
             $dateValidator = new Prism\Validator\Date($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 = Joomla\Utilities\ArrayHelper::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 = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_duration_type');
             // Generate funding end date from days.
             if (strcmp('days', $fundingType) === 0) {
                 // Get funding days.
                 $days = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_days', 0, 'integer');
                 $fundingStartDate = new Crowdfunding\Date($item->funding_start);
                 $endDate = $fundingStartDate->calculateEndDate($days);
                 $fundingEndDate = $endDate->format('Y-m-d');
             } else {
                 // Get funding end date from request
                 $fundingEndDate = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_end');
             }
             // Validate the period.
             $dateValidator = new Crowdfunding\Validator\Project\Period($item->funding_start, $fundingEndDate, $minDays, $maxDays);
             if (!$dateValidator->isValid()) {
                 $result['message'] = $maxDays > 0 ? 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;
 }
예제 #8
0
 /**
  * Method to get an object.
  *
  * @param    integer  $id  The id of the object to get.
  *
  * @return    mixed    Object on success, false on failure.
  */
 public function getItem($id = null)
 {
     if (empty($id)) {
         $id = $this->getState($this->context . '.id');
     }
     $storedId = $this->getStoreId($id);
     if (!isset($this->item[$storedId])) {
         $this->item[$storedId] = null;
         $db = $this->getDbo();
         $query = $db->getQuery(true);
         $query->select("a.id, a.title, a.short_desc, a.description, a.image, a.location_id, " . "a.funded, a.goal, a.pitch_video, a.pitch_image, " . "a.funding_start, a.funding_end, a.funding_days, a.funding_type,  " . "a.catid, a.user_id, a.published, a.approved, a.hits, " . $query->concatenate(array("a.id", "a.alias"), ":") . ' AS slug, ' . $query->concatenate(array("b.id", "b.alias"), ":") . ' AS catslug')->from($db->quoteName("#__crowdf_projects", "a"))->innerJoin($db->quoteName("#__categories", "b") . " ON a.catid = b.id")->where("a.id = " . (int) $id);
         $db->setQuery($query, 0, 1);
         $result = $db->loadObject();
         // Attempt to load the row.
         if (!empty($result)) {
             // Calculate end date
             if (!empty($result->funding_days)) {
                 $fundingStartDateValidator = new Prism\Validator\Date($result->funding_start);
                 if (!$fundingStartDateValidator->isValid()) {
                     $result->funding_end = "0000-00-00";
                 } else {
                     $fundingStartDate = new Crowdfunding\Date($result->funding_start);
                     $fundingEndDate = $fundingStartDate->calculateEndDate($result->funding_days);
                     $result->funding_end = $fundingEndDate->format("Y-m-d");
                 }
             }
             // Calculate funded percentage.
             $math = new Prism\Math();
             $math->calculatePercentage($result->funded, $result->goal, 0);
             $result->funded_percents = (string) $math;
             // Calculate days left.
             $today = new Crowdfunding\Date();
             $result->days_left = $today->calculateDaysLeft($result->funding_days, $result->funding_start, $result->funding_end);
             $this->item[$storedId] = $result;
         }
     }
     return $this->item[$storedId];
 }
예제 #9
0
파일: funding.php 프로젝트: pashakiz/crowdf
 /**
  * Prepare and sanitise the table prior to saving.
  *
  * @param CrowdfundingTableProject $table
  * @param array $data
  *
  * @throws RuntimeException
  *
  * @since    1.6
  */
 protected function prepareTable(&$table, $data)
 {
     $durationType = Joomla\Utilities\ArrayHelper::getValue($data, "duration_type");
     $fundingEnd = Joomla\Utilities\ArrayHelper::getValue($data, "funding_end");
     $fundingDays = Joomla\Utilities\ArrayHelper::getValue($data, "funding_days");
     switch ($durationType) {
         case "days":
             $table->funding_days = $fundingDays < 0 ? 0 : (int) $fundingDays;
             // Calculate end date
             if (!empty($table->funding_start)) {
                 $fundingStartDate = new Crowdfunding\Date($table->funding_start);
                 $fundingEndDate = $fundingStartDate->calculateEndDate($table->funding_days);
                 $table->funding_end = $fundingEndDate->format("Y-m-d");
             } else {
                 $table->funding_end = "0000-00-00";
             }
             break;
         case "date":
             $dateValidator = new Prism\Validator\Date($fundingEnd);
             if (!$dateValidator->isValid($fundingEnd)) {
                 throw new RuntimeException(JText::_("COM_CROWDFUNDING_ERROR_INVALID_DATE"));
             }
             $date = new JDate($fundingEnd);
             $table->funding_days = 0;
             $table->funding_end = $date->toSql();
             break;
         default:
             $table->funding_days = 0;
             $table->funding_end = "0000-00-00";
             break;
     }
 }
예제 #10
0
 /**
  * Method to get an object.
  *
  * @param    integer  $id  The id of the object to get.
  *
  * @return    mixed    Object on success, false on failure.
  */
 public function getItem($id = 0)
 {
     if ((int) $id === 0) {
         $id = $this->getState($this->context . '.id');
     }
     $storedId = $this->getStoreId($id);
     if (!array_key_exists($storedId, $this->item)) {
         $this->item[$storedId] = null;
         $db = $this->getDbo();
         $query = $db->getQuery(true);
         $query->select('a.id, a.title, a.short_desc, a.description, a.image, a.location_id, ' . 'a.funded, a.goal, a.pitch_video, a.pitch_image, ' . 'a.funding_start, a.funding_end, a.funding_days, a.funding_type,  ' . 'a.catid, a.user_id, a.published, a.approved, a.hits, ' . $query->concatenate(array('a.id', 'a.alias'), ':') . ' AS slug, ' . $query->concatenate(array('b.id', 'b.alias'), ':') . ' AS catslug')->from($db->quoteName('#__crowdf_projects', 'a'))->innerJoin($db->quoteName('#__categories', 'b') . ' ON a.catid = b.id')->where('a.id = ' . (int) $id);
         $db->setQuery($query, 0, 1);
         $result = $db->loadObject();
         // Attempt to load the row.
         if ($result !== null and is_object($result)) {
             // Calculate end date
             if ((int) $result->funding_days > 0) {
                 $fundingStartDateValidator = new Prism\Validator\Date($result->funding_start);
                 if (!$fundingStartDateValidator->isValid()) {
                     $result->funding_end = '0000-00-00';
                 } else {
                     $fundingStartDate = new Crowdfunding\Date($result->funding_start);
                     $fundingEndDate = $fundingStartDate->calculateEndDate($result->funding_days);
                     $result->funding_end = $fundingEndDate->format('Y-m-d');
                 }
             }
             // Calculate funded percentage.
             $result->funded_percents = Prism\Utilities\MathHelper::calculatePercentage($result->funded, $result->goal, 0);
             // Calculate days left.
             $today = new Crowdfunding\Date();
             $result->days_left = $today->calculateDaysLeft($result->funding_days, $result->funding_start, $result->funding_end);
             $this->item[$storedId] = $result;
         }
     }
     return $this->item[$storedId];
 }
예제 #11
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 Prism\Validator\Date($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 Crowdfunding\Date($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 Prism\Validator\Date($table->get("funding_end"));
     if ($fundingEndDate->isValid()) {
         $validatorPeriod = new Crowdfunding\Validator\Project\Period($table->get("funding_start"), $table->get("funding_end"), $minDays, $maxDays);
         if (!$validatorPeriod->isValid()) {
             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));
             }
         }
     }
 }
예제 #12
0
 /**
  * Prepare and sanitise the table prior to saving.
  *
  * @param CrowdfundingTableProject $table
  * @param array $data
  *
  * @throws RuntimeException
  *
  * @since    1.6
  */
 protected function prepareTableData($table, $data)
 {
     $durationType = Joomla\Utilities\ArrayHelper::getValue($data, 'duration_type');
     $fundingEnd = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_end');
     $fundingDays = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_days');
     switch ($durationType) {
         case 'days':
             $table->funding_days = $fundingDays < 0 ? 0 : (int) $fundingDays;
             // Calculate end date
             if ((int) $table->funding_start > 0) {
                 $fundingStartDate = new Crowdfunding\Date($table->funding_start);
                 $fundingEndDate = $fundingStartDate->calculateEndDate($table->funding_days);
                 $table->funding_end = $fundingEndDate->format('Y-m-d');
             } else {
                 $table->funding_end = '0000-00-00';
             }
             break;
         case 'date':
             $dateValidator = new Prism\Validator\Date($fundingEnd);
             if (!$dateValidator->isValid($fundingEnd)) {
                 throw new RuntimeException(JText::_('COM_CROWDFUNDING_ERROR_INVALID_DATE'));
             }
             $date = new JDate($fundingEnd);
             $table->funding_days = 0;
             $table->funding_end = $date->toSql();
             break;
         default:
             $table->funding_days = 0;
             $table->funding_end = '0000-00-00';
             break;
     }
 }
예제 #13
0
 public function prepareItems(array $items)
 {
     $result = array();
     foreach ($items as $key => $item) {
         $result[$key] = $item;
         // Calculate funding end date
         if ((int) $item->funding_days > 0) {
             $fundingStartDate = new Crowdfunding\Date($item->funding_start);
             $fundingEndDate = $fundingStartDate->calculateEndDate($item->funding_days);
             $result[$key]->funding_end = $fundingEndDate->format('Y-m-d');
         }
         // Calculate funded percentage.
         $result[$key]->funded_percents = Prism\Utilities\MathHelper::calculatePercentage($item->funded, $item->goal, 0);
         // Calculate days left
         $today = new Crowdfunding\Date();
         $result[$key]->days_left = $today->calculateDaysLeft($item->funding_days, $item->funding_start, $item->funding_end);
     }
     return $result;
 }
예제 #14
0
 /**
  * Prepare and sanitise the table prior to saving.
  *
  * @param CrowdfundingTableProject $table
  * @param array $data
  *
  * @throws \RuntimeException
  * @throws \InvalidArgumentException
  *
  * @since    1.6
  */
 protected function prepareTableData($table, $data)
 {
     $durationType = Joomla\Utilities\ArrayHelper::getValue($data, 'duration_type');
     $fundingEnd = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_end');
     $fundingDays = Joomla\Utilities\ArrayHelper::getValue($data, 'funding_days', 0, 'int');
     switch ($durationType) {
         case 'days':
             $fundingDays = $fundingDays < 0 ? 0 : (int) $fundingDays;
             $table->set('funding_days', $fundingDays);
             // Calculate end date
             $startingDateValidator = new Prism\Validator\Date($table->get('funding_start'));
             if ($startingDateValidator->isValid()) {
                 $fundingStartDate = new Crowdfunding\Date($table->get('funding_start'));
                 $fundingEndDate = $fundingStartDate->calculateEndDate($table->get('funding_days'));
                 $table->set('funding_end', $fundingEndDate->format(Prism\Constants::DATE_FORMAT_SQL_DATE));
             } else {
                 $table->set('funding_end', Prism\Constants::DATE_DEFAULT_SQL_DATE);
             }
             break;
         case 'date':
             $fundingEnd = CrowdfundingHelper::convertToSql($fundingEnd);
             $dateValidator = new Prism\Validator\Date($fundingEnd);
             if (!$dateValidator->isValid()) {
                 throw new RuntimeException(JText::_('COM_CROWDFUNDING_ERROR_INVALID_DATE'));
             }
             $date = new JDate($fundingEnd);
             $table->set('funding_days', 0);
             $table->set('funding_end', $date->toSql());
             break;
         default:
             $table->set('funding_days', 0);
             $table->set('funding_end', Prism\Constants::DATE_DEFAULT_SQL_DATE);
             break;
     }
 }
예제 #15
0
파일: backing.php 프로젝트: pashakiz/crowdf
 /**
  * Method to get an object.
  *
  * @param    integer $id   The id of the object to get.
  *
  * @return    mixed    Object on success, false on failure.
  */
 public function getItem($id = null)
 {
     if (empty($id)) {
         $id = $this->getState('id');
     }
     if (is_null($this->item)) {
         $db = $this->getDbo();
         $query = $db->getQuery(true);
         $query->select("a.id, a.title, a.short_desc, a.image, " . "a.funded, a.goal, a.pitch_video, a.pitch_image, " . "a.funding_start, a.funding_end, a.funding_days, " . "a.funding_type, a.user_id,  a.type_id, " . "b.name AS user_name, " . $query->concatenate(array("a.id", "a.alias"), ":") . ' AS slug, ' . $query->concatenate(array("c.id", "c.alias"), ":") . ' AS catslug')->from($db->quoteName("#__crowdf_projects", "a"))->innerJoin($db->quoteName('#__users', 'b') . ' ON a.user_id = b.id')->innerJoin($db->quoteName('#__categories', 'c') . ' ON a.catid = c.id')->where("a.id = " . (int) $id)->where("a.published = 1")->where("a.approved  = 1");
         $db->setQuery($query, 0, 1);
         $result = $db->loadObject();
         // Attempt to load the row.
         if (!empty($result)) {
             // Calculate ending date by days left.
             if (!empty($result->funding_days)) {
                 $fundingStartDate = new Crowdfunding\Date($result->funding_start);
                 $fundingEndDate = $fundingStartDate->calculateEndDate($result->funding_days);
                 $result->funding_end = $fundingEndDate->format("Y-m-d");
             }
             // Calculate funded percent
             $percent = new Prism\Math();
             $percent->calculatePercentage($result->funded, $result->goal, 0);
             $result->funded_percents = (string) $percent;
             // Calculate days left.
             $today = new Crowdfunding\Date();
             $result->days_left = $today->calculateDaysLeft($result->funding_days, $result->funding_start, $result->funding_end);
             $this->item = $result;
         }
     }
     return $this->item;
 }
예제 #16
0
 /**
  * Method to get an object.
  *
  * @param    integer $id   The id of the object to get.
  *
  * @throws \RuntimeException
  * @return stdClass|null    Object on success, null on failure.
  */
 public function getItem($id = 0)
 {
     if ((int) $id === 0) {
         $id = $this->getState('id');
     }
     if ($this->item === null) {
         $db = $this->getDbo();
         $query = $db->getQuery(true);
         $query->select('a.id, a.title, a.short_desc, a.image, ' . 'a.funded, a.goal, a.pitch_video, a.pitch_image, ' . 'a.funding_start, a.funding_end, a.funding_days, ' . 'a.funding_type, a.user_id,  a.type_id, ' . 'b.name AS user_name, ' . $query->concatenate(array('a.id', 'a.alias'), ':') . ' AS slug, ' . $query->concatenate(array('c.id', 'c.alias'), ':') . ' AS catslug')->from($db->quoteName('#__crowdf_projects', 'a'))->innerJoin($db->quoteName('#__users', 'b') . ' ON a.user_id = b.id')->innerJoin($db->quoteName('#__categories', 'c') . ' ON a.catid = c.id')->where('a.id = ' . (int) $id)->where('a.published = 1')->where('a.approved  = 1');
         $db->setQuery($query, 0, 1);
         $result = $db->loadObject();
         // Attempt to load the row.
         if (is_object($result)) {
             // Calculate ending date by days left.
             if ($result->funding_days > 0) {
                 $fundingStartDate = new Crowdfunding\Date($result->funding_start);
                 $fundingEndDate = $fundingStartDate->calculateEndDate($result->funding_days);
                 $result->funding_end = $fundingEndDate->format(Prism\Constants::DATE_FORMAT_SQL_DATE);
             }
             // Calculate funded percent
             $result->funded_percents = Prism\Utilities\MathHelper::calculatePercentage($result->funded, $result->goal, 0);
             // Calculate days left.
             $today = new Crowdfunding\Date();
             $result->days_left = $today->calculateDaysLeft($result->funding_days, $result->funding_start, $result->funding_end);
             $this->item = $result;
         }
     }
     return $this->item;
 }
예제 #17
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 == Prism\Constants::PUBLISHED) {
                 // Publish a project
                 // Validate funding period
                 $fundingEndValidator = new Prism\Validator\Date($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 Prism\Validator\Date($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)) {
                         $fundingStartDate = new Crowdfunding\Date($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 Prism\Validator\Date($table->funding_start);
                 if ($fundingStartValidator->isValid()) {
                     $dateValidator = new Crowdfunding\Validator\Project\Period($table->funding_start, $table->funding_end, $minDays, $maxDays);
                     if (!$dateValidator->isValid()) {
                         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", Prism\Constants::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 calculates 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 Prism\Validator\Date($table->get('funding_start'));
     if (!$fundingStartDate->isValid()) {
         $app = JFactory::getApplication();
         /** @var $app JApplicationSite */
         $fundingStart = new JDate('now', $app->get('offset'));
         $table->set('funding_start', $fundingStart->toSql());
         // If funding type is 'days', calculate end date.
         if ($table->get('funding_days')) {
             $fundingStartDate = new Crowdfunding\Date($table->get('funding_start'));
             $endDate = $fundingStartDate->calculateEndDate($table->get('funding_days'));
             $table->set('funding_end', $endDate->toSql());
         }
     }
 }