Merge pull request #9158 from fuzionnz/CRM-19444
[civicrm-core.git] / CRM / Contribute / BAO / Widget.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
7e9e8871 4 | CiviCRM version 4.7 |
6a488035 5 +--------------------------------------------------------------------+
fa938177 6 | Copyright CiviCRM LLC (c) 2004-2016 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
d25dd0ee 26 */
6a488035
TO
27
28/**
29 *
30 * @package CRM
fa938177 31 * @copyright CiviCRM LLC (c) 2004-2016
6a488035
TO
32 */
33
34/**
95cdcc0f 35 * Class to retrieve information about a contribution page.
6a488035
TO
36 */
37class CRM_Contribute_BAO_Widget extends CRM_Contribute_DAO_Widget {
38
39 /**
40 * Gets all campaign related data and returns it as a std class.
41 *
42 * @param int $contributionPageID
c6a8e7a3 43 * @param int $widgetID
8bf434e2 44 * @param bool $includePending
6a488035 45 *
bed98343 46 * @return object
6a488035 47 */
8bf434e2 48 public static function getContributionPageData($contributionPageID, $widgetID, $includePending = FALSE) {
6a488035
TO
49 $config = CRM_Core_Config::singleton();
50
51 $data = array();
52 $data['currencySymbol'] = $config->defaultCurrencySymbol;
53
54 if (empty($contributionPageID) ||
55 CRM_Utils_Type::validate($contributionPageID, 'Integer') == NULL
56 ) {
57 $data['is_error'] = TRUE;
58 CRM_Core_Error::debug_log_message("$contributionPageID is not set");
59 return $data;
60 }
61
62 $widget = new CRM_Contribute_DAO_Widget();
63 $widget->contribution_page_id = $contributionPageID;
64 if (!$widget->find(TRUE)) {
65 $data['is_error'] = TRUE;
66 CRM_Core_Error::debug_log_message("$contributionPageID is not found");
67 return $data;
68 }
69
70 $data['is_error'] = FALSE;
71 if (!$widget->is_active) {
72 $data['is_active'] = FALSE;
73 }
74
75 $data['is_active'] = TRUE;
76 $data['title'] = $widget->title;
77 $data['logo'] = $widget->url_logo;
78 $data['button_title'] = $widget->button_title;
79 $data['about'] = $widget->about;
80
c6a8e7a3 81 //check if pending status needs to be included
82 $status = '1';
83 if ($includePending) {
84 $status = '1,2';
85 }
86
6a488035
TO
87 $query = "
88 SELECT count( id ) as count,
89 sum( total_amount) as amount
90 FROM civicrm_contribution
91 WHERE is_test = 0
c6a8e7a3 92 AND contribution_status_id IN ({$status})
6a488035
TO
93 AND contribution_page_id = %1";
94 $params = array(1 => array($contributionPageID, 'Integer'));
95 $dao = CRM_Core_DAO::executeQuery($query, $params);
96 if ($dao->fetch()) {
353ffa53
TO
97 $data['num_donors'] = (int) $dao->count;
98 $data['money_raised'] = (int) $dao->amount;
6a488035
TO
99 }
100 else {
101 $data['num_donors'] = $data['money_raised'] = $data->money_raised = 0;
102 }
103
104 $query = "
105 SELECT goal_amount, start_date, end_date, is_active
106 FROM civicrm_contribution_page
107 WHERE id = %1";
108 $params = array(1 => array($contributionPageID, 'Integer'));
109 $dao = CRM_Core_DAO::executeQuery($query, $params);
110
111 $data['campaign_start'] = '';
112 $startDate = NULL;
113 if ($dao->fetch()) {
353ffa53 114 $data['money_target'] = (int) $dao->goal_amount;
6a488035
TO
115
116 // conditions that needs to be handled
117 // 1. Campaign is not active - no text
118 // 2. Campaign start date greater than today - show start date
119 // 3. Campaign end date is set and greater than today - show end date
120 // 4. If no start and end date or no end date and start date greater than today, then it's ongoing
121 if ($dao->is_active) {
122 $data['campaign_start'] = ts('Campaign is ongoing');
123
124 // check for time being between start and end date
125 $now = time();
126 if ($dao->start_date) {
127 $startDate = CRM_Utils_Date::unixTime($dao->start_date);
128 if ($startDate &&
129 $startDate >= $now
130 ) {
131 $data['is_active'] = FALSE;
132 $data['campaign_start'] = ts('Campaign starts on %1', array(
bed98343 133 1 => CRM_Utils_Date::customFormat($dao->start_date, $config->dateformatFull),
353ffa53 134 )
bed98343 135 );
6a488035
TO
136 }
137 }
138
139 if ($dao->end_date) {
140 $endDate = CRM_Utils_Date::unixTime($dao->end_date);
141 if ($endDate &&
142 $endDate < $now
143 ) {
144 $data['is_active'] = FALSE;
bed98343 145 $data['campaign_start'] = ts('Campaign ended on %1',
146 array(
147 1 => CRM_Utils_Date::customFormat($dao->end_date, $config->dateformatFull),
353ffa53 148 )
bed98343 149 );
6a488035
TO
150 }
151 elseif ($startDate >= $now) {
bed98343 152 $data['campaign_start'] = ts('Campaign starts on %1',
153 array(
154 1 => CRM_Utils_Date::customFormat($dao->start_date, $config->dateformatFull),
353ffa53 155 )
bed98343 156 );
6a488035
TO
157 }
158 else {
bed98343 159 $data['campaign_start'] = ts('Campaign ends on %1',
160 array(
161 1 => CRM_Utils_Date::customFormat($dao->end_date, $config->dateformatFull),
353ffa53 162 )
bed98343 163 );
6a488035
TO
164 }
165 }
166 }
167 else {
168 $data['is_active'] = FALSE;
169 }
170 }
171 else {
172 $data['is_active'] = FALSE;
173 }
174
175 $data['money_raised_percentage'] = 0;
176 if ($data['money_target'] > 0) {
177 $percent = $data['money_raised'] / $data['money_target'];
178 $data['money_raised_percentage'] = (round($percent, 2)) * 100 . "%";
179 $data['money_target_display'] = CRM_Utils_Money::format($data['money_target']);
353ffa53
TO
180 $data['money_raised'] = ts('Raised %1 of %2', array(
181 1 => CRM_Utils_Money::format($data['money_raised']),
bed98343 182 2 => $data['money_target_display'],
353ffa53 183 ));
6a488035
TO
184 }
185 else {
186 $data['money_raised'] = ts('Raised %1', array(1 => CRM_Utils_Money::format($data['money_raised'])));
187 }
188
353ffa53 189 $data['money_low'] = 0;
6a488035 190 $data['num_donors'] = $data['num_donors'] . " " . ts('Donors');
353ffa53 191 $data['home_url'] = "<a href='{$config->userFrameworkBaseURL}' class='crm-home-url' style='color:" . $widget->color_homepage_link . "'>" . ts('Learn more.') . "</a>";
6a488035
TO
192
193 // if is_active is false, show this link and hide the contribute button
194 $data['homepage_link'] = $widget->url_homepage;
195
196 $data['colors'] = array();
197
198 $data['colors']["title"] = $widget->color_title;
199 $data['colors']["button"] = $widget->color_button;
200 $data['colors']["bar"] = $widget->color_bar;
201 $data['colors']["main_text"] = $widget->color_main_text;
202 $data['colors']["main"] = $widget->color_main;
203 $data['colors']["main_bg"] = $widget->color_main_bg;
204 $data['colors']["bg"] = $widget->color_bg;
205 $data['colors']["about_link"] = $widget->color_about_link;
206
207 return $data;
208 }
96025800 209
6a488035 210}