function amr_empty_start_list($linessaved, $icols, $cols, $page, $rowsperpage, $totalitems, $caption, $search, $ulist, $c, $filtercol, $sortedbynow, $options = array()) { global $aopt, $amain, $amrusers_fieldfiltering, $amr_current_list, $amr_search_result_count, $ahtm; // the display html structure to use global $amr_refreshed_heading; $amr_current_list = $ulist; $html = $hhtml = $fhtml = ''; $filterhtml = ''; $filterhtml_separate = ''; $apply_filter_html = ''; $filter_submit_html = ''; $summary = ''; $explain_filter = ''; $adminoptions = array('show_search' => true, 'show_perpage' => true, 'show_pagination' => true, 'show_headings' => true, 'show_csv' => true, 'show_refresh' => true); if (!is_admin()) { // set public options to overrwite admin foreach ($adminoptions as $i => $opt) { if (isset($options[$i])) { $adminoptions[$i] = $options[$i]; } else { $adminoptions[$i] = ''; } } } //if (WP_DEBUG) var_dump($adminoptions); if (!empty($_REQUEST['headings']) or !empty($_REQUEST['filtering'])) { $adminoptions['show_search'] = false; $adminoptions['show_csv'] = false; $adminoptions['show_refresh'] = false; $adminoptions['show_perpage'] = false; $adminoptions['show_headings'] = false; $adminoptions['show_pagination'] = true; $amain['filter_html_type'][$amr_current_list] = 'none'; // if editingheadings, then no showingfilter } if (is_admin() or !isset($amain['html_type'][$amr_current_list])) { // must be after the check above, so will force table in admin $ahtm = amr_get_html_to_use('table'); } else { $ahtm = amr_get_html_to_use($amain['html_type'][$amr_current_list]); } if (empty($linessaved)) { $saveditems = 0; } else { $saveditems = count($linessaved); } if (is_array($caption)) { $caption = '<h3 class="caption">' . implode(', ', $caption) . '</h3>'; } // now fix the icols and cols for any special functioning-------------------------- if (isset($icols[0]) and $icols[0] == 'ID') { /* we only saved the ID so that we can access extra info on display - we don't want to always display it */ unset($icols[0]); unset($cols[0]); } $icols = array_unique($icols); // since may end up with two indices, eg if filtering and grouping by same value foreach ($icols as $i => $col) { if ($col == 'index') { // we only saved the index so that we can access extra info on display - we don't want to display it if (!isset($aopt['list'][$amr_current_list]['selected']['index'])) { unset($icols[$i]); unset($cols[$i]); } } else { if (!isset($cols[$i])) { unset($icols[$i]); } } } // end fix icols and cols if (!empty($search)) { $searchselectnow = sprintf(__('%s Users found.', 'amr-users'), $amr_search_result_count); $searchselectnow .= sprintf(__('Searching for "%s" in list', 'amr-users'), $search); } // reset count if searching if (isset($amain['sortable'])) { $sortable = $amain['sortable']; } else { $sortable = false; } if (!empty($adminoptions['show_headings'])) { //admin always has if (is_admin()) { if (!empty($amr_refreshed_heading)) { $summary = $amr_refreshed_heading; } else { $summary = $c->get_cache_summary(amr_rptid($ulist)); } } if (!empty($sortedbynow)) { $summary = str_replace('<li class="sort">', $sortedbynow, $summary); } if (!empty($searchselectnow)) { $summary = str_replace('<li class="selected">', '<li class="searched">' . $searchselectnow . '</li><li class="selected">', $summary); } if (!empty($filtercol)) { $text = implode(', ', $filtercol); $summary = str_replace('<li class="selected">', '<li class="selected">' . __('Selected users with: ', 'amr-users') . $text . '</li><li class="selected">', $summary); } } // //$sortedbynow is set if maually resorted if (!isset($amain['html_type'][$amr_current_list]) or !isset($amain['filter_html_type']) or isset($amain['filter_html_type'][$amr_current_list]) and $amain['filter_html_type'][$amr_current_list] == "intableheader") { if (function_exists('amr_show_filters')) { // for pseudo compatability if unmatched versions $filterhtml = amr_show_filters($cols, $icols, $ulist, $filtercol); // will have tr and th } } elseif (!empty($amain['filter_html_type'][$amr_current_list]) and $amain['filter_html_type'][$amr_current_list] == "above") { if (function_exists('amr_show_filters_alt')) { $filterhtml_separate = amr_show_filters_alt($cols, $icols, $ulist, $filtercol); } } if (!empty($filterhtml) or !empty($filterhtml_separate)) { $apply_filter_html = amr_show_apply_filter_button($ulist); } // footer $fhtml = $ahtm['tfoot'] . $ahtm['tr'] . '>'; if (stristr($ahtm['th'], '<th')) { // if table $fhtml .= $ahtm['th'] . ' colspan="' . count($icols) . '">' . amr_users_give_credit(); } else { $fhtml .= $ahtm['th'] . '>'; } $fhtml .= $ahtm['thc'] . $ahtm['trc'] . $ahtm['tfootc']; /* setup the html for the table headings */ if (!empty($linessaved)) { $html .= amr_display_a_page($linessaved, $icols, $cols, $ahtm); } // if (!empty($adminoptions['show_search'])) { $sformtext = alist_searchform($ulist); } else { $sformtext = ''; } // if (!empty($adminoptions['show_csv'])) { $csvtext = amr_users_get_csv_link($ulist, 'csv'); } else { $csvtext = ''; } // if (!empty($adminoptions['show_refresh'])) { $refreshtext = amr_users_get_refresh_link($ulist); } else { $refreshtext = ''; } // if (!empty($adminoptions['show_perpage'])) { $pformtext = alist_per_pageform($ulist); } else { $pformtext = ''; } if (!empty($amr_search_result_count)) { if ($rowsperpage > $amr_search_result_count) { $rowsperpage = $amr_search_result_count; } //$totalitems = $amr_search_result_count; } if (function_exists('amr_custom_navigation')) { $custom_nav = amr_custom_navigation($ulist); } else { $custom_nav = ''; } $moretext = ''; if (!empty($adminoptions['show_pagination'])) { // allows on to just show latest x $pagetext = amr_pagetext($page, $totalitems, $rowsperpage); } else { $pagetext = ''; } if (!empty($filterhtml) or !empty($hhtml)) { $hhtml = $ahtm['thead'] . $filterhtml . $hhtml . $ahtm['theadc']; } $html = amr_manage_headings_submit() . $filter_submit_html . $sformtext . $explain_filter . $filterhtml_separate . $apply_filter_html . $custom_nav . $pagetext . PHP_EOL . '<div id="userslist' . $ulist . '"><!-- user list-->' . PHP_EOL . $ahtm['table'] . $caption . $hhtml . $fhtml . PHP_EOL . $ahtm['tbody'] . $html . $ahtm['tbodyc'] . '<!-- end user list body-->' . PHP_EOL . $ahtm['tablec'] . '<!-- end user list table-->' . PHP_EOL . PHP_EOL . '</div><!-- end user list-->' . PHP_EOL . '<div class="userlistfooter">' . $pagetext . $csvtext . $refreshtext . $pformtext . '</div>'; if (is_admin()) { $html = PHP_EOL . '<div class="wrap" >' . $html . '</div>' . PHP_EOL; } $html = $summary . $html; return $html; }
function alist_one($type = 'user', $ulist = 1, $options) { //options can be headings, csv, show_search, show_perpage /* Get the fields to use for the chosen list type */ global $aopt, $amain, $amrusers_fieldfiltering, $amr_current_list, $amr_search_result_count; global $amr_refreshed_heading; if (empty($aopt['list'][$ulist])) { printf(__('No such list: %s', 'amr-users'), $ulist); return; } $l = $aopt['list'][$ulist]; /* *get the config */ do_action('amr-add-criteria-to-list', $ulist); // allows one to force criteria into the request field for example (eg: show only logged in user) $transient_suffix = amr_check_use_transient($ulist, $options); if ($transient_suffix) { // no filters, no search, no sort, nothing special happening //if (WP_DEBUG) echo '<br />using transient: '.$transient_suffix.'<br />'; $html = get_transient('amr-users-html-for-list-' . $transient_suffix); if (!empty($html)) { if (current_user_can('administrator')) { echo '<br /><a href="' . add_query_arg('refresh', '1') . '" title="' . __('Note to logged in admin only: Now using temporary saved html (transient) for frontend. Click to refresh.', 'amr-users') . '">!</a>'; } return $html; } } $caption = ''; $sortedbynow = ''; if (empty($amain['list_rows_per_page'][$ulist])) { $amain['list_rows_per_page'][$ulist] = $amain['rows_per_page']; } $rowsperpage = amr_rows_per_page($amain['list_rows_per_page'][$ulist]); // will check request // use $options as our 'request' input so shortcode parameters will work. // allow _REQUEST to override $options /*$request_override_allowed = array( 'filter', 'fieldvaluefilter', 'fieldnamefilter', 'sort'); */ foreach ($_REQUEST as $param => $value) { // we do not know the column names, so jsut transfer all? $options[$param] = $value; } // figure out what we are doing - searching, filtering ------------------------------------------------------- $search = ''; if (!empty($options['su'])) { $search = strip_tags($options['su']); } elseif (isset($_REQUEST['clear_filtering'])) { // we do not need these then unset($_REQUEST['fieldnamefilter']); unset($_REQUEST['fieldvaluefilter']); unset($_REQUEST['filter']); //do we neeed to unset the individual cols? maybe not } $amrusers_fieldfiltering = false; if (!empty($options['filter'])) { //if (WP_DEBUG) {echo '<h1>Filtering</h1>';} foreach (array('fieldnamefilter', 'fieldvaluefilter') as $i => $filtertype) { if (isset($options[$filtertype])) { //if (WP_DEBUG) {echo '<br />doing: '.$filtertype;} foreach ($options[$filtertype] as $i => $col) { if (empty($options[$col])) { //ie showing all unset($options[$filtertype][$i]); unset($options[$col]); } else { $amrusers_fieldfiltering = true; } // set as we are maybe doing realtime filtering flag } } } } $c = new adb_cache(); $rptid = $c->reportid($ulist, $type); if ($amrusers_fieldfiltering) { $lines = amr_build_user_data_maybe_cache($ulist); // since we are filtering, we will run realtime, but not save, else we would lose the normal report if (empty($lines)) { return; } $totalitems = count($lines); //if (WP_DEBUG) echo '<br /> field filtering & $totalitems='.$totalitems; } else { if (!$c->cache_exists($rptid) or isset($options['refresh'])) { if (amr_debug()) { _e('If debug only: Either refresh requested OR no cache exists. A rebuild will be initiated .... ', 'amr-users'); } $success = amr_try_build_cache_now($c, $ulist, $rptid); //$lines = amr_build_user_data_maybe_cache($ulist); $totalitems = $c->get_cache_totallines($rptid); //now need the lines, but first, paging check will tell us how many $amrusers_fieldfiltering = false; // already done if it must be } else { $totalitems = $c->get_cache_totallines($rptid); } } //---------- setup paging variables if ($totalitems < 1) { _e('No lines found.', 'amr-users'); echo amr_users_get_refresh_link($ulist); return; } if ($rowsperpage > $totalitems) { $rowsperpage = $totalitems; } $lastpage = ceil($totalitems / $rowsperpage); if (!empty($_REQUEST['listpage'])) { // if we requested a page MUST use that $page = (int) $_REQUEST['listpage']; } else { // is a random page stipulated ? if (isset($options['show_randompage'])) { // allows a random page $page = rand(1, $lastpage); } else { // else.....start at the very beginning, a very good place to start... $page = 1; } } if ($page > $lastpage) { $page = $lastpage; } if ($page == 1) { $start = 1; } else { $start = 1 + ($page - 1) * $rowsperpage; } $shuffle = false; if (!empty($options['shuffle'])) { $shuffle = true; } $filtercol = array(); //------------------------------------------------------------------------------------------ get the data if (!$amrusers_fieldfiltering) { // because already have lines if were doing field level filtering $headinglines = $c->get_cache_report_lines($rptid, 0, 2); /* get the internal heading names for internal plugin use only */ /* get the user defined heading names */ if (!defined('str_getcsv')) { $icols = amr_str_getcsv($headinglines[0]['csvcontent'], ',', '"', '\\'); } else { $icols = str_getcsv($headinglines[0]['csvcontent'], ',', '"', '\\'); } $icols = array_unique($icols); //since may end up with two indices, eg if filtering and grouping by same value if (!defined('str_getcsv')) { $cols = amr_str_getcsv($headinglines[1]['csvcontent'], '","', '"', '\\'); } else { $cols = str_getcsv($headinglines[1]['csvcontent'], ',', '"', '\\'); } if (isset($options['filter']) or !empty($options['sort']) or !empty($options['su'])) { $lines = amr_get_lines_to_array($c, $rptid, 2, $totalitems + 1, $icols, $shuffle); } else { if (isset($options['start_empty'])) { $lines = array(); $totalitems = 0; } else { $lines = amr_get_lines_to_array($c, $rptid, $start + 1, $rowsperpage, $icols, $shuffle); } } } else { // we are field filtering unset($lines[0]); // the tech lines and the headings line unset($lines[1]); $totalitems = count($lines); // must be here, only reset for field filtering $s = $l['selected']; asort($s); /* get the selected fields in the display order requested */ $cols = amr_build_col_headings($s); $icols = amr_build_cols($s); foreach ($lines as $i => $j) { $lines[$i] = amr_convert_indices($j, $icols); } } //------------------------------------------------------------------------------------------ display time filter check if (isset($options['filter'])) { // then we are filtering //if (amr_debug()) { // var_dump($options['filter']); // echo '<br />Check for filtering at display time <br />'; var_dump($icols); // } foreach ($icols as $cindex => $col) { if (!empty($options[$col])) { if (!(isset($options['fieldnamefilter']) and in_array($col, $options['fieldnamefilter'])) and !(isset($options['fieldvaluefilter']) and in_array($col, $options['fieldvaluefilter']))) { $filtercol[$col] = esc_attr($options[$col]); } } } if (!empty($options['index'])) { $filtercol['index'] = strip_tags($options['index']); } if (false and !$amrusers_fieldfiltering and empty($filtercol) and current_user_can('manage_options')) { //NO LONGER REQUIRED, keep for debug only helpful maybe message nlr or perhaps only if by url? But could be trying own html? and be confused echo '<p>'; _e('This Message shows to admin only!', 'amr-users'); echo '<br />'; _e('Filter requested.', 'amr-users'); _e('Maybe you chose "show all", which is OKAY... or are attempting some own html or link ? .', 'amr-users'); echo '<br />'; _e('No valid filter column given.', 'amr-users'); echo '<br />'; _e('Column filter Usage is :', 'amr-users'); echo '<br /><strong>'; echo '?filter=hide&column_name=value<br />'; echo '?filter=show&column_name=value</br> '; echo '?filter=1&column_name=value'; echo '</strong></br> '; _e('Note: Hide only works if the column is currently being displayed.', 'amr-users'); _e('For this list, expecting column_name to be one of ', 'amr-users'); echo '<br />' . implode('<br />', $icols) . '<br />'; echo '</p>'; } if (!empty($filtercol)) { // for each of the filter columns that are not field filters foreach ($filtercol as $fcol => $value) { //if (amr_debug()) {echo '<hr>Apply filters for field "'.$fcol. '" against... '.$value; } foreach ($lines as $i => $line) { //if (WP_DEBUG) {echo '<br>line='; var_dump($line);} if ($value === '*') { if (empty($line[$fcol])) { unset($lines[$i]); } else { } } elseif ($value === '-') { if (!empty($line[$fcol])) { unset($lines[$i]); } else { } } elseif (empty($line[$fcol])) { unset($lines[$i]); } else { if ($fcol == 'ID') { // id can have filtering - allows link to profile page if (!($line[$fcol] == $value)) { /// amr ?? unset($lines[$i]); } } else { if (!strstr($line[$fcol], $value)) { // fuzzy filtering - hmm why - maybe not??? // is it to avoid situation where value may have spaces before/after ??? unset($lines[$i]); } } } //else if (!($line[$fcol] == $value)) { strisstr will catch these ? //} if ($options['filter'] == 'hide') { unset($lines[$i][$fcol]); } } // if hiding, delete that column if ($options['filter'] == 'hide') { foreach ($icols as $cindex => $col) { if ($fcol == $col) { unset($icols[$cindex]); unset($cols[$cindex]); } } } // end delete col //if (WP_DEBUG) echo '<br />Lines left '.count($lines); } //----------------------------------------------------------------------------- $amr_search_result_count = count($lines); $totalitems = $amr_search_result_count; // slice the right section of the returned values based on rowsperpage and currentpage // update the paging variables if ($amr_search_result_count > 0 and $rowsperpage > $amr_search_result_count) { $rowsperpage = $amr_search_result_count; } $lastpage = ceil($amr_search_result_count / $rowsperpage); if ($page > $lastpage) { $page = $lastpage; } if ($page == 1) { $start = 1; } else { $start = 1 + ($page - 1) * $rowsperpage; } } //echo '<br />count lines = '.$amr_search_result_count. ' '.$start. ' '. $rowsperpage; $lines = array_slice($lines, $start - 1, $rowsperpage, true); } //end if //------------------------------------------------------------------------------------------ check for sort or search if (!empty($options['sort']) or !empty($search)) { /* then we want to sort, so have to fetch ALL the lines first and THEN sort. Keep page number in case workingthrough the list ! */ // if searching also want all the lines first so can search within and do pagination correctly if ($lines) { $linesunsorted = amr_check_for_sort_request($lines); $linesunsorted = array_values($linesunsorted); /* reindex as our indexing is stuffed and splice will not work properly */ //if (!empty($search)) $totalitems = count($linesunsorted); //save total here before splice $lines = array_splice($linesunsorted, $start - 1, $rowsperpage); unset($linesunsorted); // free up memory? /* now fix the cache headings*/ $sortedbynow = ''; if (!empty($options['sort'])) { foreach ($icols as $i => $t) { if ($t == $options['sort']) { $sortedbynow = strip_tags($cols[$i]); } } $sortedbynow = '<li><em>' . __('Sorted by:', 'amr-users') . '</em>' . $sortedbynow . '</li><li class="sort">'; } } } //------------------------------------------------------------------------------------------------------------------finished filtering and sorting //var_dump($lines); $html = amr_display_final_list($lines, $icols, $cols, $page, $rowsperpage, $totalitems, $caption, $search, $ulist, $c, $filtercol, $sortedbynow, $options); if ($transient_suffix) { // ie no filters, no search, no sort, nothing special happening $expiration = empty($amain['transient_expiration']) ? 60 : $amain['transient_expiration']; //allow setting later set_transient('amr-users-html-for-list-' . $transient_suffix, $html, $expiration); track_progress('Transient set for html for list ' . $transient_suffix); } return $html; }