forked from ding2/ding_bookmark
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathding_bookmark.pages.inc
188 lines (160 loc) · 5.41 KB
/
ding_bookmark.pages.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<?php
/**
* @file
* Ding bookmark pages.
*/
/**
* Menu callback; Display user bookmark items.
*/
function ding_bookmark_user_bookmark_page($account) {
$content_ids = flag_load('bookmark')->get_user_content_ids($account->uid);
if ($content_ids) {
$bookmark_form = drupal_get_form('ding_bookmark_remove_form', $content_ids);
// render reservation buttons outside bookmark form, so it's valid XHTML
$reservation_forms = ding_bookmark_reservation_forms($content_ids);
drupal_add_js( drupal_get_path('module', 'ding_bookmark') . '/js/ding_bookmark.js' );
drupal_add_css(drupal_get_path('module', 'ding_bookmark') . '/css/ding_bookmark.css' );
if (!empty($bookmark_form)) {
return $reservation_forms . drupal_render($bookmark_form);
}
}
return ding_bookmark_user_bookmark_empty_page();
}
/**
* Bookmark page empty text.
*/
function ding_bookmark_user_bookmark_empty_page() {
return t('Bookmarks is empty');
}
/**
* Bookmark manage form.
*/
function ding_bookmark_remove_form($form, &$form_state, $entities) {
$item_options = array();
foreach ($entities as $entity_id => $entity_type) {
// Build item view.
$item_view_build = ding_bookmark_item_view($entity_type, $entity_id);
if ($item_view_build) {
$item_options[$entity_id] = $entity_id;
$form['#builded_entities'][$entity_id] = $item_view_build;
}
}
$form['items'] = array(
'#type' => 'checkboxes',
'#options' => $item_options,
'#required' => TRUE,
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Delete selected'),
);
return $form;
}
/**
* Submit handler.
*/
function ding_bookmark_remove_form_submit($form, &$form_state) {
// Filter selected items.
$items_to_delete = array_filter($form_state['values']['items']);
if ($items_to_delete) {
// Unflag all selected items.
$flag = flag_get_flag('bookmark');
foreach ($items_to_delete as $item_wid) {
$flag->flag('unflag', $item_wid);
}
}
}
/**
* Theme form as a table.
*/
function theme_ding_bookmark_remove_form($variables) {
$output = "";
$form = $variables['form'];
$flag = flag_get_flag('bookmark');
// Add 'select all' checkbox.
drupal_add_js('misc/tableselect.js');
$header = array(
array('class' => array('select-all')),
array('data' => t('Title'), 'class' => 'title'),
'',
);
// Add classes to table header columns.
// Create table rows.
$rows = array();
if (!empty($form['items']['#options'])) {
foreach (element_children($form['items']) as $key) {
$item_wid = $key;
// Clean checkbox
unset($form['items'][$key]['#title']) ;
// Create delete link.
$delete_link_query = drupal_get_destination() + array('token' => flag_get_token($item_wid));
$delete_link = array(
'#prefix' => '<p class="ding-entity-button">',
'#suffix' => '</p>',
'#type' => 'markup',
'#markup' => l(t($flag->unflag_short), 'flag/unflag/bookmark/' . $item_wid, array('query' => $delete_link_query)),
);
// Reservation button
$reservation_div = NULL;
if ($form['#builded_entities'][$item_wid]['#object']->ding_entity_type == 'ding_entity' &&
$form['#builded_entities'][$item_wid]['#object']->is('reservable')) {
// @TODO Create theme function for this, so class can be change in the
// theme layer.
$reservation_link = array(
'#prefix' => '<p id="wid' . $item_wid . '" class="ding-entity-button ding-bookmark-reservation-button">',
'#suffix' => '</p>',
'#type' => 'markup',
'#markup' => l(t('Reserve'), ''),
);
}
//Add row.
$rows[] = array(
drupal_render($form['items'][$key]),
drupal_render($form['#builded_entities'][$item_wid]), // Theme item as a teaser.
drupal_render($delete_link) . drupal_render($reservation_link),
);
}
}
if (count($rows)) {
$output .= theme('table', array(
'header' => $header ,
'rows' => $rows,
'attributes' => array('width' => 'auto'),
));
// Render all remaining elements.
$output .= drupal_render_children($form);
}
return $output;
}
function ding_bookmark_reservation_forms($content_ids) {
$reservation_block = '';
foreach ($content_ids as $entity_id => $entity_type) {
// build item view.
$item_view_build = ding_bookmark_item_view($entity_type, $entity_id);
// reservation buttons
if ($item_view_build['#object']->ding_entity_type == 'ding_entity' && $item_view_build['#object']->is('reservable')) {
$reservation_form = array(ding_provider_get_form('ding_reservation_reserve_form', new DingReservationReservableEntity($item_view_build['#object']), TRUE));
$reservation_form[0]['#id'] = 'ding-reservation-reserve-form-wid' . $entity_id;
// @TODO Update this, so class can be change in the theme layer.
$reservation_div = array(
'#prefix' => '<div class="ding-entity-button-reserve">',
'#suffix' => '</div>',
'#type' => 'markup',
'#markup' => drupal_render($reservation_form),
);
$reservation_block .= drupal_render($reservation_div);
}
}
return $reservation_block;
}
/**
* Bookmark dummy form.
*/
function ding_bookmark_dummy_form($form, &$form_state) {
$form = array();
$form['#attributes'] = array('style' => array('visibility:hidden;'));
return $form;
}