function gpi_action_single_recheck_page($page_id)
{
    global $wpdb;
    // If we are going to recheck this data, now is the time to do it
    if (!empty($page_id)) {
        $gpi_page_stats = $wpdb->prefix . 'gpi_page_stats';
        $query = "\n            SELECT URL, type, object_id, term_id\n            FROM {$gpi_page_stats}\n            WHERE ID = {$page_id}\n        ";
        $page_stats = $wpdb->get_row($query, ARRAY_A);
        $GPI_ListTable = new GPI_List_Table();
        $gpi_options = $GPI_ListTable->getOptions();
        require_once GPI_DIRECTORY . '/core/core.php';
        $googlePagespeedInsights = new googlePagespeedInsights($gpi_options);
        $urls_to_recheck = array();
        if (!is_null($page_stats['object_id'])) {
            $theid = $page_stats['object_id'];
        } elseif (!is_null($page_stats['term_id'])) {
            $theid = $page_stats['term_id'];
        }
        $urls_to_recheck[$page_stats['type']][] = array('url' => $page_stats['URL'], 'objectid' => $theid);
        $checkstatus = $googlePagespeedInsights->googlepagespeedinsightsworker($urls_to_recheck);
        if ($checkstatus == false) {
            $message = __('The API is busy checking other pages, please try again later.', 'gpagespeedi');
        } else {
            $message = __('Recheck Complete.', 'gpagespeedi');
        }
        return $message;
    }
}
Beispiel #2
0
function gpi_render_list_page()
{
    // Filter report type
    $report_filter = 'all';
    if (isset($_GET['filter'])) {
        $report_filter = $_GET['filter'];
    }
    $GPI_ListTable = new GPI_List_Table();
    $gpi_options = $GPI_ListTable->getOptions();
    $post_per_page = isset($_GET['post-per-page']) ? $_GET['post-per-page'] : 25;
    $GPI_ListTable->prepare_items(false, $report_filter, $post_per_page);
    ?>

    <!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions -->
    <form id="reports-filter" action="" method="get">

    <input type="hidden" name="page" value="<?php 
    echo $_REQUEST['page'];
    ?>
" />
    <input type="hidden" name="render" value="list" />
    <?php 
    $GPI_ListTable->display();
    ?>

    </form>
    <?php 
}
Beispiel #3
0
function gpi_action_recheck_page($page_id, $page_report)
{
    global $wpdb;
    $gpi_page_stats = $wpdb->prefix . 'gpi_page_stats';
    if (is_array($page_report) && !empty($page_report)) {
        // Build our where clauses for selecting URLs
        $page_report_count = count($page_report);
        $x = 1;
        $where_clause = '';
        foreach ($page_report as $page) {
            if ($x < $page_report_count) {
                $where_clause .= 'ID = ' . $page . ' OR ';
            } else {
                $where_clause .= 'ID = ' . $page;
            }
            $x++;
        }
        // Set Force Recheck to 1 on selected URLs
        $wpdb->query("\n            UPDATE {$gpi_page_stats} SET force_recheck = 1\n            WHERE {$where_clause}\n        ");
        // Schedule the api to check pages immediately
        $GPI_ListTable = new GPI_List_Table();
        $gpi_options = $GPI_ListTable->getOptions();
        require_once GPI_DIRECTORY . '/core/core.php';
        $googlePagespeedInsights = new googlePagespeedInsights($gpi_options);
        $googlePagespeedInsights->google_pagespeed_insights_Update_Options('last_run_finished', false, 'gpagespeedi_options');
        wp_schedule_event(time(), 'gpi_lastrun_checker', 'googlepagespeedinsightschecker');
        $return_message = $page_report_count;
    } elseif (!empty($page_id)) {
        // Set Force Recheck to 1 on selected URL
        $wpdb->query("\n            UPDATE {$gpi_page_stats} SET force_recheck = 1\n            WHERE ID = {$page_id}\n        ");
        // Schedule the api to check pages immediately
        $GPI_ListTable = new GPI_List_Table();
        $gpi_options = $GPI_ListTable->getOptions();
        require_once GPI_DIRECTORY . '/core/core.php';
        $googlePagespeedInsights = new googlePagespeedInsights($gpi_options);
        $googlePagespeedInsights->google_pagespeed_insights_Update_Options('last_run_finished', false, 'gpagespeedi_options');
        wp_schedule_event(time(), 'gpi_lastrun_checker', 'googlepagespeedinsightschecker');
        $return_message = '1';
    }
    return $return_message;
}
Beispiel #4
0
function gpi_render_ignored_urls_page()
{
    $GPI_ListTable = new GPI_List_Table();
    $gpi_options = $GPI_ListTable->getOptions();
    $post_per_page = isset($_GET['post-per-page']) ? $_GET['post-per-page'] : 25;
    $GPI_ListTable->prepare_items(true, 'ignored', $post_per_page);
    ?>
    <!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions -->
    <form id="reports-filter" method="get">
        <!-- For plugins, we also need to ensure that the form posts back to our current page -->
        <input type="hidden" name="page" value="<?php 
    echo $_REQUEST['page'];
    ?>
" />
        <input type="hidden" name="render" value="ignored-urls" />
        <!-- Now we can render the completed list table -->
        <?php 
    $GPI_ListTable->display();
    ?>
    </form>
    <?php 
}
Beispiel #5
0
function gpi_render_details_page($default_strategy, $page_id)
{
    global $wpdb;
    require_once GPI_DIRECTORY . '/includes/helper.php';
    //Create an instance of our package class...
    $GPI_ListTable = new GPI_List_Table();
    $gpi_options = $GPI_ListTable->getOptions();
    $strategy = isset($_GET['strategy']) ? $_GET['strategy'] : $default_strategy;
    $page_stats_column = $strategy . '_page_stats';
    $score_column = $strategy . '_score';
    $last_checked_column = $strategy . '_last_modified';
    if (!empty($page_id)) {
        $gpi_page_stats = $wpdb->prefix . 'gpi_page_stats';
        $query = "\n            SELECT *\n            FROM {$gpi_page_stats}\n            WHERE ID = {$page_id}\n        ";
        $page_stats = $wpdb->get_row($query, ARRAY_A);
        $page_stats[$page_stats_column] = unserialize($page_stats[$page_stats_column]);
        $resource_sizes = array();
        foreach ($page_stats[$page_stats_column] as $key => $value) {
            $adjusted_value = number_format($value / 1000, 2, '.', '');
            switch ($key) {
                case 'htmlResponseBytes':
                    $resource_sizes['HTML'] = $adjusted_value;
                    break;
                case 'cssResponseBytes':
                    $resource_sizes['CSS'] = $adjusted_value;
                    break;
                case 'imageResponseBytes':
                    $resource_sizes['IMAGES'] = $adjusted_value;
                    break;
                case 'javascriptResponseBytes':
                    $resource_sizes['JS'] = $adjusted_value;
                    break;
                case 'otherResponseBytes':
                    $resource_sizes['OTHER'] = $adjusted_value;
                    break;
            }
        }
        $gpi_page_reports = $wpdb->prefix . 'gpi_page_reports';
        $query2 = "\n            SELECT rule_key, rule_name, rule_impact, rule_blocks\n            FROM {$gpi_page_reports}\n            WHERE page_id = {$page_id}\n            AND strategy = '{$strategy}'\n        ";
        $page_report = $wpdb->get_results($query2, ARRAY_A);
        foreach ($page_report as $report_key => $report) {
            if ($report['rule_blocks'] !== null) {
                $report['rule_blocks'] = unserialize($report['rule_blocks']);
                foreach ($report['rule_blocks'] as $rule_key => $ruleblock) {
                    // Format description for each rule
                    if (isset($ruleblock['header']['args'])) {
                        $x = 1;
                        foreach ($ruleblock['header']['args'] as $arg) {
                            $report['rule_blocks'][$rule_key]['header']['format'] = str_replace('$' . $x, $arg['value'], $report['rule_blocks'][$rule_key]['header']['format']);
                            if ($arg['type'] == 'HYPERLINK') {
                                $report['rule_blocks'][$rule_key]['header']['hyperlink'] = $arg['value'];
                            }
                            $x++;
                        }
                    }
                    $report['rule_blocks'][$rule_key]['description'] = $report['rule_blocks'][$rule_key]['header']['format'];
                    if (isset($report['rule_blocks'][$rule_key]['header']['hyperlink'])) {
                        $report['rule_blocks'][$rule_key]['hyperlink']['url'] = $report['rule_blocks'][$rule_key]['header']['hyperlink'];
                        $report['rule_blocks'][$rule_key]['hyperlink']['name'] = $report['rule_name'];
                    }
                    unset($report['rule_blocks'][$rule_key]['header']);
                    //Format description for each instance of broken rule
                    if (isset($ruleblock['urls'])) {
                        foreach ($ruleblock['urls'] as $url_key => $url) {
                            $x = 1;
                            foreach ($url['result']['args'] as $arg) {
                                $report['rule_blocks'][$rule_key]['urls'][$url_key]['result']['format'] = str_replace('$' . $x, $arg['value'], $report['rule_blocks'][$rule_key]['urls'][$url_key]['result']['format']);
                                $x++;
                            }
                            $report['rule_blocks'][$rule_key]['results'][] = $report['rule_blocks'][$rule_key]['urls'][$url_key]['result']['format'];
                        }
                    }
                    unset($report['rule_blocks'][$rule_key]['urls']);
                }
                $page_report[$report_key]['rule_blocks'] = json_encode($report['rule_blocks']);
            }
        }
        usort($page_report, "cmpfloat_impact");
        $page_report = array_reverse($page_report);
        ?>
        <?php 
        $url_to_nonce = '?page=' . $_REQUEST['page'] . '&render=details&page_id=' . $_GET['page_id'] . '&action=single-recheck';
        $nonced_url = function_exists('wp_nonce_url') ? wp_nonce_url($url_to_nonce, 'bulk-gpi_page_reports') : $url_to_nonce;
        ?>
        <h3 class="subTitle"><?php 
        echo $page_stats['URL'];
        ?>
</h3>
        <div class="toolbar">
            <div class="left">
                <a href="<?php 
        echo $page_stats['URL'];
        ?>
" class="button-gpi view" target="_blank"><?php 
        _e('View Page', 'gpagespeedi');
        ?>
</a>
                <a href="<?php 
        echo $nonced_url;
        ?>
" class="button-gpi recheck"><?php 
        _e('Recheck Results', 'gpagespeedi');
        ?>
</a>
            </div>
        </div>
        <?php 
        if (isset($message)) {
            ?>
            <div id="message" class="error">
                <p><strong><?php 
            echo $message;
            ?>
</strong></p>
            </div>
        <?php 
        }
        ?>
        <!--Load the AJAX API-->
        <script type="text/javascript" src="https://www.google.com/jsapi"></script>
        <script type="text/javascript">

            var page_report = <?php 
        echo json_encode($page_report);
        ?>
;

            // Figure out Pagespeed score into degrees for gauge
            var score = <?php 
        echo $page_stats[$score_column];
        ?>
;
            var degrees = (3.38 * score) + 11;
            jQuery(document).ready(function() {
                jQuery("#pagespeed_needle").rotate(degrees);
            });

            // Load the Visualization API and the piechart package.
            google.load('visualization', '1.0', {'packages':['corechart']});

            // Set a callback to run when the Google Visualization API is loaded.
            google.setOnLoadCallback(drawCharts);

            // Callback that creates and populates a data table,
            // instantiates the pie chart, passes in the data and
            // draws it.
            function drawCharts() {

                /***********************************************
                            Create impact pie chart
                ************************************************/

                var impact = new google.visualization.DataTable();
                impact.addColumn('string', 'Rule');
                impact.addColumn('number', 'Impact');
                impact.addRows([
                    <?php 
        foreach ($page_report as $rule) {
            $rule_name = htmlentities($rule['rule_name'], ENT_QUOTES, "UTF-8");
            $rule_impact = htmlentities($rule['rule_impact'], ENT_QUOTES, "UTF-8");
            if ($rule_impact > 0) {
                echo '["' . $rule_name . '", ' . $rule_impact . '],' . "\r\n";
            }
        }
        ?>
                ]);

                // Set chart options
                var impact_options = {
                    'width': 463,
                    'height': 320,
                    'chartArea': {top:15,width:"85%",height:"91%"},
                    'legend': 'none',
                    'tooltip': {trigger:'none'},
                    'backgroundColor':'transparent',
                    'colors': ["#3366cc","#dc3912","#ff9900","#109618","#990099","#0099c6","#dd4477","#66aa00","#b82e2e","#316395","#994499","#22aa99","#aaaa11","#6633cc","#e67300","#8b0707","#651067","#329262","#5574a6","#3b3eac","#b77322","#16d620","#b91383","#f4359e","#9c5935","#a9c413","#2a778d","#668d1c","#bea413","#0c5922","#743411"],
                    'pieSliceTextStyle': {color: 'black', fontSize: 14}
                };

                // Instantiate and draw our chart, passing in some options.
                var impact_chart = new google.visualization.PieChart(document.getElementById('impact_chart_div'));
                impact_chart.draw(impact, impact_options);

                // google.visualization.table exposes a 'page' event.
                google.visualization.events.addListener(impact_chart, 'select', impactSelectHandler);
                google.visualization.events.addListener(impact_chart, 'onmouseover', highlightHover);
                google.visualization.events.addListener(impact_chart, 'onmouseout', clearHover);

                /***********************************************
                            Create resource size bar chart
                ************************************************/

                var sizes = new google.visualization.DataTable();
                sizes.addColumn('string', 'Rule');
                sizes.addColumn('number', '');
                sizes.addRows([
                    <?php 
        foreach ($resource_sizes as $key => $value) {
            echo "['{$key}', {$value}],\r\n";
        }
        ?>
                ]);

                // Set chart options
                var sizes_options = {
                    'legend':'none',
                    'backgroundColor':'transparent',
                    'chartArea': {top:10,width:"75%",height:"80%"},
                };

                // Instantiate and draw our chart, passing in some options.
                var sizes_chart = new google.visualization.BarChart(document.getElementById('sizes_chart_div'));
                sizes_chart.draw(sizes, sizes_options);

                function impactSelectHandler() {
                    var selected = impact_chart.getSelection();
                    if(typeof selected[0] != 'undefined') {
                        var ruleindex = selected[0].row;
                        var rule_object = page_report[ruleindex];
                        var html = buildHTML(rule_object);

                        jQuery('.impact_chart_right tr').removeClass('active');
                        jQuery('.impact_chart_right tr a[data-pieslice=' + ruleindex + ']').closest('tr').addClass('active');

                        jQuery('#impact_rule_report').css('display', 'block');
                        jQuery('#impact_rule_report').html(html);
                        clearHover();
                    } else {
                        jQuery('#impact_rule_report').css('display', 'none');
                        jQuery('#impact_rule_report').html('');
                        clearActive();
                    }
                }

                function buildHTML(rule_object) {
                    var rule_blocks = JSON.parse(rule_object.rule_blocks);
                    var html = '';
                    var rule_blocks_count = rule_blocks.length;

                    for(i=0;i<rule_blocks_count;i++) {
                        html = html + '<h3>' + rule_blocks[i].description + '</h3>';
                        if (typeof rule_blocks[i].results != 'undefined') {
                            var results_count = rule_blocks[i].results.length;
                            html = html + '<ul>';
                            for(y=0;y<results_count;y++) {
                                html = html + '<li>' + rule_blocks[i].results[y] + '</li>';
                            }
                            html = html + '</ul>';
                        }
                        if(typeof rule_blocks[i].hyperlink != 'undefined') {
                            html = html + '<a class="rule_docs" href="' + rule_blocks[i].hyperlink.url + '" target="_blank" alt="<?php 
        _e("Read Documentation", "gpagespeedi");
        ?>
" ><?php 
        _e("Read Documentation", "gpagespeedi");
        ?>
</a>';
                        }
                    }
                    return html;
                }

                function highlightHover(e) {
                    var current = jQuery('.impact_chart_right tr a[data-pieslice=' + e.row + ']');

                    jQuery('.impact_chart_right tr').removeClass('hover');

                    if(!current.closest('tr').hasClass('active')) {
                        current.closest('tr').addClass('hover');
                    }
                }

                function clearHover() {
                    jQuery('.impact_chart_right tr').removeClass('hover');
                }

                function clearActive() {
                    jQuery('.impact_chart_right tr').removeClass('active');
                }

                jQuery('.legend-item').on('click', function() {

                    var selected = jQuery(this).data('pieslice');
                    impact_chart.setSelection([{row: selected}]);
                    impactSelectHandler();
                    impact_chart.getSelection([{row: selected}]);

                    jQuery('.impact_chart_right tr').removeClass('active');

                    jQuery(this).closest('tr').addClass('active');

                    return false;

                });

            }

        </script>

        <!--Div's to hold output from google charts-->
        <div class="row">
            <div class="top-row boxsizing" id="pagespeed_gauge_wrapper">
                <div id="score_chart_div">
                    <img id="pagespeed_needle" src="<?php 
        echo GPI_PUBLIC_PATH;
        ?>
/images/pagespeed_gauge_needle.png" width="204" height="204" alt="" />
                    <div id="score_text"><?php 
        echo $page_stats[$score_column];
        ?>
<span><?php 
        _e('score', 'gpagespeedi');
        ?>
</span></div>
                </div>
            </div>
            <div class="top-row boxsizing framed" id="pagespeed_stats_wrapper">
                <div class="boxheader">
                    <span class="left"><?php 
        _e('Page Statistics', 'gpagespeedi');
        ?>
</span>
                    <span class="right" style="padding-right: 19px;"><?php 
        _e('Value', 'gpagespeedi');
        ?>
</span>
                </div>
                <table id="stats">
                    <tbody>
                        <tr>
                            <td class="leftcol"><?php 
        _e('Last Checked', 'gpagespeedi');
        ?>
</td>
                            <td class="rightcol"><?php 
        echo date_i18n('M d', $page_stats[$last_checked_column]);
        ?>
</td>
                        </tr>
                        <tr class="alt">
                            <td class="leftcol"><?php 
        _e('Number of Hosts', 'gpagespeedi');
        ?>
</td>
                            <td class="rightcol"><?php 
        echo $page_stats[$page_stats_column]['numberHosts'];
        ?>
</td>
                        </tr>
                        <tr>
                            <td class="leftcol"><?php 
        _e('Total Request Bytes', 'gpagespeedi');
        ?>
</td>
                            <td class="rightcol"><?php 
        echo $page_stats[$page_stats_column]['totalRequestBytes'];
        ?>
</td>
                        </tr>
                        <tr class="alt">
                            <td class="leftcol"><?php 
        _e('Total Resources', 'gpagespeedi');
        ?>
</td>
                            <td class="rightcol"><?php 
        echo $page_stats[$page_stats_column]['numberResources'];
        ?>
</td>
                        </tr>
                        <tr>
                            <td class="leftcol"><?php 
        _e('JavaScript Resources', 'gpagespeedi');
        ?>
</td>
                            <td class="rightcol"><?php 
        echo $page_stats[$page_stats_column]['numberJsResources'];
        ?>
</td>
                        </tr>
                        <tr class="alt">
                            <td class="leftcol"><?php 
        _e('CSS Resources', 'gpagespeedi');
        ?>
</td>
                            <td class="rightcol"><?php 
        echo $page_stats[$page_stats_column]['numberCssResources'];
        ?>
</td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div class="top-row boxsizing framed" id="pagespeed_sizes_wrapper">
                <div class="boxheader">
                    <span class="left"><?php 
        _e('Total Size of Resources', 'gpagespeedi');
        ?>
</span>
                    <span class="right light"><span class="legend"></span><?php 
        _e('Size (kB)', 'gpagespeedi');
        ?>
</span>
                </div>
                <div id="sizes_chart_div"></div>
            </div>
        </div>
        <div class="row boxsizing framed">
            <div class="boxheader">
                <span class="left"><?php 
        _e('Opportunities for improvement', 'gpagespeedi');
        ?>
</span><span class="light"><?php 
        _e('(Click for detailed report)', 'gpagespeedi');
        ?>
</span>
            </div>
            <div id="opportunities">
                <div class="impact_chart_left boxsizing">
                    <div id="impact_chart_div"></div>
                    <div id="impact_rule_report"></div>
                </div>
                <div class="impact_chart_right">
                    <table>
                        <tbody>
                            <th>
                                <?php 
        _e('Insights Key', 'gpagespeedi');
        ?>
                            </th>
                            <?php 
        $x = 0;
        $color_array = array("#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707", "#651067", "#329262", "#5574a6", "#3b3eac", "#b77322", "#16d620", "#b91383", "#f4359e", "#9c5935", "#a9c413", "#2a778d", "#668d1c", "#bea413", "#0c5922", "#743411");
        foreach ($page_report as $rule) {
            $rule_name = $rule['rule_name'];
            $rule_impact = $rule['rule_impact'];
            if ($rule_impact > 0) {
                ?>
                                    <tr>
                                        <td class="leftcol">
                                            <span class="swatch" style="background: <?php 
                echo $color_array[$x];
                ?>
"></span>
                                            <div class="box"><a data-pieslice="<?php 
                echo $x;
                ?>
" class="legend-item"><?php 
                echo $rule_name;
                ?>
</a></div>
                                        </td>
                                    </tr>
                                    <?php 
            }
            $x++;
        }
        ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    <?php 
    }
}
 static function cal_pagespeed_data($strategy)
 {
     global $wpdb;
     if (!defined('GPI_DIRECTORY')) {
         return 0;
     }
     if ($strategy !== "desktop" && $strategy !== "mobile") {
         return 0;
     }
     require_once GPI_DIRECTORY . '/includes/helper.php';
     $options = get_option('gpagespeedi_options');
     $score_column = $strategy . '_score';
     $page_stats_column = $strategy . '_page_stats';
     require_once ABSPATH . 'wp-admin/includes/template.php';
     require_once GPI_DIRECTORY . '/core/init.php';
     $GPI_ListTable = new GPI_List_Table();
     $data_typestocheck = $GPI_ListTable->getTypesToCheck('all');
     $gpi_page_stats = $wpdb->prefix . 'gpi_page_stats';
     if (!empty($data_typestocheck)) {
         $allpagedata = $wpdb->get_results($wpdb->prepare("SELECT ID, URL, {$score_column}, {$page_stats_column}\n                                    FROM {$gpi_page_stats}\n                                    WHERE ({$data_typestocheck['0']})", $data_typestocheck[1]), ARRAY_A);
     } else {
         $allpagedata = array();
     }
     $reports_typestocheck = $GPI_ListTable->getTypesToCheck('all');
     $gpi_page_reports = $wpdb->prefix . 'gpi_page_reports';
     if (!empty($reports_typestocheck)) {
         $allpagereports = $wpdb->get_results($wpdb->prepare("SELECT     r.rule_key, r.rule_name, r.rule_impact\n                                        FROM        {$gpi_page_stats} d\n                                        INNER JOIN  {$gpi_page_reports} r \n                                                    ON r.page_id = d.ID\n                                                    AND r.rule_impact > 0\n                                                    AND r.strategy = '{$strategy}'\n                                        WHERE       ({$reports_typestocheck['0']})", $reports_typestocheck[1]), ARRAY_A);
     } else {
         $allpagereports = array();
     }
     $total_pages = count($allpagedata);
     $total_scores = 0;
     $average_score = 0;
     if (!empty($total_pages) && !empty($allpagereports)) {
         foreach ($allpagedata as $key => $pagedata) {
             $total_scores = $total_scores + $pagedata[$score_column];
         }
         $average_score = number_format($total_scores / $total_pages);
     }
     // Not Null check for Report List scores
     switch ($strategy) {
         //            case 'both':
         //                $nullcheck = 'desktop_score IS NOT NULL AND mobile_score IS NOT NULL';
         //                break;
         case 'mobile':
             $nullcheck = 'mobile_score IS NOT NULL';
             $_select = " max(mobile_last_modified) as last_modified ";
             break;
         case 'desktop':
             $nullcheck = 'desktop_score IS NOT NULL';
             $_select = " max(desktop_last_modified) as last_modified ";
             break;
     }
     // Get our Data
     if (!is_null($reports_typestocheck)) {
         $gpi_page_stats = $wpdb->prefix . 'gpi_page_stats';
         $data = $wpdb->get_results($wpdb->prepare("SELECT {$_select}\n                            FROM {$gpi_page_stats}\n                            WHERE ({$reports_typestocheck['0']})\n                            AND {$nullcheck}", $reports_typestocheck[1]), ARRAY_A);
     }
     return array('last_modified' => is_array($data[0]) && isset($data[0]['last_modified']) ? $data[0]['last_modified'] : 0, 'average_score' => $average_score, 'total_pages' => $total_pages);
 }
Beispiel #7
0
function gpi_render_admin_page()
{
    $admin_page = isset($_GET['render']) ? $_GET['render'] : '';
    if (isset($_REQUEST['render1']) && -1 != $_REQUEST['render1']) {
        $admin_page = $_REQUEST['render1'];
    }
    if (isset($_REQUEST['render2']) && -1 != $_REQUEST['render2']) {
        $admin_page = $_REQUEST['render2'];
    }
    $GPI_ListTable = new GPI_List_Table();
    $gpi_options = $GPI_ListTable->getOptions();
    $gpi_ui_options = $GPI_ListTable->getOptions('gpagespeedi_ui_options');
    ?>
    <div class="wrap">
        
        <div id="icon-gpi" class="icon32"><br/></div>
        <h2>Google Pagespeed Insights</h2>
        <div class="reportmodes">
            <?php 
    if ($gpi_options['strategy'] == 'both' || $gpi_options['strategy'] == 'desktop') {
        ?>
                <a href="<?php 
        echo $_SERVER['REQUEST_URI'];
        ?>
&strategy=desktop" class="button-gpi desktop<?php 
        if ($gpi_ui_options['view_preference'] == "desktop") {
            echo ' active';
        }
        ?>
"><?php 
        _e('Desktop Mode', 'gpagespeedi');
        ?>
</a>
            <?php 
    }
    ?>
            <?php 
    if ($gpi_options['strategy'] == 'both' || $gpi_options['strategy'] == 'mobile') {
        ?>
                <a href="<?php 
        echo $_SERVER['REQUEST_URI'];
        ?>
&strategy=mobile" class="button-gpi mobile<?php 
        if ($gpi_ui_options['view_preference'] == "mobile") {
            echo ' active';
        }
        ?>
"><?php 
        _e('Mobile Mode', 'gpagespeedi');
        ?>
</a>
            <?php 
    }
    ?>
        </div>
        <h3 class="nav-tab-wrapper">
            <a href="?page=<?php 
    echo $_REQUEST['page'];
    ?>
&render=list" class="nav-tab <?php 
    if ($admin_page == '' || $admin_page == 'list' || $admin_page == 'ignore' || $admin_page == 'recheck') {
        echo 'nav-tab-active';
    }
    ?>
"><?php 
    _e('Report List', 'gpagespeedi');
    ?>
</a>
            <?php 
    if ($admin_page == 'details') {
        ?>
                <a href="?page=<?php 
        echo $_REQUEST['page'];
        ?>
&render=details&page_id=<?php 
        echo $_GET['page_id'];
        ?>
" class="nav-tab nav-tab-active nav-tab-temp"><?php 
        _e('Report Details', 'gpagespeedi');
        ?>
</a>
            <?php 
    }
    ?>
            <a href="?page=<?php 
    echo $_REQUEST['page'];
    ?>
&render=summary" class="nav-tab <?php 
    if ($admin_page == 'summary') {
        echo 'nav-tab-active';
    }
    ?>
"><?php 
    _e('Report Summary', 'gpagespeedi');
    ?>
</a>
            <a href="?page=<?php 
    echo $_REQUEST['page'];
    ?>
&render=ignored-urls" class="nav-tab <?php 
    if ($admin_page == 'ignored-urls' || $admin_page == 'activate') {
        echo 'nav-tab-active';
    }
    ?>
"><?php 
    _e('Ignored URLs', 'gpagespeedi');
    ?>
</a>
            <a href="?page=<?php 
    echo $_REQUEST['page'];
    ?>
&render=options" class="nav-tab <?php 
    if ($admin_page == 'options') {
        echo 'nav-tab-active';
    }
    ?>
"><?php 
    _e('Options', 'gpagespeedi');
    ?>
</a>
            <a href="?page=<?php 
    echo $_REQUEST['page'];
    ?>
&render=about" class="nav-tab <?php 
    if ($admin_page == 'about') {
        echo 'nav-tab-active';
    }
    ?>
"><?php 
    _e('About', 'gpagespeedi');
    ?>
</a>
        </h3>

        <?php 
    if ($gpi_options['google_developer_key'] == '' && $admin_page != 'options') {
        ?>
            <div id="message" class="error">
                <p><strong><?php 
        _e('You must enter your Google API key to use this plugin! Enter your API key in the', 'gpagespeedi');
        ?>
 <a href="?page=<?php 
        echo $_REQUEST['page'];
        ?>
&render=options"><?php 
        _e('Options', 'gpagespeedi');
        ?>
</a></strong>.</p>
            </div>
        <?php 
    }
    ?>
        <?php 
    if ($gpi_options['bad_api_key'] && $admin_page != 'options') {
        ?>
            <div id="message" class="error">
                <p><strong><?php 
        _e('The Google Pagespeed API Key you entered appears to be invalid. Please update your API key in the', 'gpagespeedi');
        ?>
 <a href="?page=<?php 
        echo $_REQUEST['page'];
        ?>
&render=options"><?php 
        _e('Options', 'gpagespeedi');
        ?>
</a></strong>.</p>
            </div>
        <?php 
    }
    ?>
        <?php 
    if ($gpi_options['pagespeed_disabled'] && $admin_page != 'options') {
        ?>
            <div id="message" class="error">
                <p><strong><?php 
        _e('The "PageSpeed Insights API" service is not enabled. To enable it, please visit the "Services" page from your ', 'gpagespeedi');
        ?>
 <a href="https://code.google.com/apis/console/" target="_blank"><?php 
        _e('Google API Console', 'gpagespeedi');
        ?>
</a></strong>.</p>
            </div>
        <?php 
    }
    ?>
        <?php 
    if ($gpi_ui_options['action_message']) {
        ?>
            <div id="message" class="updated">
                <p><?php 
        echo $gpi_ui_options['action_message'];
        ?>
</p>
            </div>
        <?php 
    }
    ?>
        <?php 
    if ($gpi_options['new_ignored_items']) {
        ?>
            <div id="message" class="error">
                <p><strong><?php 
        _e('One or more URLs could not be reached by Google Pagespeed Insights and have automatically been added to the', 'gpagespeedi');
        ?>
 <a href="?page=<?php 
        echo $_REQUEST['page'];
        ?>
&render=ignored-urls"><?php 
        _e('Ignored URLs', 'gpagespeedi');
        ?>
</a></strong>.</p>
            </div>
        <?php 
    }
    ?>
        <?php 
    if ($gpi_options['backend_error']) {
        ?>
            <div id="message" class="error">
                <p><strong><?php 
        _e('An error has been encountered while checking one or more URLs. Possible causes: <br /><br />Daily API Limit Exceeded <a href="https://code.google.com/apis/console" target="_blank">Check API Usage</a> <br />API Key user limit exceeded <a href="https://code.google.com/apis/console" target="_blank">Check API Usage</a> <br />the URL is not publicly accessible or is bad. <br /><br />The URL(s) have been added to the', 'gpagespeedi');
        ?>
 <a href="?page=<?php 
        echo $_REQUEST['page'];
        ?>
&render=ignored-urls"><?php 
        _e('Ignored URLs', 'gpagespeedi');
        ?>
</a></strong></p>
            </div>
        <?php 
    }
    ?>
        <?php 
    require_once GPI_DIRECTORY . '/core/core.php';
    $googlePagespeedInsights = new googlePagespeedInsights($gpi_options);
    //Show currently working status on admin pages if GPI is working in the background
    $worker_status = $googlePagespeedInsights->google_pagespeed_insights_Check_Status();
    if ($worker_status) {
        ?>
            <div id="message" class="updated">
                <span><p id="gpi_status_finished" style="font-size: 13px; display: none;"><?php 
        _e('Google Pagespeed has finished checking pagespeed scores. <a href="javascript:location.reload(true);">Refresh to see new results.</a>', 'gpagespeedi');
        ?>
</p><p id="gpi_status_ajax" style="font-size: 13px;"><?php 
        _e('Google Pagespeed is running in the background. Progress...', 'gpagespeedi');
        ?>
</p></span>
            </div>
        <?php 
    }
    //Clear any one-time messages from above
    $googlePagespeedInsights->google_pagespeed_insights_Update_Options('backend_error', false, 'gpagespeedi_options');
    $googlePagespeedInsights->google_pagespeed_insights_Update_Options('action_message', false, 'gpagespeedi_ui_options');
    $googlePagespeedInsights->google_pagespeed_insights_Update_Options('new_ignored_items', false, 'gpagespeedi_options');
    $default_strategy = $gpi_ui_options['view_preference'];
    switch ($admin_page) {
        case 'list':
            require_once GPI_DIRECTORY . '/includes/admin/list.php';
            gpi_render_list_page();
            break;
        case 'ignored-urls':
            require_once GPI_DIRECTORY . '/includes/admin/ignored-urls.php';
            gpi_render_ignored_urls_page();
            break;
        case 'options':
            require_once GPI_DIRECTORY . '/includes/admin/options.php';
            gpi_render_options_page();
            break;
        case 'details':
            $page_id = isset($_GET['page_id']) ? $_GET['page_id'] : '';
            require_once GPI_DIRECTORY . '/includes/admin/details.php';
            gpi_render_details_page($default_strategy, $page_id);
            break;
        case 'summary':
            require_once GPI_DIRECTORY . '/includes/admin/summary.php';
            gpi_render_summary_page($default_strategy);
            break;
        case 'about':
            require_once GPI_DIRECTORY . '/includes/admin/about.php';
            gpi_render_about();
            break;
        default:
            require_once GPI_DIRECTORY . '/includes/admin/list.php';
            gpi_render_list_page();
            break;
    }
    ?>
    </div>
    <?php 
}
Beispiel #8
0
function gpi_render_summary_page($default_strategy)
{
    global $wpdb;
    require_once GPI_DIRECTORY . '/includes/helper.php';
    //Create an instance of our package class...
    $GPI_ListTable = new GPI_List_Table();
    $gpi_options = $GPI_ListTable->getOptions();
    // Mobile or Desktop reports?
    $strategy = isset($_GET['strategy']) ? $_GET['strategy'] : $default_strategy;
    $score_column = $strategy . '_score';
    $page_stats_column = $strategy . '_page_stats';
    // Create our empty arrays for use later when divying up our data for display
    $rule_stats = $scores = $html_sizes = $css_sizes = $image_sizes = $js_sizes = $other_sizes = array();
    // Filter report type
    $filter = 'all';
    if (isset($_GET['filter'])) {
        $filter = $_GET['filter'];
    }
    // Page Data Query
    $data_typestocheck = $GPI_ListTable->getTypesToCheck($filter);
    $gpi_page_stats = $wpdb->prefix . 'gpi_page_stats';
    if (!empty($data_typestocheck)) {
        $allpagedata = $wpdb->get_results($wpdb->prepare("SELECT ID, URL, {$score_column}, {$page_stats_column}\n                                FROM {$gpi_page_stats}\n                                WHERE ({$data_typestocheck['0']})", $data_typestocheck[1]), ARRAY_A);
    } else {
        $allpagedata = array();
    }
    // Page Reports Query
    $reports_typestocheck = $GPI_ListTable->getTypesToCheck($filter);
    $gpi_page_reports = $wpdb->prefix . 'gpi_page_reports';
    if (!empty($reports_typestocheck)) {
        $allpagereports = $wpdb->get_results($wpdb->prepare("SELECT     r.rule_key, r.rule_name, r.rule_impact\n                                    FROM        {$gpi_page_stats} d\n                                    INNER JOIN  {$gpi_page_reports} r \n                                                ON r.page_id = d.ID\n                                                AND r.rule_impact > 0\n                                                AND r.strategy = '{$strategy}'\n                                    WHERE       ({$reports_typestocheck['0']})", $reports_typestocheck[1]), ARRAY_A);
    } else {
        $allpagereports = array();
    }
    foreach ($allpagereports as $pagereports) {
        $rulekey = $pagereports['rule_key'];
        if (!isset($rule_stats[$rulekey])) {
            $rule_stats[$rulekey]['name'] = $pagereports['rule_name'];
            $rule_stats[$rulekey]['total_impact'] = $pagereports['rule_impact'];
            $rule_stats[$rulekey]['occurances'] = 1;
        } else {
            $rule_stats[$rulekey]['total_impact'] = abs($rule_stats[$rulekey]['total_impact'] + $pagereports['rule_impact']);
            $rule_stats[$rulekey]['occurances'] = $rule_stats[$rulekey]['occurances'] + 1;
        }
    }
    usort($rule_stats, "cmpfloat_rules");
    foreach ($rule_stats as $key => $rule) {
        $total_impact = $rule['total_impact'];
        $occurances = $rule['occurances'];
        $avg_impact = number_format($total_impact / $occurances, 2);
        $rule_stats[$key]['avg_impact'] = $avg_impact;
    }
    // Count all pages (needed for calculating averages)
    $total_pages = count($allpagedata);
    $total_scores = 0;
    if (!empty($total_pages) && !empty($allpagereports)) {
        foreach ($allpagedata as $key => $pagedata) {
            $id = $pagedata['ID'];
            $total_scores = $total_scores + $pagedata[$score_column];
            $pagedata[$page_stats_column] = unserialize($pagedata[$page_stats_column]);
            $allpagedata[$key]['page_stats'] = $pagedata[$page_stats_column];
            $scores[$id]['score'] = isset($pagedata[$score_column]) ? $pagedata[$score_column] : '';
            $scores[$id]['url'] = isset($pagedata['URL']) ? $pagedata['URL'] : '';
            $scores[$id]['id'] = $id;
            $html_sizes[$id] = isset($pagedata[$page_stats_column]['htmlResponseBytes']) ? $pagedata[$page_stats_column]['htmlResponseBytes'] : '0';
            $css_sizes[$id] = isset($pagedata[$page_stats_column]['cssResponseBytes']) ? $pagedata[$page_stats_column]['cssResponseBytes'] : '0';
            $image_sizes[$id] = isset($pagedata[$page_stats_column]['imageResponseBytes']) ? $pagedata[$page_stats_column]['imageResponseBytes'] : '0';
            $js_sizes[$id] = isset($pagedata[$page_stats_column]['javascriptResponseBytes']) ? $pagedata[$page_stats_column]['javascriptResponseBytes'] : '0';
            $other_sizes[$id] = isset($pagedata[$page_stats_column]['otherResponseBytes']) ? $pagedata[$page_stats_column]['otherResponseBytes'] : '0';
        }
        $average_score = number_format($total_scores / $total_pages);
        usort($scores, "cmpfloat_scores");
        usort($html_sizes, "cmpfloat");
        usort($css_sizes, "cmpfloat");
        usort($image_sizes, "cmpfloat");
        usort($js_sizes, "cmpfloat");
        usort($other_sizes, "cmpfloat");
        $average_resource_sizes = array('HTML' => array(number_format(end($html_sizes) / 1000, 0, '', ''), number_format(array_sum($html_sizes) / $total_pages / 1000, 0, '', ''), number_format($html_sizes[0] / 1000, 0, '', '')), 'CSS' => array(number_format(end($css_sizes) / 1000, 0, '', ''), number_format(array_sum($css_sizes) / $total_pages / 1000, 0, '', ''), number_format($css_sizes[0] / 1000, 0, '', '')), 'IMAGES' => array(number_format(end($image_sizes) / 1000, 0, '', ''), number_format(array_sum($image_sizes) / $total_pages / 1000, 0, '', ''), number_format($image_sizes[0] / 1000, 0, '', '')), 'JS' => array(number_format(end($js_sizes) / 1000, 0, '', ''), number_format(array_sum($js_sizes) / $total_pages / 1000, 0, '', ''), number_format($js_sizes[0] / 1000, 0, '', '')), 'OTHER' => array(number_format(end($other_sizes) / 1000, 0, '', ''), number_format(array_sum($other_sizes) / $total_pages / 1000, 0, '', ''), number_format($other_sizes[0] / 1000, 0, '', '')));
        $highest_scores = array();
        $lowest_scores = array();
        $x = 0;
        foreach ($scores as $score) {
            if ($x > 4) {
                break;
            }
            array_push($lowest_scores, $score);
            $x++;
        }
        $x = 0;
        $scores = array_reverse($scores);
        foreach ($scores as $score) {
            if ($x > 4) {
                break;
            }
            array_push($highest_scores, $score);
            $x++;
        }
        ?>

        <!--Load the AJAX API-->
        <script type="text/javascript" src="https://www.google.com/jsapi"></script>

        <script type="text/javascript">
            // Figure out Pagespeed score into degrees for gauge
            var score = <?php 
        echo $average_score;
        ?>
;
            var degrees = (3.38 * score) + 11;
            jQuery(document).ready(function() {
                jQuery("#pagespeed_needle").rotate(degrees);
            });

            // Load the Visualization API and the piechart package.
            google.load('visualization', '1.0', {'packages':['corechart']});

            // Set a callback to run when the Google Visualization API is loaded.
            google.setOnLoadCallback(drawCharts);

            // Callback that creates and populates a data table,
            // instantiates the pie chart, passes in the data and
            // draws it.
            function drawCharts() {

                /***********************************************
                            Create resource size bar chart
                ************************************************/

                var sizes = google.visualization.arrayToDataTable([
                  ['Type', 'High', 'Average', 'Low'],
                  <?php 
        foreach ($average_resource_sizes as $key => $values) {
            echo "['{$key}', {$values['0']}, {$values['1']}, {$values['2']}],\r\n";
        }
        ?>
                ]);
                // Set chart options
                var sizes_options = {
                    'legend':{position: 'none'},
                    'backgroundColor':'transparent',
                    'width': 615,
                    'height': 200,
                    'chartArea': {top:10,width:"80%",height:"80%"},
                };

                // Instantiate and draw our chart, passing in some options.
                var sizes_chart = new google.visualization.BarChart(document.getElementById('sizes_chart_div'));
                sizes_chart.draw(sizes, sizes_options);

            }
        </script>

        <div class="tablenav top">
            <div class="alignleft actions">
                <form method="get" action="" id="filter" name="filter">
                    <input type="hidden" name="page" value="<?php 
        echo $_REQUEST['page'];
        ?>
" />
                    <input type="hidden" name="render" value="summary" />
                    <div class="tablenav top">
                        <?php 
        $GPI_ListTable->extra_tablenav('top');
        ?>
                    </div>
                </form>
            </div>

            <br class="clear">
        </div>

        <!--Div's to hold output from google charts-->
        <div class="row">
            <div class="top-row boxsizing" id="pagespeed_gauge_wrapper">
                <div id="score_chart_div">
                    <img id="pagespeed_needle" src="<?php 
        echo GPI_PUBLIC_PATH;
        ?>
/images/pagespeed_gauge_needle.png" width="204" height="204" alt="" />
                    <div id="score_text"><?php 
        echo $average_score;
        ?>
<span><?php 
        _e('score', 'gpagespeedi');
        ?>
</span></div>
                </div>
            </div>
            <div class="top-row boxsizing framed" id="pagespeed_avg_sizes_wrapper">
                <div class="boxheader">
                    <span class="left"><?php 
        _e('Size of Resources (in kB)', 'gpagespeedi');
        ?>
</span>
                    <span class="right light"><span class="legend low"></span><?php 
        _e('Lowest', 'gpagespeedi');
        ?>
</span>
                    <span class="right light"><span class="legend avg"></span><?php 
        _e('Average', 'gpagespeedi');
        ?>
</span>
                    <span class="right light"><span class="legend"></span><?php 
        _e('Highest', 'gpagespeedi');
        ?>
</span>
                </div>
                <div id="sizes_chart_div"></div>
            </div>
        </div>
        <div class="row boxsizing framed" id="largest_improvement">
            <div class="boxheader">
                <span class="left"><?php 
        _e('Largest Areas for Improvement', 'gpagespeedi');
        ?>
</span>
                <span class="right"><?php 
        _e('Pages Effected', 'gpagespeedi');
        ?>
</span>
                <span class="right"><?php 
        _e('Average Impact', 'gpagespeedi');
        ?>
</span>
            </div>
            <table id="stats">
                <tbody>
                    <?php 
        $x = 0;
        foreach ($rule_stats as $rule) {
            if ($x == 5) {
                break;
            }
            $rule_name = $rule['name'];
            $avg_impact = $rule['avg_impact'];
            $occurances = $rule['occurances'];
            $altclass = 'class="alt"';
            if ($x % 2 == 0) {
                $altclass = '';
            }
            ?>
                        <tr <?php 
            echo $altclass;
            ?>
>
                            <td class="leftcol"><?php 
            echo $rule_name;
            ?>
</td>
                            <td class="rightcol"><?php 
            echo $avg_impact;
            ?>
</td>
                            <td class="rightcol"><?php 
            echo $occurances;
            ?>
</td>
                        </tr>
                        <?php 
            $x++;
        }
        ?>

                </tbody>
            </table>
        </div>
        <div class="row scores_div">
            <div class="halfwidth boxsizing framed left">
                <div class="boxheader">
                    <span class="left"><?php 
        _e('Highest Scoring Pages', 'gpagespeedi');
        ?>
</span>
                    <span class="right"><?php 
        _e('Score', 'gpagespeedi');
        ?>
</span>
                </div>
                <table id="stats">
                    <tbody>
                        <?php 
        $x = 0;
        $request = $_REQUEST['page'];
        foreach ($highest_scores as $score) {
            if ($x == 5) {
                break;
            }
            $url = $score['url'];
            $thescore = $score['score'];
            $id = $score['id'];
            $altclass = 'class="alt"';
            if ($x % 2 == 0) {
                $altclass = '';
            }
            ?>
                            <tr <?php 
            echo $altclass;
            ?>
>
                                <td class="leftcol"><?php 
            echo "<a href=\"?page={$request}&render=details&page_id={$id}\">{$url}</a>";
            ?>
</td>
                                <td class="rightcol"><?php 
            echo $thescore;
            ?>
</td>
                            </tr>
                            <?php 
            $x++;
        }
        ?>
                    </tbody>
                </table>
            </div>
            <div class="halfwidth boxsizing framed right">
                <div class="boxheader">
                    <span class="left"><?php 
        _e('Lowest Scoring Pages', 'gpagespeedi');
        ?>
</span>
                    <span class="right"><?php 
        _e('Score', 'gpagespeedi');
        ?>
</span>
                </div>
                <table id="stats">
                    <tbody>
                        <?php 
        $x = 0;
        $request = $_REQUEST['page'];
        foreach ($lowest_scores as $score) {
            if ($x == 5) {
                break;
            }
            $url = $score['url'];
            $thescore = $score['score'];
            $id = $score['id'];
            $altclass = 'class="alt"';
            if ($x % 2 == 0) {
                $altclass = '';
            }
            ?>
                            <tr <?php 
            echo $altclass;
            ?>
>
                                <td class="leftcol"><?php 
            echo "<a href=\"?page={$request}&render=details&page_id={$id}\">{$url}</a>";
            ?>
</td>
                                <td class="rightcol"><?php 
            echo $thescore;
            ?>
</td>
                            </tr>
                            <?php 
            $x++;
        }
        ?>
                    </tbody>
                </table>
            </div>
        </div>

        <?php 
    } else {
        ?>
        <div class="tablenav top">
            <div class="alignleft actions">
                <form method="get" action="" id="filter" name="filter">
                    <input type="hidden" name="page" value="<?php 
        echo $_REQUEST['page'];
        ?>
" />
                    <input type="hidden" name="render" value="summary" />
                    <div class="tablenav top">
                        <?php 
        $GPI_ListTable->extra_tablenav('top');
        ?>
                    </div>
                </form>
            </div>

            <br class="clear">
        </div>
        <?php 
        _e('No Pagespeed Reports Found. Google Pagespeed may still be checking your pages. If problems persist, see the following possible solutions:', 'gpagespeedi');
        ?>
        <ul class="no-items">
            <?php 
        if (isset($_GET['filter']) && $_GET['filter'] != 'all') {
            ?>
            <li><?php 
            _e('There may not be any results for the "' . $_GET['filter'] . '" filter. Try another filter.', 'gpagespeedi');
            ?>
</li>
            <?php 
        }
        ?>
            <?php 
        if ($gpi_options['strategy'] == 'both') {
            ?>
            <li><?php 
            _e('There may not be any ' . $default_strategy . ' reports completed yet.', 'gpagespeedi');
            ?>
</li>
            <?php 
        }
        ?>
            <li><?php 
        _e('Make sure that you have entered your Google API key on the ', 'gpagespeedi');
        ?>
<a href="?page=<?php 
        echo $_REQUEST['page'];
        ?>
&render=options">Options</a> page.</li>
            <li><?php 
        _e('Make sure that you have enabled "PageSpeed Insights API" from the Services page of the ', 'gpagespeedi');
        ?>
<a href="https://code.google.com/apis/console/">Google Console</a>.</li>
            <li><?php 
        _e('The Google Pagespeed API may be temporarily unavailable.', 'gpagespeedi');
        ?>
</li>
        </ul>
    <?php 
    }
}