Statistics::JavaScriptTrigger PHP Method

JavaScriptTrigger() public static method

Prepares JavaScript trigger for statistics requests
public static JavaScriptTrigger ( integer $p_params ) : string
$p_params integer specs to distinguish the request, js variables and functions
return string
    public static function JavaScriptTrigger($p_params)
    {
        global $Campsite;
        if (!isset($p_params['name_spec'])) {
            return '';
        }
        if (!isset($p_params['object_type_id'])) {
            return '';
        }
        if (!isset($p_params['request_object_id'])) {
            return '';
        }
        if (!isset($p_params['count_automatically'])) {
            $p_params['count_automatically'] = true;
        }
        $name_spec = $p_params['name_spec'];
        $object_type_id = $p_params['object_type_id'];
        $request_object_id = $p_params['request_object_id'];
        $stat_web_url = $Campsite['WEBSITE_URL'];
        if ('/' != $stat_web_url[strlen($stat_web_url) - 1]) {
            $stat_web_url .= '/';
        }
        $runStats = '';
        if ($p_params['count_automatically'] == true) {
            $runStats = 'stats_submit' . $name_spec . '();';
        }
        $trigger = '
            <script type="text/javascript">
            <!--
            var stats_getHTTPObject' . $name_spec . ' = function () {
                var xhr = false;
                if (window.XMLHttpRequest) {
                    xhr = new XMLHttpRequest();
                } else if (window.ActiveXObject) {
                    try {
                        xhr = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch(e) {
                        try {
                            xhr = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch(e) {
                            xhr = false;
                        }
                    }
                }
                return xhr;
            };

            var stats_submit' . $name_spec . ' = function () {
                if (undefined !== window.statistics_request_sent_' . $name_spec . ') {
                    return;
                }
                window.statistics_request_sent_' . $name_spec . ' = true;

                var stats_request = stats_getHTTPObject' . $name_spec . '();
                stats_request.onreadystatechange = function() {};

                var read_date = new Date();
                var read_path = "_statistics/reader/' . $object_type_id . '/";
                var request_randomizer = "" + read_date.getTime() + Math.random();
                var stats_url = "' . $stat_web_url . '" + read_path + "' . $request_object_id . '/";
                try {
                    stats_request.open("GET", stats_url + "?randomizer=" + request_randomizer, true);
                    stats_request.send(null);
                    /* not everybody has jquery installed
                    $.ajax({
                        url: stats_url,
                        data: {randomizer: request_randomizer},
                        success: function() {}
                    });
                    */
                } catch (e) {}
            };
            ' . $runStats . '
            -->
            </script>
        ';
        return $trigger;
    }

Usage Example

コード例 #1
0
/**
 * Campsite Map function plugin
 *
 * Type:     function
 * Name:     count
 * Purpose:  Triggers a statistics counting request
 *
 * @param array
 *     $p_params List of parameters from template
 * @param object
 *     $p_smarty Smarty template object
 *
 * @return
 *     string The html content
 */
function smarty_function_count($p_params, &$p_smarty)
{
    global $Campsite;
    $campsite = $p_smarty->getTemplateVars('gimme');
    $content = '';
    $art_number = 0;
    $art_language_num = 0;
    $art_language_code = '';
    if (isset($p_params['article']) && is_numeric($p_params['article'])) {
        $art_number = $p_params['article'];
    }
    if (isset($p_params['language'])) {
        $langs = array();
        if (is_numeric($p_params['language'])) {
            $langs = \Language::GetLanguages($p_params['language']);
        } else {
            $langs = \Language::GetLanguages(null, $p_params['language']);
        }
        if (!isset($langs[0])) {
            return '';
            // 'no lang'
        }
        $art_language_obj = $langs[0];
        $art_language_num = $art_language_obj->getLanguageId();
        $art_language_code = $art_language_obj->getCode();
    }
    $count_automatically = true;
    if (isset($p_params['dont_count_automatically'])) {
        $count_automatically = false;
    }
    if (!$art_number || !$art_language_num) {
        $meta_article = $campsite->article;
        if ($meta_article->defined) {
            if (!$art_number) {
                $art_number = $meta_article->number;
            }
            if (!$art_language_num) {
                $art_language_meta = $meta_article->language;
                $art_language_num = $art_language_meta->number;
                $art_language_code = $art_language_meta->code;
            }
        }
    }
    if (!$art_language_num) {
        $art_language_meta = $campsite->language;
        $art_language_num = $art_language_meta->number;
        $art_language_code = $art_language_meta->code;
    }
    if (!$art_number || !$art_language_num) {
        return '';
        // 'no art_num or lang'
    }
    $article = new \Article($art_language_num, $art_number);
    if (!$article->exists()) {
        return '';
        // 'no art'
    }
    try {
        $requestObjectId = $article->getProperty('object_id');
        $updateArticle = empty($requestObjectId);
        $objectType = new \ObjectType('article');
        $object_type_id = $objectType->getObjectTypeId();
        if ($updateArticle) {
            $requestObject = new \RequestObject($requestObjectId);
            if (!$requestObject->exists()) {
                $requestObject->create(array('object_type_id' => $objectType->getObjectTypeId()));
                $requestObjectId = $requestObject->getObjectId();
            }
            $article->setProperty('object_id', $requestObjectId);
        }
        // statistics shall be only gathered if the site admin set it on (and not for editor previews)
        if (!$campsite->preview) {
            $stat_web_url = $Campsite['WEBSITE_URL'];
            if ('/' != $stat_web_url[strlen($stat_web_url) - 1]) {
                $stat_web_url .= '/';
            }
            $article_number = $article->getProperty('Number');
            $name_spec = '_' . $article_number . '_' . $art_language_code;
            $content .= \Statistics::JavaScriptTrigger(array('count_automatically' => $count_automatically, 'name_spec' => $name_spec, 'object_type_id' => $object_type_id, 'request_object_id' => $requestObjectId));
        }
    } catch (\Exception $ex) {
        return '';
    }
    return $content;
}
All Usage Examples Of Statistics::JavaScriptTrigger