Skip to content
This repository was archived by the owner on Oct 29, 2020. It is now read-only.

Commit 6add579

Browse files
committed
Merge pull request #4535 from angaither/promoted-reasons
Promoted reasons
2 parents d979111 + 154a156 commit 6add579

File tree

5 files changed

+100
-19
lines changed

5 files changed

+100
-19
lines changed

lib/modules/dosomething/dosomething_reportback/dosomething_reportback.admin.inc

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ function dosomething_reportback_files_form($form, &$form_state, $status = NULL,
9696
'inappropriate' => t('Inappropriate'),
9797
'unrealistic' => t('Unrealistic quantity'),
9898
);
99+
$promoted_options = array(
100+
'photo' => t('Good photo'),
101+
'quote' => t('Good quote'),
102+
'sponsored' => t('Good for sponsor'),
103+
'impact' => t('High impact')
104+
);
99105

100106
$params = array(
101107
'status' => $status,
@@ -178,6 +184,10 @@ function dosomething_reportback_files_form($form, &$form_state, $status = NULL,
178184
'#options' => $status_options,
179185
'#default_value' => $status,
180186
),
187+
'promoted_reason' => array(
188+
'#type' => 'checkboxes',
189+
'#options' => $promoted_options,
190+
),
181191
'flagged_reason' => array(
182192
'#type' => 'checkboxes',
183193
'#options' => $flagged_options,
@@ -209,16 +219,13 @@ function dosomething_reportback_files_form_submit($form, &$form_state) {
209219

210220
$rbf = reportback_file_load($fid);
211221

212-
// Loop through the flagged_reason values:
213-
foreach ($values['flagged_reason'] as $reason_key => $reason_value) {
214-
// Form sends unchecked as a 0.
215-
if (!is_string($reason_value)) {
216-
unset($values['flagged_reason'][$reason_key]);
217-
}
222+
// Set flagged or promoted reasons.
223+
if ($values['status'] === 'promoted') {
224+
dosomething_reportback_set_promote_flag_reasons($values, 'promoted_reason');
225+
}
226+
elseif ($values['status'] === 'flagged') {
227+
dosomething_reportback_set_promote_flag_reasons($values, 'flagged_reason');
218228
}
219-
220-
// Overwrite flagged reason with the new concatenated string.
221-
$values['flagged_reason'] = implode(', ', $values['flagged_reason']);
222229

223230
// Write the review data.
224231
$save = $rbf->review($values);
@@ -230,11 +237,34 @@ function dosomething_reportback_files_form_submit($form, &$form_state) {
230237
drupal_set_message(t("Updated."));
231238
}
232239

240+
/**
241+
* Set flagged and promoted reasons.
242+
* @param array values
243+
* Form values submission array
244+
* @param string $reason_type
245+
* Either flagged_reason or promoted_reason
246+
*/
247+
function dosomething_reportback_set_promote_flag_reasons(&$values, $reason_type) {
248+
// Loop through the reason values:
249+
foreach ($values[$reason_type] as $reason_key => $reason_value) {
250+
// Form sends unchecked as a 0.
251+
if (!is_string($reason_value)) {
252+
unset($values[$reason_type][$reason_key]);
253+
}
254+
}
255+
256+
// Overwrite reasons with the new concatenated string.
257+
$values[$reason_type] = implode(', ', $values[$reason_type]);
258+
}
259+
260+
261+
233262
/**
234263
* Themes the dosomething_reportback_files_form constructor.
235264
*/
236265
function theme_dosomething_reportback_files_form($variables) {
237266
$form = $variables['form'];
267+
238268
$view_mode = $form['view_mode']['#value'];
239269

240270
$rb_files = element_children($form['rb_files']);
@@ -250,6 +280,7 @@ function theme_dosomething_reportback_files_form($variables) {
250280
foreach ($rb_files as $fid) {
251281
$rbf = reportback_file_load($fid);
252282
$view = entity_view('reportback_file', array($rbf->fid => $rbf), $view_mode);
283+
$promote_form = drupal_render($form['rb_files'][$fid]['promoted_reason']);
253284
$flag_form = drupal_render($form['rb_files'][$fid]['flagged_reason']);
254285
$flag_form .= drupal_render($form['rb_files'][$fid]['delete']);
255286
$rows[] = array(
@@ -259,7 +290,8 @@ function theme_dosomething_reportback_files_form($variables) {
259290
drupal_render($view),
260291
drupal_render($form['rb_files'][$fid]['quantity']),
261292
drupal_render($form['rb_files'][$fid]['node']),
262-
drupal_render($form['rb_files'][$fid]['status']) . '<div class="flag-form"><hr />' . $flag_form . '</div>',
293+
drupal_render($form['rb_files'][$fid]['status']) . '<div class="flag-form"><hr />' . $flag_form . '</div>' . drupal_render($form['rb_files'][$fid]['status']) . '<div class="promote-form"><hr />' . $promote_form . '</div>',
294+
263295
),
264296
);
265297
}

lib/modules/dosomething/dosomething_reportback/dosomething_reportback.install

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ function dosomething_reportback_schema() {
6969
'type' => 'varchar',
7070
'length' => '255',
7171
),
72+
'promoted' => array(
73+
'description' => 'Whether the Reportback has been promoted.',
74+
'type' => 'int',
75+
'default' => NULL,
76+
),
77+
'promoted_reason' => array(
78+
'description' => 'Reason why reportback was promoted.',
79+
'type' => 'varchar',
80+
'length' => '255',
81+
),
7282
),
7383
'primary key' => array('rbid'),
7484
'indexes' => array(
@@ -706,3 +716,18 @@ function dosomething_reportback_update_7025(&$sandbox) {
706716
AND rb.flagged is null;");
707717

708718
}
719+
720+
/**
721+
* Create promoted/promoted reason columns.
722+
*/
723+
function dosomething_reportback_update_7026(&$sandbox) {
724+
$tbl_name = 'dosomething_reportback';
725+
$fields = array('promoted', 'promoted_reason');
726+
$schema = dosomething_reportback_schema();
727+
foreach ($fields as $fld_name) {
728+
if (!db_field_exists($tbl_name, $fld_name)) {
729+
// Add it per the schema field definition.
730+
db_add_field($tbl_name, $fld_name, $schema[$tbl_name]['fields'][$fld_name]);
731+
}
732+
}
733+
}

lib/modules/dosomething/dosomething_reportback/includes/dosomething_reportback.inc

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,23 +195,29 @@ class ReportbackEntity extends Entity {
195195
}
196196

197197
/**
198-
* Flags the reportback with the given $reason string.
198+
* Flags or promotes the reportback, and adds reasons.
199199
*
200200
* @param string $status
201201
* The status of the reprotback file (approved, flagged, excluded, promoted)
202-
* @param string $reason
203-
* Text to store in the flagged_reason property.
202+
* @param array $values
203+
* Array storing values for flagged/promoted reasons.
204204
*/
205-
public function setFlagged($status = NULL, $reason = NULL) {
205+
public function setFlaggedPromoted($status = NULL, $values = NULL) {
206206
if ($status === 'flagged') {
207207
$this->flagged = 1;
208-
$this->flagged_reason = $reason;
208+
$this->flagged_reason = $values['flagged_reason'] ?: NULL;
209+
}
210+
elseif ($status === 'promoted') {
211+
$this->promoted = 1;
212+
$this->promoted_reason = $values['promoted_reason'] ?: NULL;
209213
}
210214
else {
211215
$this->flagged = 0;
216+
$this->promoted = 0;
212217
}
213218
return entity_save('reportback_file', $this);
214219
}
220+
215221
}
216222

217223
/**

lib/modules/dosomething/dosomething_reportback/includes/dosomething_reportback_file.inc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,15 @@ class ReportbackFileEntity extends Entity {
6060
}
6161
$reportback = reportback_load($this->rbid);
6262
$reason = NULL;
63+
6364
if (isset($values['flagged_reason'])) {
64-
$reason = $values['flagged_reason'];
65+
$flagged_reason = $values['flagged_reason'];
66+
}
67+
if (isset($values['promoted_reason'])) {
68+
$promoted_reason = $values['promoted_reason'];
6569
}
66-
$reportback->setFlagged($this->status, $reason);
70+
$reportback->setFlaggedPromoted($this->status, $values);
71+
6772
if (!empty($values['delete'])) {
6873
$this->deleteFile();
6974
}

lib/modules/dosomething/dosomething_reportback/js/reportback_review_form.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,31 @@
33

44
// Hide all flag forms to start.
55
$('.flag-form').hide();
6+
$('.promote-form').hide();
67

78
// Listen for changes to Status radios.
89
$('.form-radio:input[name*="status"]').click(function() {
910
// Find the flagForm that corresponds to this checkbox.
10-
var flagForm = $(this).parents('.form-type-radios').next('.flag-form');
11+
var flagForm = $(this).parents('td').find('.flag-form');
12+
var promoteForm = $(this).parents('td').find('.promote-form');
13+
1114
// If "flagged" was checked:
1215
if ($(this).val() == 'flagged') {
13-
// Display the flagForm.
16+
// Display the flagForm, hide promoteForm.
1417
flagForm.show();
18+
promoteForm.hide();
19+
}
20+
// If "promotted" was checked:
21+
else if ($(this).val() == 'promoted') {
22+
// Show promoteForm, hide flagForm.
23+
promoteForm.show();
24+
flagForm.hide();
25+
1526
}
27+
// If any other option was clicked, hide both forms.
1628
else {
1729
flagForm.hide();
30+
promoteForm.hide();
1831
}
1932
});
2033

0 commit comments

Comments
 (0)