123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- <?php
- if (!defined('SMF'))
- die('No direct access...');
- function createList($listOptions)
- {
- global $context, $smcFunc;
- assert(isset($listOptions['id']));
- assert(isset($listOptions['columns']));
- assert(is_array($listOptions['columns']));
- assert((empty($listOptions['items_per_page']) || (isset($listOptions['get_count']['function'], $listOptions['base_href']) && is_numeric($listOptions['items_per_page']))));
- assert((empty($listOptions['default_sort_col']) || isset($listOptions['columns'][$listOptions['default_sort_col']])));
- assert((!isset($listOptions['form']) || isset($listOptions['form']['href'])));
- call_integration_hook('integrate_' . $listOptions['id'], array(&$listOptions));
-
- $context[$listOptions['id']] = array();
- $list_context = &$context[$listOptions['id']];
-
- if (empty($listOptions['default_sort_col']))
- {
- $list_context['sort'] = array();
- $sort = '1=1';
- }
- else
- {
- $request_var_sort = isset($listOptions['request_vars']['sort']) ? $listOptions['request_vars']['sort'] : 'sort';
- $request_var_desc = isset($listOptions['request_vars']['desc']) ? $listOptions['request_vars']['desc'] : 'desc';
- if (isset($_REQUEST[$request_var_sort], $listOptions['columns'][$_REQUEST[$request_var_sort]], $listOptions['columns'][$_REQUEST[$request_var_sort]]['sort']))
- $list_context['sort'] = array(
- 'id' => $_REQUEST[$request_var_sort],
- 'desc' => isset($_REQUEST[$request_var_desc]) && isset($listOptions['columns'][$_REQUEST[$request_var_sort]]['sort']['reverse']),
- );
- else
- $list_context['sort'] = array(
- 'id' => $listOptions['default_sort_col'],
- 'desc' => (!empty($listOptions['default_sort_dir']) && $listOptions['default_sort_dir'] == 'desc') || (!empty($listOptions['columns'][$listOptions['default_sort_col']]['sort']['default']) && substr($listOptions['columns'][$listOptions['default_sort_col']]['sort']['default'], -4, 4) == 'desc') ? true : false,
- );
-
- $sort = $listOptions['columns'][$list_context['sort']['id']]['sort'][$list_context['sort']['desc'] ? 'reverse' : 'default'];
- }
- $list_context['start_var_name'] = isset($listOptions['start_var_name']) ? $listOptions['start_var_name'] : 'start';
-
- if (empty($listOptions['items_per_page']))
- {
- $list_context['start'] = 0;
- $list_context['items_per_page'] = 0;
- }
-
- else
- {
-
- if (isset($listOptions['get_count']['file']))
- require_once($listOptions['get_count']['file']);
- $list_context['total_num_items'] = call_user_func_array($listOptions['get_count']['function'], empty($listOptions['get_count']['params']) ? array() : $listOptions['get_count']['params']);
-
- $list_context['start'] = isset($_REQUEST[$list_context['start_var_name']]) ? (int) $_REQUEST[$list_context['start_var_name']] : 0;
- $list_context['items_per_page'] = $listOptions['items_per_page'];
-
- if ($list_context['total_num_items'] > $list_context['items_per_page'])
- $list_context['page_index'] = constructPageIndex($listOptions['base_href'] . (empty($list_context['sort']) ? '' : ';' . $request_var_sort . '=' . $list_context['sort']['id'] . ($list_context['sort']['desc'] ? ';' . $request_var_desc : '')) . ($list_context['start_var_name'] != 'start' ? ';' . $list_context['start_var_name'] . '=%1$d' : ''), $list_context['start'], $list_context['total_num_items'], $list_context['items_per_page'], $list_context['start_var_name'] != 'start');
- }
-
- $list_context['headers'] = array();
- foreach ($listOptions['columns'] as $column_id => $column)
- $list_context['headers'][] = array(
- 'id' => $column_id,
- 'label' => isset($column['header']['eval']) ? eval($column['header']['eval']) : (isset($column['header']['value']) ? $column['header']['value'] : ''),
- 'href' => empty($listOptions['default_sort_col']) || empty($column['sort']) ? '' : $listOptions['base_href'] . ';' . $request_var_sort . '=' . $column_id . ($column_id === $list_context['sort']['id'] && !$list_context['sort']['desc'] && isset($column['sort']['reverse']) ? ';' . $request_var_desc : '') . (empty($list_context['start']) ? '' : ';' . $list_context['start_var_name'] . '=' . $list_context['start']),
- 'sort_image' => empty($listOptions['default_sort_col']) || empty($column['sort']) || $column_id !== $list_context['sort']['id'] ? null : ($list_context['sort']['desc'] ? 'down' : 'up'),
- 'class' => isset($column['header']['class']) ? $column['header']['class'] : '',
- 'style' => isset($column['header']['style']) ? $column['header']['style'] : '',
- 'colspan' => isset($column['header']['colspan']) ? $column['header']['colspan'] : '',
- );
-
- $list_context['num_columns'] = count($listOptions['columns']);
- $list_context['width'] = isset($listOptions['width']) ? $listOptions['width'] : '0';
-
- if (isset($listOptions['get_items']['file']))
- require_once($listOptions['get_items']['file']);
-
- $list_items = call_user_func_array($listOptions['get_items']['function'], array_merge(array($list_context['start'], $list_context['items_per_page'], $sort), empty($listOptions['get_items']['params']) ? array() : $listOptions['get_items']['params']));
- $list_items = empty($list_items) ? array() : $list_items;
-
- $list_context['rows'] = array();
- foreach ($list_items as $item_id => $list_item)
- {
- $cur_row = array();
- foreach ($listOptions['columns'] as $column_id => $column)
- {
- $cur_data = array();
-
- if (isset($column['data']['db']))
- $cur_data['value'] = $list_item[$column['data']['db']];
-
- elseif (isset($column['data']['db_htmlsafe']))
- $cur_data['value'] = $smcFunc['htmlspecialchars']($list_item[$column['data']['db_htmlsafe']]);
-
- elseif (isset($column['data']['sprintf']))
- {
- $params = array();
- foreach ($column['data']['sprintf']['params'] as $sprintf_param => $htmlsafe)
- $params[] = $htmlsafe ? $smcFunc['htmlspecialchars']($list_item[$sprintf_param]) : $list_item[$sprintf_param];
- $cur_data['value'] = vsprintf($column['data']['sprintf']['format'], $params);
- }
-
- elseif (isset($column['data']['function']))
- $cur_data['value'] = call_user_func_array($column['data']['function'], array($list_item));
-
- elseif (isset($column['data']['eval']))
- $cur_data['value'] = eval(preg_replace('~%([a-zA-Z0-9\-_]+)%~', '$list_item[\'$1\']', $column['data']['eval']));
-
- elseif (isset($column['data']['value']))
- $cur_data['value'] = $column['data']['value'];
-
- else
- $cur_data['value'] = '';
-
- if (!empty($column['data']['comma_format']))
- $cur_data['value'] = comma_format($cur_data['value']);
- elseif (!empty($column['data']['timeformat']))
- $cur_data['value'] = timeformat($cur_data['value']);
-
- if (isset($column['data']['class']))
- $cur_data['class'] = $column['data']['class'];
-
- if (isset($column['data']['style']))
- $cur_data['style'] = $column['data']['style'];
-
- $cur_row[$column_id] = $cur_data;
- }
- $list_context['rows'][$item_id]['class'] = '';
- $list_context['rows'][$item_id]['style'] = '';
-
- if (isset($listOptions['data_check']))
- {
- if (isset($listOptions['data_check']['class']))
- $list_context['rows'][$item_id]['class'] = ' ' . $listOptions['data_check']['class']($list_item);
- if (isset($listOptions['data_check']['style']))
- $list_context['rows'][$item_id]['style'] = ' style="' . $listOptions['data_check']['style']($list_item) . '"';
- }
-
- $list_context['rows'][$item_id]['data'] = $cur_row;
- }
-
- if (isset($listOptions['title']))
- $list_context['title'] = $listOptions['title'];
-
- if (isset($listOptions['form']))
- {
- $list_context['form'] = $listOptions['form'];
- if (!isset($list_context['form']['hidden_fields']))
- $list_context['form']['hidden_fields'] = array();
-
- $list_context['form']['hidden_fields'][$context['session_var']] = $context['session_id'];
-
- if (isset($listOptions['form']['token']))
- $list_context['form']['hidden_fields'][$context[$listOptions['form']['token'] . '_token_var']] = $context[$listOptions['form']['token'] . '_token'];
-
- if (!empty($list_context['form']['include_start']) && !empty($list_context['start']))
- $list_context['form']['hidden_fields'][$list_context['start_var_name']] = $list_context['start'];
-
- if (!empty($list_context['form']['include_sort']) && !empty($list_context['sort']))
- {
- $list_context['form']['hidden_fields']['sort'] = $list_context['sort']['id'];
- if ($list_context['sort']['desc'])
- $list_context['form']['hidden_fields']['desc'] = 1;
- }
- }
-
- if (isset($listOptions['no_items_label']))
- {
- $list_context['no_items_label'] = $listOptions['no_items_label'];
- $list_context['no_items_align'] = isset($listOptions['no_items_align']) ? $listOptions['no_items_align'] : '';
- }
-
- if (isset($listOptions['additional_rows']))
- {
- $list_context['additional_rows'] = array();
- foreach ($listOptions['additional_rows'] as $row)
- {
- if (empty($row))
- continue;
-
-
- if (!isset($list_context['additional_rows'][$row['position']]))
- $list_context['additional_rows'][$row['position']] = array();
- $list_context['additional_rows'][$row['position']][] = $row;
- }
- }
-
- if (isset($listOptions['javascript']))
- $list_context['javascript'] = $listOptions['javascript'];
-
- if (isset($listOptions['list_menu']))
- $list_context['list_menu'] = $listOptions['list_menu'];
-
- loadTemplate('GenericList');
- }
- ?>
|