";
$abj404view->echoPostBox("abj404-exportRedirects", __('Export', '404-solution'), $html);
// ------------------------------------
$url = "?page=" . ABJ404_PP . "&subpage=abj404_tools";
$link = wp_nonce_url($url, "abj404_purgeRedirects");
// read the html content.
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/toolsPurgeForm.html");
// do special replacements
$html = $f->str_replace('{toolsPurgeFormActionLink}', $link, $html);
// constants and translations.
$html = $f->doNormalReplacements($html);
echo "
";
// ------------------------------------
$link = wp_nonce_url("?page=" . ABJ404_PP . "&subpage=abj404_tools", "abj404_runMaintenance");
$link .= '&manually_fired=true';
// read the html content.
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/toolsEtcForm.html");
// do special replacements
$html = $f->str_replace('{toolsMaintenanceFormActionLink}', $link, $html);
// constants and translations.
$html = $f->doNormalReplacements($html);
echo "
";
}
function echoAdminOptionsPage() {
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
global $abj404view;
global $abj404viewSuggestions;
$f = ABJ_404_Solution_Functions::getInstance();
$options = $abj404logic->getOptions();
// if the current URL does not match the chosen menuLocation then redirect to the correct URL
$urlParts = parse_url(urldecode($_SERVER['REQUEST_URI']));
$currentURL = $urlParts['path'];
if (array_key_exists('menuLocation', $options) && isset($options['menuLocation']) &&
$options['menuLocation'] == 'settingsLevel') {
if ($f->strpos($currentURL, 'options-general.php') != false) {
// the option changed and we're at the wrong URL now, so we redirect to the correct one.
$abj404logic->forceRedirect(admin_url() . "admin.php?page=" .
ABJ404_PP . '&subpage=abj404_options');
}
} else if ($f->strpos($currentURL, 'admin.php') != false) {
// if the current URL has admin.php then the URLs don't match and we need to reload.
$abj404logic->forceRedirect(admin_url() . "options-general.php?page=" .
ABJ404_PP . '&subpage=abj404_options');
}
//General Options
echo "
";
}
/**
* @global type $abj404dao
* @global type $abj404logic
*/
function echoAdminEditRedirectPage() {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$abj404logging = ABJ_404_Solution_Logging::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$options = $abj404logic->getOptions();
// this line assures that text will appear below the page tabs at the top.
echo "
";
echo "
" . __('Redirect Details', '404-solution') . " ";
$link = wp_nonce_url("?page=" . ABJ404_PP . "&subpage=abj404_edit", "abj404editRedirect");
echo '
";
}
function echoRedirectDestinationOptionsOthers($dest, $rows) {
$content = array();
$rowCounter = 0;
$currentPostType = '';
foreach ($rows as $row) {
$rowCounter++;
$id = $row->id;
$theTitle = get_the_title($id);
$thisval = $id . "|" . ABJ404_TYPE_POST;
$selected = "";
if ($thisval == $dest) {
$selected = " selected";
}
$_REQUEST[ABJ404_PP]['debug_info'] = 'Before row: ' . $rowCounter . ', Title: ' . $theTitle .
', Post type: ' . $row->post_type;
if ($row->post_type != $currentPostType) {
if ($currentPostType != '') {
$content[] = "\n" . '' . "\n";
}
$content[] = "\n" . '
' . "\n";
$currentPostType = $row->post_type;
}
// this is split in this ridiculous way to help me figure out how to resolve a memory issue.
// (https://wordpress.org/support/topic/options-tab-is-not-loading/)
$content[] = "\n ";
// insert some spaces for child pages.
for ($i = 0; $i < $row->depth; $i++) {
$content[] = " ";
}
$content[] = __(ucwords($row->post_type), '404-solution');
$content[] = ": ";
$content[] = esc_html($theTitle);
$content[] = " ";
$_REQUEST[ABJ404_PP]['debug_info'] = 'After row: ' . $rowCounter . ', Title: ' . $theTitle .
', Post type: ' . $row->post_type;
}
$content[] = "\n" . ' ' . "\n";
$_REQUEST[ABJ404_PP]['debug_info'] = 'Cleared after building redirect destination page list.';
return implode('', $content);
}
function echoRedirectDestinationOptionsCatsTags($dest) {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$content = "";
$content .= "\n" . '
' . "\n";
$customTagsEtc = array();
// categories ---------------------------------------------
$cats = $abj404dao->getPublishedCategories();
foreach ($cats as $cat) {
$taxonomy = $cat->taxonomy;
if ($taxonomy != 'category') {
continue;
}
$id = $cat->term_id;
$theTitle = $cat->name;
$thisval = $id . "|" . ABJ404_TYPE_CAT;
$selected = "";
if ($thisval == $dest) {
$selected = " selected";
}
$content .= "\n" . __('Category', '404-solution') . ": " . $theTitle . " ";
}
$content .= "\n" . ' ' . "\n";
$customTagsEtc = $abj404logic->getMapOfCustomCategories($cats);
// tags ---------------------------------------------
$content .= "\n" . '
' . "\n";
$tags = $abj404dao->getPublishedTags();
foreach ($tags as $tag) {
$id = $tag->term_id;
$theTitle = $tag->name;
$thisval = $id . "|" . ABJ404_TYPE_TAG;
$selected = "";
if ($thisval == $dest) {
$selected = " selected";
}
$content .= "\n" . __('Tag', '404-solution') . ": " . $theTitle . " ";
}
$content .= "\n" . ' ' . "\n";
// custom ---------------------------------------------
foreach ($customTagsEtc as $taxonomy => $catRow) {
$content .= "\n" . '
' . "\n";
foreach ($catRow as $cat) {
$id = $cat->term_id;
$theTitle = $cat->name;
$thisval = $id . "|" . ABJ404_TYPE_CAT;
$selected = "";
if ($thisval == $dest) {
$selected = " selected";
}
$content .= "\n" . __('Custom', '404-solution') . ": " . $theTitle . " ";
}
$content .= "\n" . ' ' . "\n";
}
return $content;
}
/**
* @global type $abj404dao
*/
function echoAdminCapturedURLsPage() {
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$sub = 'abj404_captured';
$f = ABJ_404_Solution_Functions::getInstance();
$tableOptions = $abj404logic->getTableOptions($sub);
$timezone = get_option('timezone_string');
if ('' == $timezone) {
$timezone = 'UTC';
}
date_default_timezone_set($timezone);
echo $this->getTabFilters($sub, $tableOptions);
echo "
";
echo $this->getPaginationLinks($sub);
// bulk operations dropdown -------------
$bulkOptions = array();
if ($tableOptions['filter'] != ABJ404_STATUS_CAPTURED) {
$bulkOptions[] = '{Mark as Captured} ';
}
if ($tableOptions['filter'] != ABJ404_STATUS_IGNORED) {
$bulkOptions[] = '{Mark as Ignored} ';
}
if ($tableOptions['filter'] != ABJ404_STATUS_LATER) {
$bulkOptions[] = '{Organize Later} ';
}
if ($tableOptions['filter'] != ABJ404_TRASH_FILTER) {
$bulkOptions[] = '{Move to Trash} ';
}
$bulkOptions[] = '{Create a Redirect} ';
$allBulkOptions = implode("\n", $bulkOptions);
$url = $this->getBulkOperationsFormURL($sub, $tableOptions);
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/bulkOperationsDropdown.html");
$html = $f->str_replace('{action_url}', $url, $html);
$html = $f->str_replace('{bulkOptions}', $allBulkOptions, $html);
$html = $f->doNormalReplacements($html);
echo $html;
// empty trash button -------------
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$eturl = "?page=" . ABJ404_PP . "&subpage=abj404_captured&filter=" . ABJ404_TRASH_FILTER .
"&subpage=abj404_captured";
$eturl = wp_nonce_url($eturl, 'abj404_bulkProcess');
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/emptyTrashButton.html");
$html = $f->str_replace('{action_url}', $eturl, $html);
$html = $f->str_replace('{action_value}', 'emptyCapturedTrash', $html);
$html = $f->doNormalReplacements($html);
echo $html;
}
// ----------
echo "
";
echo $this->getCapturedURLSPageTable($sub);
echo "
";
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/bulkOperationsDropdown2.html");
$html = $f->str_replace('{action_url}', $url, $html);
$html = $f->str_replace('{bulkOptions}', $allBulkOptions, $html);
$html = $f->doNormalReplacements($html);
echo $html;
echo $this->getPaginationLinks($sub, false);
echo "
";
}
function getCapturedURLSPageTable($sub) {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$tableOptions = $abj404logic->getTableOptions($sub);
// ----------------------------------------------
// these are used for a GET request so they're not translated.
$columns = array();
$columns['url']['title'] = __('URL', '404-solution');
$columns['url']['orderby'] = "url";
$columns['url']['width'] = "48%";
$columns['hits']['title'] = __('Hits', '404-solution');
$columns['hits']['orderby'] = "logshits";
$columns['hits']['width'] = "7%";
$columns['hits']['title_attr'] = __('Changes may not be updated immediately when ordering by this column', '404-solution');
$columns['timestamp']['title'] = __('Created', '404-solution');
$columns['timestamp']['orderby'] = "timestamp";
$columns['timestamp']['width'] = "20%";
$columns['last_used']['title'] = __('Last Used', '404-solution');
$columns['last_used']['orderby'] = "last_used";
$columns['last_used']['width'] = "20%";
$columns['last_used']['title_attr'] = __('Changes may not be updated immediately when ordering by this column', '404-solution');
$html = "
";
$html .= "";
$html .= $this->getTableColumns($sub, $columns);
$html .= " ";
$html .= "";
$html .= $this->getTableColumns($sub, $columns);
$html .= " ";
$html .= "";
$rows = $abj404dao->getRedirectsForView($sub, $tableOptions);
$displayed = 0;
$y = 1;
foreach ($rows as $row) {
$displayed++;
$hits = $row['logshits'];
$last_used = $row['last_used'];
if ($last_used != 0) {
$last = date("Y/m/d h:i:s A", abs(intval($last_used)));
} else {
$last = __('Never Used', '404-solution');
}
$editlink = "?page=" . ABJ404_PP . "&subpage=abj404_edit&id=" . $row['id'];
$logslink = "?page=" . ABJ404_PP . "&subpage=abj404_logs&id=" . $row['logsid'];
$trashlink = "?page=" . ABJ404_PP . "&&subpage=abj404_captured&id=" . $row['id'] .
"&subpage=" . $sub;
$ajaxTrashLink = "admin-ajax.php?action=trashLink" . "&id=" . absint($row['id']) .
"&subpage=" . $sub;
$ignorelink = "?page=" . ABJ404_PP . "&&subpage=abj404_captured&id=" . $row['id'] .
"&subpage=" . $sub;
$laterlink = "?page=" . ABJ404_PP . "&&subpage=abj404_captured&id=" . $row['id'] .
"&subpage=" . $sub;
$deletelink = "?page=" . ABJ404_PP . "&subpage=abj404_captured&remove=1&id=" . $row['id'] .
"&subpage=" . $sub;
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$trashlink .= "&trash=0";
$ajaxTrashLink .= "&trash=0";
$trashtitle = __('Restore', '404-solution');
} else {
$trashlink .= "&trash=1";
$ajaxTrashLink .= "&trash=1";
$trashtitle = __('Trash', '404-solution');
}
$ignoretitle = "";
if ($tableOptions['filter'] == ABJ404_STATUS_IGNORED) {
$ignorelink .= "&ignore=0";
$ignoretitle = __('Remove Ignore Status', '404-solution');
} else if ($tableOptions['filter'] == ABJ404_STATUS_CAPTURED || $tableOptions['filter'] == ABJ404_STATUS_LATER) {
$ignorelink .= "&ignore=1";
$ignoretitle = __('Ignore 404 Error', '404-solution');
}
$latertitle = '?Organize Later?';
if ($tableOptions['filter'] == ABJ404_STATUS_LATER) {
$laterlink .= "&later=0";
$latertitle = __('Remove Later Status', '404-solution');
} else if ($tableOptions['filter'] == ABJ404_STATUS_CAPTURED || $tableOptions['filter'] == ABJ404_STATUS_IGNORED) {
$laterlink .= "&later=1";
$latertitle = __('Organize Later', '404-solution');
}
if (!( $tableOptions['orderby'] == "url" && $tableOptions['order'] == "ASC" )) {
$trashlink .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
$ignorelink .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
$deletelink .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
}
if ($tableOptions['filter'] != 0) {
$trashlink .= "&filter=" . $tableOptions['filter'];
$ignorelink .= "&filter=" . $tableOptions['filter'];
$deletelink .= "&filter=" . $tableOptions['filter'];
$laterlink .= "&filter=" . $tableOptions['filter'];
}
$trashlink = wp_nonce_url($trashlink, "abj404_trashRedirect");
$ajaxTrashLink = wp_nonce_url($ajaxTrashLink, "abj404_ajaxTrash");
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$deletelink = wp_nonce_url($deletelink, "abj404_removeRedirect");
}
$ignorelink = wp_nonce_url($ignorelink, "abj404_ignore404");
$laterlink = wp_nonce_url($laterlink, "abj404_organizeLater");
$class = "";
if ($y == 0) {
$class = "alternate";
$y++;
} else {
$y = 0;
$class = "normal-non-alternate";
}
// ------------------------
$rowActions = array();
if ($tableOptions['filter'] != ABJ404_TRASH_FILTER) {
$rowActions[] = '{Edit} ';
}
$rowActions[] = '{trashtitle} ';
if ($row['logsid'] > 0) {
$rowActions[] = '{View Logs} ';
} else {
$rowActions[] = '{(No logs)} ';
}
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$rowActions[] = '{Delete Permanently} ';
} else {
$rowActions[] = '{ignoreTitle} ';
$rowActions[] = '{laterTitle} ';
}
$allRowActions = implode("\n | ", $rowActions);
$tempHtml = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/tableRowCapturedURLs.html");
$tempHtml = $f->str_replace('{rowActions}', $allRowActions, $tempHtml);
$tempHtml = $f->str_replace('{rowid}', $row['id'], $tempHtml);
$tempHtml = $f->str_replace('{rowClass}', $class, $tempHtml);
$tempHtml = $f->str_replace('{editLink}', $editlink, $tempHtml);
$tempHtml = $f->str_replace('{logsLink}', $logslink, $tempHtml);
$tempHtml = $f->str_replace('{trashLink}', $trashlink, $tempHtml);
$tempHtml = $f->str_replace('{ajaxTrashLink}', $ajaxTrashLink, $tempHtml);
$tempHtml = $f->str_replace('{trashtitle}', $trashtitle, $tempHtml);
$tempHtml = $f->str_replace('{ignoreLink}', $ignorelink, $tempHtml);
$tempHtml = $f->str_replace('{ignoreTitle}', $ignoretitle, $tempHtml);
$tempHtml = $f->str_replace('{laterLink}', $laterlink, $tempHtml);
$tempHtml = $f->str_replace('{laterTitle}', $latertitle, $tempHtml);
$tempHtml = $f->str_replace('{deleteLink}', $deletelink, $tempHtml);
$tempHtml = $f->str_replace('{url}', esc_html($row['url']), $tempHtml);
$tempHtml = $f->str_replace('{hits}', esc_html($hits), $tempHtml);
$tempHtml = $f->str_replace('{created_date}',
esc_html(date("Y/m/d h:i:s A", abs(intval($row['timestamp'])))), $tempHtml);
$tempHtml = $f->str_replace('{last_used_date}', esc_html($last), $tempHtml);
$tempHtml = $f->doNormalReplacements($tempHtml);
$html .= $tempHtml;
}
if ($displayed == 0) {
$html .= "";
$html .= " ";
$html .= "" . __('No Captured 404 Records To Display', '404-solution') . " ";
$html .= " ";
$html .= " ";
}
$html .= " ";
$html .= "
";
return $html;
}
/**
* @global type $abj404dao
* @global type $abj404logic
*/
function echoAdminRedirectsPage() {
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$sub = 'abj404_redirects';
$tableOptions = $abj404logic->getTableOptions($sub);
// Sanitizing unchecked table options
$tableOptions = $abj404logic->sanitizePostData($tableOptions);
echo $this->getTabFilters($sub, $tableOptions);
$timezone = get_option('timezone_string');
if ('' == $timezone) {
$timezone = 'UTC';
}
date_default_timezone_set($timezone);
echo "
";
if ($tableOptions['filter'] != ABJ404_TRASH_FILTER) {
$htmlTop = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/paginationLinksTop.html");
echo $f->doNormalReplacements($htmlTop);
}
echo $this->getPaginationLinks($sub);
// bulk operations dropdown -------------
$bulkOptions = array();
if ($tableOptions['filter'] != ABJ404_STATUS_AUTO) {
$bulkOptions[] = '
{Edit Redirects} ';
}
if ($tableOptions['filter'] != ABJ404_TRASH_FILTER) {
$bulkOptions[] = '
{Move to Trash} ';
}
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$bulkOptions[] = '
{Restore Redirects} ';
$bulkOptions[] = '
{Delete Permanently} ';
}
$allBulkOptions = implode("\n", $bulkOptions);
$url = $this->getBulkOperationsFormURL($sub, $tableOptions);
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/bulkOperationsDropdown.html");
$html = $f->str_replace('{action_url}', $url, $html);
$html = $f->str_replace('{bulkOptions}', $allBulkOptions, $html);
$html = $f->doNormalReplacements($html);
echo $html;
// ------------------ empty trash button
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
echo "
";
$eturl = "?page=" . ABJ404_PP . "&filter=" . ABJ404_TRASH_FILTER . "&subpage=" . $sub;
$eturl = wp_nonce_url($eturl, "abj404_bulkProcess");
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/emptyTrashButton.html");
$html = $f->str_replace('{action_url}', $eturl, $html);
$html = $f->str_replace('{action_value}', 'emptyRedirectTrash', $html);
$html = $f->doNormalReplacements($html);
echo $html;
echo "
";
}
echo "
";
echo $this->getAdminRedirectsPageTable($sub);
echo "
";
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/bulkOperationsDropdown2.html");
$html = $f->str_replace('{action_url}', $url, $html);
$html = $f->str_replace('{bulkOptions}', $allBulkOptions, $html);
$html = $f->doNormalReplacements($html);
echo $html;
echo $this->getPaginationLinks($sub, false);
echo "
";
// don't show the "add manual redirect" form on the trash page.
if ($tableOptions['filter'] != ABJ404_TRASH_FILTER) {
$this->echoAddManualRedirect($tableOptions);
}
}
function getBulkOperationsFormURL($sub, $tableOptions) {
$url = "?page=" . ABJ404_PP . "&subpage=" . $sub;
if ($tableOptions['filter'] != 0) {
$url .= "&filter=" . $tableOptions['filter'];
}
if (!( $tableOptions['orderby'] == "url" && $tableOptions['order'] == "ASC" )) {
$url .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
}
$url = wp_nonce_url($url, 'abj404_bulkProcess');
return $url;
}
function getAdminRedirectsPageTable($sub) {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$abj404logging = ABJ_404_Solution_Logging::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$tableOptions = $abj404logic->getTableOptions($sub);
// these are used for a GET request so they're not translated.
$columns = array();
$columns['url']['title'] = __('URL', '404-solution');
$columns['url']['orderby'] = "url";
$columns['url']['width'] = "25%";
$columns['status']['title'] = __('Status', '404-solution');
$columns['status']['orderby'] = "status";
$columns['status']['width'] = "5%";
$columns['type']['title'] = __('Type', '404-solution');
$columns['type']['orderby'] = "type";
$columns['type']['width'] = "10%";
$columns['dest']['title'] = __('Destination', '404-solution');;
$columns['dest']['orderby'] = "final_dest";
$columns['dest']['width'] = "22%";
$columns['code']['title'] = __('Redirect', '404-solution');
$columns['code']['orderby'] = "code";
$columns['code']['width'] = "5%";
$columns['hits']['title'] = __('Hits', '404-solution');
$columns['hits']['orderby'] = "logshits";
$columns['hits']['width'] = "7%";
$columns['hits']['title_attr'] = __('Changes may not be updated immediately when ordering by this column', '404-solution');
$columns['timestamp']['title'] = __('Created', '404-solution');;
$columns['timestamp']['orderby'] = "timestamp";
$columns['timestamp']['width'] = "10%";
$columns['last_used']['title'] = __('Last Used', '404-solution');;
$columns['last_used']['orderby'] = "last_used";
$columns['last_used']['width'] = "10%";
$columns['last_used']['title_attr'] = __('Changes may not be updated immediately when ordering by this column', '404-solution');
$html = "
";
$html .= $this->getTableColumns($sub, $columns);
$html .= " ";
$html .= $this->getTableColumns($sub, $columns);
$html .= " ";
$rows = $abj404dao->getRedirectsForView($sub, $tableOptions);
$displayed = 0;
$y = 1;
foreach ($rows as $row) {
$displayed++;
$statusTitle = '';
if ($row['status'] == ABJ404_STATUS_MANUAL) {
$statusTitle = __('Manually created', '404-solution');
} else if ($row['status'] == ABJ404_STATUS_AUTO) {
$statusTitle = __('Automatically created', '404-solution');
} else if ($row['status'] == ABJ404_STATUS_REGEX) {
$statusTitle = __('Regular Expression (Manually Created)', '404-solution');
} else {
$statusTitle = __('Unknown', '404-solution');
}
$link = "";
$title = __('Visit', '404-solution') . " ";
if ($row['type'] == ABJ404_TYPE_EXTERNAL) {
$link = $row['final_dest'];
$title .= $row['final_dest'];
} else if ($row['type'] == ABJ404_TYPE_CAT) {
$permalink = ABJ_404_Solution_Functions::permalinkInfoToArray($row['final_dest'] . "|" . ABJ404_TYPE_CAT, 0);
$link = $permalink['link'];
$title .= __('Category:', '404-solution') . " " . $permalink['title'];
} else if ($row['type'] == ABJ404_TYPE_TAG) {
$permalink = ABJ_404_Solution_Functions::permalinkInfoToArray($row['final_dest'] . "|" . ABJ404_TYPE_TAG, 0);
$link = $permalink['link'];
$title .= __('Tag:', '404-solution') . " " . $permalink['title'];
} else if ($row['type'] == ABJ404_TYPE_HOME) {
$permalink = ABJ_404_Solution_Functions::permalinkInfoToArray($row['final_dest'] . "|" . ABJ404_TYPE_HOME, 0);
$link = $permalink['link'];
$title .= __('Home Page:', '404-solution') . " " . $permalink['title'];
} else if ($row['type'] == ABJ404_TYPE_POST) {
$permalink = ABJ_404_Solution_Functions::permalinkInfoToArray($row['final_dest'] . "|" . ABJ404_TYPE_POST, 0);
$link = $permalink['link'];
$title .= $permalink['title'];
} else {
$abj404logging->errorMessage("Unexpected row type while displaying table: " . $row['type']);
}
$hits = $row['logshits'];
$last_used = $row['last_used'];
if ($last_used != 0) {
$last = date("Y/m/d h:i:s A", abs(intval($last_used)));
} else {
$last = __('Never Used', '404-solution');
}
$editlink = "?page=" . ABJ404_PP . "&subpage=abj404_edit&id=" . absint($row['id']);
$logslink = "?page=" . ABJ404_PP . "&subpage=abj404_logs&id=" . absint($row['logsid']);
$trashlink = "?page=" . ABJ404_PP . "&id=" . absint($row['id']) .
"&subpage=" . $sub;
$ajaxTrashLink = "admin-ajax.php?action=trashLink" . "&id=" . absint($row['id']) .
"&subpage=" . $sub;
$deletelink = "?page=" . ABJ404_PP . "&remove=1&id=" . absint($row['id']) .
"&subpage=" . $sub;
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$trashlink .= "&trash=0";
$ajaxTrashLink .= "&trash=0";
$trashtitle = __('Restore', '404-solution');
} else {
$trashlink .= "&trash=1";
$ajaxTrashLink .= "&trash=1";
$trashtitle = __('Trash', '404-solution');
}
if (!( $tableOptions['orderby'] == "url" && $tableOptions['order'] == "ASC" )) {
$trashlink .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
$deletelink .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
}
if ($tableOptions['filter'] != 0) {
$trashlink .= "&filter=" . $tableOptions['filter'];
$deletelink .= "&filter=" . $tableOptions['filter'];
}
$trashaction = "abj404_trashRedirect";
$trashlink = wp_nonce_url($trashlink, $trashaction);
$ajaxTrashLink = wp_nonce_url($ajaxTrashLink, "abj404_ajaxTrash");
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$deleteaction = "abj404_removeRedirect";
$deletelink = wp_nonce_url($deletelink, $deleteaction);
}
$class = "";
if ($y == 0) {
$class = "alternate";
$y++;
} else {
$y = 0;
$class = "normal-non-alternate";
}
// -------------------------------------------
if ($tableOptions['filter'] != ABJ404_TRASH_FILTER) {
$editlinkHTML = '{Edit} | ';
} else {
$editlinkHTML = '';
}
if ($row['logsid'] > 0) {
$logslinkHTML = '{View Logs} ';
} else {
$logslinkHTML = '{(No logs)} ';
}
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$deletePermanentlyHTML = '| {Delete Permanently} ';
} else {
$deletePermanentlyHTML = '';
}
$htmlTemp = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/tableRowPageRedirects.html");
$htmlTemp = $f->str_replace('{rowid}', $row['id'], $htmlTemp);
$htmlTemp = $f->str_replace('{rowClass}', $class, $htmlTemp);
$htmlTemp = $f->str_replace('{editLink}', $row['url'], $htmlTemp);
$htmlTemp = $f->str_replace('{rowURL}', esc_html($row['url']), $htmlTemp);
$htmlTemp = $f->str_replace('{editlinkHTML}', $editlinkHTML, $htmlTemp);
$htmlTemp = $f->str_replace('{logslinkHTML}', $logslinkHTML, $htmlTemp);
$htmlTemp = $f->str_replace('{deletePermanentlyHTML}', $deletePermanentlyHTML, $htmlTemp);
$htmlTemp = $f->str_replace('{link}', $link, $htmlTemp);
$htmlTemp = $f->str_replace('{title}', $title, $htmlTemp);
$htmlTemp = $f->str_replace('{dest}', $row['dest_for_view'], $htmlTemp);
$htmlTemp = $f->str_replace('{status}', $row['status_for_view'], $htmlTemp);
$htmlTemp = $f->str_replace('{statusTitle}', $statusTitle, $htmlTemp);
$htmlTemp = $f->str_replace('{type}', $row['type_for_view'], $htmlTemp);
$htmlTemp = $f->str_replace('{rowCode}', $row['code'], $htmlTemp);
$htmlTemp = $f->str_replace('{hits}', $hits, $htmlTemp);
$htmlTemp = $f->str_replace('{logsLink}', $logslink, $htmlTemp);
$htmlTemp = $f->str_replace('{trashLink}', $trashlink, $htmlTemp);
$htmlTemp = $f->str_replace('{ajaxTrashLink}', $ajaxTrashLink, $htmlTemp);
$htmlTemp = $f->str_replace('{trashtitle}', $trashtitle, $htmlTemp);
$htmlTemp = $f->str_replace('{deletelink}', $deletelink, $htmlTemp);
$htmlTemp = $f->str_replace('{hits}', esc_html($hits), $htmlTemp);
$htmlTemp = $f->str_replace('{created_date}',
esc_html(date("Y/m/d h:i:s A", abs(intval($row['timestamp'])))), $htmlTemp);
$htmlTemp = $f->str_replace('{last_used_date}', esc_html($last), $htmlTemp);
$htmlTemp = $f->doNormalReplacements($htmlTemp);
$html .= $htmlTemp;
}
if ($displayed == 0) {
$html .= "\n" .
" " .
"" .
__('No Redirect Records To Display', '404-solution') . " " .
" " .
" ";
}
$html .= "
";
return $html;
}
function echoAddManualRedirect($tableOptions) {
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$options = $abj404logic->getOptions();
$url = "?page=" . ABJ404_PP;
if (!( $tableOptions['orderby'] == "url" && $tableOptions['order'] == "ASC" )) {
$url .= "&orderby=" . $tableOptions['orderby'] . "&order=" . $tableOptions['order'];
}
if ($tableOptions['filter'] != 0) {
$url .= "&filter=" . $tableOptions['filter'];
}
$link = wp_nonce_url($url, "abj404addRedirect");
$urlPlaceholder = parse_url(get_home_url(), PHP_URL_PATH) . "/example";
if (array_key_exists('url', $_POST) && isset($_POST['url']) && $_POST['url'] != '') {
$postedURL = esc_url($_POST['url']);
} else {
$postedURL = $urlPlaceholder;
}
$selected301 = "";
$selected302 = "";
if ($options['default_redirect'] == '301') {
$selected301 = " selected ";
} else {
$selected302 = " selected ";
}
// read the html content.
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/addManualRedirectTop.html");
$html .= ABJ_404_Solution_Functions::readFileContents(__DIR__ .
"/html/addManualRedirectPageSearchDropdown.html");
$html = $f->str_replace('{redirect_to_label}', __('Redirect to', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_EMPTY}',
__('(Type a page name or an external URL)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_PAGE}',
__('(A page has been selected.)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_CUSTOM_STRING}',
__('(A custom string has been entered.)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_URL}',
__('(An external URL will be used.)', '404-solution'), $html);
$html = $f->str_replace('{REDIRECT_TO_USER_FIELD_WARNING}', '', $html);
$html = $f->str_replace('{redirectPageTitle}', '', $html);
$html = $f->str_replace('{pageIDAndType}', '', $html);
$html = $f->str_replace('{redirectPageTitle}', '', $html);
$html = $f->str_replace('{data-url}',
"admin-ajax.php?action=echoRedirectToPages&includeDefault404Page=false", $html);
$html .= ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/addManualRedirectBottom.html");
$html = $f->str_replace('{addManualRedirectAction}', $link, $html);
$html = $f->str_replace('{urlPlaceholder}', $urlPlaceholder, $html);
$html = $f->str_replace('{postedURL}', $postedURL, $html);
$html = $f->str_replace('{301selected}', $selected301, $html);
$html = $f->str_replace('{302selected}', $selected302, $html);
// constants and translations.
$html = $f->doNormalReplacements($html);
echo $html;
}
/** This is used both to add and to edit a redirect.
* @param string $destination
* @param string $codeselected
* @param string $label
*/
function echoEditRedirect($destination, $codeselected, $label) {
echo "\r\n
" . __('Redirect Type', '404-solution') .
": ";
$codes = array(301, 302);
foreach ($codes as $code) {
$selected = "";
if ($code == $codeselected) {
$selected = " selected";
}
$title = ($code == 301) ? '301 Permanent Redirect' : '302 Temporary Redirect';
echo "" . esc_html($title) . " ";
}
echo " ";
echo "
";
}
function echoRedirectDestinationOptionsDefaults($currentlySelected) {
$content = "";
$content .= "\n" . '
' . "\n";
$selected = "";
if ($currentlySelected == ABJ404_TYPE_EXTERNAL) {
$selected = " selected";
}
$content .= "\n" .
__('External Page', '404-solution') . " ";
if ($currentlySelected == ABJ404_TYPE_HOME) {
$selected = " selected";
} else {
$selected = "";
}
$content .= "\n" .
__('Home Page', '404-solution') . " ";
$content .= "\n" . ' ' . "\n";
return $content;
}
/**
* @global type $abj404dao
* @global type $wpdb
* @param array $options
* @return string
*/
function getAdminOptionsPageAutoRedirects($options) {
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$spaces = esc_html(" ");
$content = "";
$userSelectedDefault404Page = (array_key_exists('dest404page', $options) &&
isset($options['dest404page']) ? $options['dest404page'] : null);
$urlDestination = (array_key_exists('dest404pageURL', $options) &&
isset($options['dest404pageURL']) ? $options['dest404pageURL'] : null);
$pageMissingWarning = "";
if ($userSelectedDefault404Page != null) {
$permalink =
ABJ_404_Solution_Functions::permalinkInfoToArray($userSelectedDefault404Page, 0);
if ($permalink['status'] == 'trash') {
$pageMissingWarning = __("(The specified page doesn't exist. " .
"Please update this setting.)", '404-solution');
}
}
$pageTitle = $abj404logic->getPageTitleFromIDAndType($userSelectedDefault404Page, $urlDestination);
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ .
"/html/addManualRedirectPageSearchDropdown.html");
$html = $f->str_replace('{redirect_to_label}', __('Redirect all unhandled 404s to', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_EMPTY}',
__('(Type a page name or an external URL)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_PAGE}',
__('(A page has been selected.)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_CUSTOM_STRING}',
__('(A custom string has been entered.)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_URL}',
__('(An external URL will be used.)', '404-solution'), $html);
$html = $f->str_replace('{REDIRECT_TO_USER_FIELD_WARNING}', $pageMissingWarning, $html);
$html = $f->str_replace('{redirectPageTitle}', $pageTitle, $html);
$html = $f->str_replace('{pageIDAndType}', $userSelectedDefault404Page, $html);
$html = $f->str_replace('{redirectPageTitle}', $pageTitle, $html);
$html = $f->str_replace('{data-url}',
"admin-ajax.php?action=echoRedirectToPages&includeDefault404Page=true&includeSpecial=true", $html);
$html = $f->doNormalReplacements($html);
$content .= $html;
// -----------------------------------------------
$selectedAutoRedirects = "";
if ($options['auto_redirects'] == '1') {
$selectedAutoRedirects = " checked";
}
$content .= "
" . __('Create automatic redirects', '404-solution') . ": ";
$content .= $spaces . __('Automatically creates redirects based on best possible suggested page.', '404-solution') . "
";
$selectedAutoCats = "";
if ($options['auto_cats'] == '1') {
$selectedAutoCats = " checked";
}
$content .= "
" . __('Create automatic redirects for categories', '404-solution') . ":
";
$selectedAutoTags = "";
if ($options['auto_tags'] == '1') {
$selectedAutoTags = " checked";
}
$content .= "
" . __('Create automatic redirects for tags', '404-solution') . ":
";
$content .= "
" . __('Auto redirect deletion', '404-solution') . ": " . __('Days (0 Disables Auto Delete)', '404-solution') . " ";
$content .= $spaces . __('Removes auto created redirects if they haven\'t been used for the specified amount of time.', '404-solution') . "
";
return $content;
}
function getAdminOptionsPageAdvancedSettings($options) {
$abj404logging = ABJ_404_Solution_Logging::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
// Only allow redirecting all requests on trusted sites because someone will break
// their website and complain to me about it and I don't want to hear that because I have
// other things to do besides deal with people that don't listen to warnings about things
// that will break their website.
$hideRedirectAllRequests = 'true';
if (in_array($_SERVER['SERVER_NAME'], $GLOBALS['abj404_whitelist'])) {
$hideRedirectAllRequests = 'false';
}
$selectedDebugLogging = "";
if (array_key_exists('debug_mode', $options) && $options['debug_mode'] == '1') {
$selectedDebugLogging = " checked";
}
$selectedRedirectAllRequests = "";
if (array_key_exists('redirect_all_requests', $options) && $options['redirect_all_requests'] == '1') {
$selectedRedirectAllRequests = " checked";
}
$selectedLogRawIPs = '';
if (array_key_exists('log_raw_ips', $options) && $options['log_raw_ips'] == '1') {
$selectedLogRawIPs = " checked";
}
$debugExplanation = __('
View the debug file.', '404-solution');
$debugLogLink = $abj404logic->getDebugLogFileLink();
$debugExplanation = $f->str_replace('
', ' ', $debugExplanation);
$kbFileSize = $abj404logging->getDebugFileSize() / 1024;
$kbFileSizePretty = number_format($kbFileSize, 2, ".", ",");
$mbFileSize = $abj404logging->getDebugFileSize() / 1024 / 1000;
$mbFileSizePretty = number_format($mbFileSize, 2, ".", ",");
$debugFileSize = sprintf(__("Debug file size: %s KB (%s MB).", '404-solution'),
$kbFileSizePretty, $mbFileSizePretty);
$allPostTypesTemp = $abj404dao->getAllPostTypes();
$allPostTypes = esc_html(implode(', ', $allPostTypesTemp));
// ----
// read the html content.
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/settingsAdvanced.html");
$html = $f->str_replace('{DATABASE_VERSION}', esc_html($options['DB_VERSION']), $html);
$html = $f->str_replace('checked="debug_mode"', $selectedDebugLogging, $html);
$html = $f->str_replace('checked="redirect_all_requests"', $selectedRedirectAllRequests, $html);
$html = $f->str_replace('checked="log_raw_ips"', $selectedLogRawIPs, $html);
$html = $f->str_replace('{ View the debug file.}', $debugExplanation, $html);
$html = $f->str_replace('{Debug file size: %s KB.}', $debugFileSize, $html);
$html = $f->str_replace('{ignore_dontprocess}', wp_kses_post($options['ignore_dontprocess']), $html);
$html = $f->str_replace('{ignore_doprocess}', wp_kses_post($options['ignore_doprocess']), $html);
$html = $f->str_replace('{recognized_post_types}', wp_kses_post($options['recognized_post_types']), $html);
$html = $f->str_replace('{all_post_types}', $allPostTypes, $html);
$html = $f->str_replace('{days_wait_before_major_update}', $options['days_wait_before_major_update'], $html);
$html = $f->str_replace('{recognized_categories}', wp_kses_post($options['recognized_categories']), $html);
$html = $f->str_replace('{folders_files_ignore}', wp_kses_post($options['folders_files_ignore']), $html);
$html = $f->str_replace('{OPTION_MIN_AUTO_SCORE}', esc_attr($options['auto_score']), $html);
$html = $f->str_replace('{disallow-redirect-all-requests}', $hideRedirectAllRequests, $html);
$html = $f->str_replace('{add-exclude-page-data-url}',
"admin-ajax.php?action=echoRedirectToPages&includeDefault404Page=false&includeSpecial=false", $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_EMPTY}',
__('(Type a page name)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_PAGE}',
__('(A page has been selected.)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_CUSTOM_STRING}',
__('(A custom string has been entered.)', '404-solution'), $html);
$html = $f->str_replace('{TOOLTIP_POPUP_EXPLANATION_URL}',
__('(An external URL will be used.)', '404-solution'), $html);
$html = $f->str_replace('{loaded-excluded-pages}',
urlencode($options['excludePages[]']), $html);
// constants and translations.
$html = $f->doNormalReplacements($html);
// ------------------
return $html;
}
/**
* @param array $options
* @return string
*/
function getAdminOptionsPageGeneralSettings($options) {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$selectedDefaultRedirect301 = "";
if ($options['default_redirect'] == '301') {
$selectedDefaultRedirect301 = " selected";
}
$selectedDefaultRedirect302 = "";
if ($options['default_redirect'] == '302') {
$selectedDefaultRedirect302 = " selected";
}
$selectedCapture404 = "";
if ($options['capture_404'] == '1') {
$selectedCapture404 = " checked";
}
$selectedSendErrorLogs = "";
if ($options['send_error_logs'] == '1') {
$selectedSendErrorLogs = " checked";
}
$selectedUnderSettings = "";
$selecteSsettingsLevel = "";
if ($options['menuLocation'] == 'settingsLevel') {
$selecteSsettingsLevel = " selected";
} else {
$selectedUnderSettings = " selected";
}
$logSizeBytes = $abj404dao->getLogDiskUsage();
$logSizeMB = round($logSizeBytes / (1024 * 1000), 2);
$totalLogLines = $abj404dao->getLogsCount(0);
$timeToDisplay = $abj404dao->getEarliestLogTimestamp();
$earliestLogDate = date('Y/m/d', $timeToDisplay) . ' ' . date('h:i:s', $timeToDisplay) . ' ' .
date('A', $timeToDisplay);
$selectedRemoveMatches = "";
if ($options['remove_matches'] == '1') {
$selectedRemoveMatches = " checked";
}
$html = ABJ_404_Solution_Functions::readFileContents(__DIR__ . "/html/adminOptionsGeneral.html");
$html = $f->str_replace('{selectedSendErrorLogs}', $selectedSendErrorLogs, $html);
$html = $f->str_replace('{selectedDefaultRedirect301}', $selectedDefaultRedirect301, $html);
$html = $f->str_replace('{selectedDefaultRedirect302}', $selectedDefaultRedirect302, $html);
$html = $f->str_replace('{selectedCapture404}', $selectedCapture404, $html);
$html = $f->str_replace('{admin_notification}', $options['admin_notification'], $html);
$html = $f->str_replace('{capture_deletion}', $options['capture_deletion'], $html);
$html = $f->str_replace('{manual_deletion}', $options['manual_deletion'], $html);
$html = $f->str_replace('{maximum_log_disk_usage}', $options['maximum_log_disk_usage'], $html);
$html = $f->str_replace('{logCurrentSizeDiskUsage}', $logSizeMB, $html);
$html = $f->str_replace('{logCurrentRowCount}', $totalLogLines, $html);
$html = $f->str_replace('{earliestLogDate}', $earliestLogDate, $html);
$html = $f->str_replace('{selectedRemoveMatches}', $selectedRemoveMatches, $html);
$html = $f->str_replace('{selectedUnderSettings}', $selectedUnderSettings, $html);
$html = $f->str_replace('{selecteSsettingsLevel}', $selecteSsettingsLevel, $html);
$html = $f->str_replace('{admin_notification_email}', $options['admin_notification_email'], $html);
$html = $f->str_replace('{default_wordpress_admin_email}', get_option('admin_email'), $html);
$html = $f->str_replace('{PHP_VERSION}', PHP_VERSION, $html);
// constants and translations.
$html = $f->doNormalReplacements($html);
return $html;
}
/**
* @global type $abj404dao
*/
function echoAdminLogsPage() {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$sub = 'abj404_logs';
$tableOptions = $abj404logic->getTableOptions($sub);
// Sanitizing unchecked table options
$tableOptions = $abj404logic->sanitizePostData($tableOptions);
echo "
";
echo '
";
echo "
";
echo $this->getPaginationLinks($sub);
echo "
";
echo $this->getAdminLogsPageTable($sub);
echo "
";
echo $this->getPaginationLinks($sub, false);
echo "
";
}
function getAdminLogsPageTable($sub) {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$abj404logging = ABJ_404_Solution_Logging::getInstance();
$tableOptions = $abj404logic->getTableOptions($sub);
$columns = array();
$columns['url']['title'] = __('URL', '404-solution');
$columns['url']['orderby'] = "url";
$columns['url']['width'] = "25%";
$columns['host']['title'] = __('IP Address', '404-solution');
$columns['host']['orderby'] = "remote_host";
$columns['host']['width'] = "12%";
$columns['refer']['title'] = __('Referrer', '404-solution');
$columns['refer']['orderby'] = "referrer";
$columns['refer']['width'] = "25%";
$columns['dest']['title'] = __('Action Taken', '404-solution');
$columns['dest']['orderby'] = "action";
$columns['dest']['width'] = "25%";
$columns['timestamp']['title'] = __('Date', '404-solution');
$columns['timestamp']['orderby'] = "timestamp";
$columns['timestamp']['width'] = "15%";
$columns['username']['title'] = __('User', '404-solution');
$columns['username']['orderby'] = "username";
$columns['username']['width'] = "10%";
$html = "
";
$html .= "";
$html .= $this->getTableColumns($sub, $columns);
$html .= " ";
$html .= "";
$html .= $this->getTableColumns($sub, $columns);
$html .= " ";
$html .= "";
$timezone = get_option('timezone_string');
if ('' == $timezone) {
$timezone = 'UTC';
}
date_default_timezone_set($timezone);
$rows = $abj404dao->getLogRecords($tableOptions);
$logRecordsDisplayed = 0;
$y = 1;
foreach ($rows as $row) {
$class = "";
if ($y == 0) {
$class = " class=\"alternate\"";
$y++;
} else {
$y = 0;
$class = ' class="normal-non-alternate"';
}
$html .= "";
$html .= " ";
$html .= "" . esc_html($row['url']);
if (trim($row['url_detail']) != '') {
$html .= ' (' . esc_html(trim($row['url_detail'])) . ')';
}
$html .= " ";
$html .= "" . esc_html($row['remote_host']) . " ";
$html .= "";
if ($row['referrer'] != "") {
$html .= "" . esc_html($row['referrer']) . " ";
} else {
$html .= " ";
}
$html .= " ";
$html .= "";
if ($row['action'] == "404") {
$html .= __('Displayed 404 Page', '404-solution');
} else {
$html .= __('Redirected to', '404-solution') . " ";
$html .= "" . esc_html($row['action']) . " ";
}
$html .= " ";
$timeToDisplay = abs(intval($row['timestamp']));
$html .= "" . date('Y/m/d', $timeToDisplay) . ' ' . date('h:i:s', $timeToDisplay) . ' ' .
date('A', $timeToDisplay) . " ";
$html .= "" . esc_html($row['username']) . " ";
$html .= " ";
$html .= " ";
$logRecordsDisplayed++;
}
$abj404logging->debugMessage($logRecordsDisplayed . " log records displayed on the page.");
if ($logRecordsDisplayed == 0) {
$html .= "";
$html .= " ";
$html .= "" . __('No Results To Display', '404-solution') . " ";
$html .= " ";
$html .= " ";
}
$html .= " ";
$html .= "
";
return $html;
}
/**
* @param string $sub
* @param array $tableOptions
* @param array $columns
*/
function getTableColumns($sub, $columns) {
$f = ABJ_404_Solution_Functions::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$tableOptions = $abj404logic->getTableOptions($sub);
$html = "
";
$cbinfo = 'class="manage-column column-cb check-column" style="{cb-info-style}"';
$cbinfoStyle = 'vertical-align: middle; padding-bottom: 6px;';
if ($sub == 'abj404_logs') {
$cbinfoStyle .= ' width: 0px;';
}
$cbinfo = $f->str_replace('{cb-info-style}', $cbinfoStyle, $cbinfo);
$html .= "";
if ($sub != 'abj404_logs') {
$html .= " ";
}
$html .= " ";
foreach ($columns as $column) {
$style = "";
if ($column['width'] != "") {
$style = " style=\"width: " . esc_attr($column['width']) . ";\" ";
}
$nolink = 0;
$sortorder = "";
if ($tableOptions['orderby'] == $column['orderby']) {
$thClass = " sorted";
if ($tableOptions['order'] == "ASC") {
$thClass .= " asc";
$sortorder = "DESC";
} else {
$thClass .= " desc";
$sortorder = "ASC";
}
} else {
if ($column['orderby'] != "") {
$thClass = " sortable";
if ($column['orderby'] == "timestamp" ||
$column['orderby'] == "last_used" ||
$column['orderby'] == "logshits") {
$thClass .= " asc";
$sortorder = "DESC";
} else {
$thClass .= " desc";
$sortorder = "ASC";
}
} else {
$thClass = "";
$nolink = 1;
}
}
$url = "?page=" . ABJ404_PP;
if ($sub == 'abj404_captured') {
$url .= "&subpage=abj404_captured";
} else if ($sub == 'abj404_logs') {
$url .= "&subpage=abj404_logs&id=" . $tableOptions['logsid'];
}
if ($tableOptions['filter'] != 0) {
$url .= "&filter=" . $tableOptions['filter'];
}
$url .= "&orderby=" . $column['orderby'] . "&order=" . $sortorder;
$cssTooltip = '';
$title_attr = '';
if (array_key_exists('title_attr', $column)) {
$title_attr = $column['title_attr'];
$cssTooltip = '' . $title_attr . ' ' . "\n";
$thClass .= ' lefty-tooltip';
}
$html .= " \n";
$html .= $cssTooltip;
if ($nolink == 1) {
$html .= $column['title'];
} else {
$html .= "";
$html .= '' .
esc_html($column['title']) . $cssTooltip ." ";
$html .= " ";
$html .= " ";
}
$html .= " ";
}
$html .= " ";
$html .= " ";
return $html;
}
/**
* @global type $abj404dao
* @param string $sub
* @param array $tableOptions
*/
function getPaginationLinks($sub, $showSearchFilter = true) {
$abj404dao = ABJ_404_Solution_DataAccess::getInstance();
$abj404logic = ABJ_404_Solution_PluginLogic::getInstance();
$f = ABJ_404_Solution_Functions::getInstance();
$tableOptions = $abj404logic->getTableOptions($sub);
$url = "?page=" . ABJ404_PP;
if ($sub == 'abj404_captured') {
$url .= "&subpage=abj404_captured";
} else if ($sub == 'abj404_logs') {
$url .= "&subpage=abj404_logs&id=" . $tableOptions['logsid'];
}
$url .= "&orderby=" . $tableOptions['orderby'];
$url .= "&order=" . $tableOptions['order'];
$url .= "&filter=" . $tableOptions['filter'];
if ($sub == 'abj404_logs') {
$num_records = $abj404dao->getLogsCount($tableOptions['logsid']);
} else {
if ($tableOptions['filter'] == ABJ404_TRASH_FILTER) {
$num_records = $abj404dao->getRedirectsForViewCount($sub, $tableOptions);
} else {
$num_records = $abj404dao->getRedirectsForViewCount($sub, $tableOptions);
}
}
$total_pages = ceil($num_records / $tableOptions['perpage']);
if ($total_pages == 0) {
$total_pages = 1;
}
$firsturl = $url;
if ($tableOptions['paged'] == 1) {
$prevurl = $url;
} else {
$prev = $tableOptions['paged'] - 1;
$prevurl = $url . "&paged=" . $prev;
}
if ($tableOptions['paged'] + 1 > $total_pages) {
if ($tableOptions['paged'] == 1) {
$nexturl = $url;
} else {
$nexturl = $url . "&paged=" . $tableOptions['paged'];
}
} else {
$next = $tableOptions['paged'] + 1;
$nexturl = $url . "&paged=" . $next;
}
if ($tableOptions['paged'] + 1 > $total_pages) {
if ($tableOptions['paged'] == 1) {
$lasturl = $url;
} else {
$lasturl = $url . "&paged=" . $tableOptions['paged'];
}
} else {
$lasturl = $url . "&paged=" . $total_pages;
}
// ------------
$start = ( absint(sanitize_text_field($tableOptions['paged']) - 1)) * absint(sanitize_text_field($tableOptions['perpage'])) + 1;
$end = min($start + absint(sanitize_text_field($tableOptions['perpage'])) - 1, $num_records);
$currentlyShowingText = sprintf(__('%s - %s of %s', '404-solution'), $start, $end, $num_records);
$currentPageText = __('Page', '404-solution') . " " . $tableOptions['paged'] . " " . __('of', '404-solution') . " " . esc_html($total_pages);
$showRowsText = __('Rows per page:', '404-solution');
$showRowsLink = wp_nonce_url($url . '&action=changeItemsPerRow', "abj404_importRedirects");
$ajaxPaginationLink = "admin-ajax.php?action=ajaxUpdatePaginationLinks&subpage=" . $sub .
"&nonce=" . wp_create_nonce('abj404_updatePaginationLink');
$searchFilterControl = '\n\n";
$oneBigFormActionURL = $this->getBulkOperationsFormURL($sub, $tableOptions);
$html .= '