File "class.joomlawatch.helper.php"

Full Path: /home/asmplong/www/ancien-site-2019/site/components/com_joomlawatch/class.joomlawatch.helper.php
File size: 15.48 KB
MIME-type: text/x-php
Charset: utf-8

<?php

/**
 * JoomlaWatch - A real-time ajax joomla monitor and live stats
 * @version 1.2.0
 * @package JoomlaWatch
 * @license http://www.gnu.org/licenses/gpl-3.0.txt 	GNU General Public License v3
 * @copyright (C) 2007 by Matej Koval - All rights reserved!
 * @website http://www.codegravity.com
 **/

/** ensure this file is being included by a parent file */
if (!defined('_JEXEC') && !defined('_VALID_MOS'))
    die('Restricted access');

class JoomlaWatchHelper {

    var $database;
    var $config;

    function JoomlaWatchHelper() {
        $this->database = new JoomlaWatchDB();
        $this->config = new JoomlaWatchConfig();
    }

    /**
     * helper
     */
    function getActualDateTime() {
        $date = JoomlaWatchHelper::date("d.m.Y", JoomlaWatchHelper::getServerTime());
        $time = JoomlaWatchHelper::date("H:i:s", JoomlaWatchHelper::getServerTime());
        return "$date $time";
    }

    /**
     * helper
     */
    function dayOfWeek() {
        //date_default_timezone_set(JoomlaWatchHelper::getTimezone());
        return JoomlaWatchHelper::date("w", JoomlaWatchHelper::getServerTime());
        //return JoomlaWatchHelper::date("w", $this->getServerTime());
    }

    /**
     * helper
     */
    function dayOfMonth() {
        //date_default_timezone_set(JoomlaWatchHelper::getTimezone());
        //return JoomlaWatchHelper::date("d", $this->getServerTime());
        return JoomlaWatchHelper::date("d", JoomlaWatchHelper::getServerTime());
    }

    /**
     * helper
     */
    function getIP2LocationURL($ip) {
        $url = $this->config->getConfigValue('JOOMLAWATCH_TOOLTIP_URL');
        $result = str_replace("{ip}", $ip, $url);
        //TODO : appears to be a bug in str_ireplace - doesn't work!
        return $result;
    }

    /**
     * helper
     */
    function resetData() {

        $query = sprintf("delete from #__joomlawatch");
        $result1 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_uri");
        $result2 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_info");
        $result3 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_blocked");
        $result4 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_goals");
        $result4 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_cache");
        $result4 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_uri2title");
        $result5 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_history");
        $result5 = $this->database->executeQuery($query);

        $query = sprintf("delete from #__joomlawatch_uri_history");
        $result5 = $this->database->executeQuery($query);

        return true;

    }


    /**
     * helper
     *
     * @return unknown
     */
    function isModulePublished() {
        $query = sprintf("select published from #__modules where module = 'mod_joomlawatch_agent' order by id desc limit 1; ");
        $published = $this->database->resultQuery($query);
        return $published;
    }

    /**
     * helper
     *
     * @return unknown
     */
    function jwDateToday() {
        $config = new JConfig();
        $offset = $config->offset;
        $daysDiff = ((date("U")) - (gmmktime(0, 0, 0, 1, 1, 1970))+  $offset*3600) / 86400;
        $diff = floor($daysDiff);
        return $diff;
    }

    /**
     * helper
     *
     * @return unknown
     */
    function getURI() {
        $redirURI = addslashes(strip_tags(@ $_SERVER[$this->config->getConfigValue('JOOMLAWATCH_SERVER_URI_KEY')]));
        $uri = addslashes(strip_tags(@ $_SERVER['REQUEST_URI']));

        if (@ $redirURI && @ substr($redirURI, -9, 9) != "index.php")
            $uri = $redirURI;

        return $uri;
    }

    /**
     * helper
     */
    function truncate($str, $len = "") {
        if (@ !$len)
            $len = $this->config->getConfigValue('JOOMLAWATCH_TRUNCATE_VISITS');

        if (strlen($str) < $len)
            return $str;
        else
            return substr($str, 0, $len) . "...";
    }
    /**
     * config
     */
    function saveSettings($post) {

        /* defines explicitely checkboxes */
        $checkboxNamesArray = array (
            'JOOMLAWATCH_FRONTEND_NO_BACKLINK',
            'JOOMLAWATCH_FRONTEND_HIDE_LOGO',
            'JOOMLAWATCH_IP_STATS',
            'JOOMLAWATCH_FRONTEND_NO_BACKLINK',
            'JOOMLAWATCH_FRONTEND_COUNTRIES',
            'JOOMLAWATCH_FRONTEND_COUNTRIES_UPPERCASE',
            'JOOMLAWATCH_FRONTEND_COUNTRIES_FIRST',
            'JOOMLAWATCH_FRONTEND_VISITORS',
            'JOOMLAWATCH_FRONTEND_VISITORS_TODAY',
            'JOOMLAWATCH_FRONTEND_VISITORS_YESTERDAY',
            'JOOMLAWATCH_FRONTEND_VISITORS_THIS_WEEK',
            'JOOMLAWATCH_FRONTEND_VISITORS_LAST_WEEK',
            'JOOMLAWATCH_FRONTEND_VISITORS_THIS_MONTH',
            'JOOMLAWATCH_FRONTEND_VISITORS_LAST_MONTH',
            'JOOMLAWATCH_FRONTEND_VISITORS_TOTAL',
            'JOOMLAWATCH_TOOLTIP_ONCLICK',
            'JOOMLAWATCH_ONLY_LAST_URI',
            'JOOMLAWATCH_HIDE_REPETITIVE_TITLE',
            'JOOMLAWATCH_UNINSTALL_KEEP_DATA',
            'JOOMLAWATCH_FRONTEND_COUNTRIES_NAMES',
            'JOOMLAWATCH_FRONTEND_COUNTRIES_FLAGS_FIRST'
        );
        JoomlaWatchHelper :: saveConfigValues($checkboxNamesArray, $post);

        return true;
    }

    /**
     * Used by both - save anti-spam and save settings
     * @param  $checkboxNamesArray
     * @param  $post
     * @return void
     */
    function saveConfigValues($checkboxNamesArray, $post) {

        foreach ($post as $key => $value) {
            if (strstr($key, "JOOMLAWATCH_")) {
                $this->config->saveConfigValue($key, $value);
            }
        }
        //hack :( explicitly save checkbox values
        foreach ($checkboxNamesArray as $key => $value) {
            if (@ !$post[$value]) { //if there is no value - checkbox unchecked
                $this->config->saveConfigValue($value, "Off");
            }
        }
        // explicitly reset chache because of frontend settings
        JoomlaWatchCache :: clearCache();

    }

    /**
     * helper
     */
    function getDateByDay($day, $format = "d.m.Y") {
        //date_default_timezone_set(JoomlaWatchHelper::getTimezone());
        //$date = JoomlaWatchHelper::date($format, $day * 3600 * 24);
        $date = JoomlaWatchHelper::date($format, $day * 3600 * 24);
        $output = $date;

        //        if ($format == "d.m.Y" && ($date == JoomlaWatchHelper::date($format, $this->getServerTime())))
        if ($format == "d.m.Y" && ($date == JoomlaWatchHelper::date($format, $day * 3600 * 24)))
            $output .= " (" . _JW_STATS_TODAY . ")";

        return $output;
    }

    function getUser() {
        jimport('joomla.utilities.date');
        $user = & JFactory::getUser();
        return $user;
    }

    function getUsername() {
        $user = & JoomlaWatchHelper::getUser();
        return $user->username;
    }

    function getTimezoneOffset() {

        $user = & JoomlaWatchHelper::getUser();

        //	    if we have an anonymous user, then use global config, instead of the user params
        if($user->get('id')) {
            $userTimezone = $user->getParam('timezone');
        } else {
            $conf =& JFactory::getConfig();
            $userTimezone = $conf->getValue('config.offset');
        }
        /* if the user has no timezone defined, use the timezone from server configuratio */
        /*
                if (!isset($userTimezone)) {
        */
        $config = new JConfig();
        $userTimezone = $config->offset;

        if ($userTimezone && !is_numeric($userTimezone)) {
            try {
                $dtz = new DateTimeZone($userTimezone);
                $time = new DateTime('now', $dtz);
                $userTimezone = $time->format('P');
            } catch (Exception $e) {
                echo("<!-- exception ".$e->getMessage()." -->");
            }
        }

        /*
                }
        */

        $daylightSaving = 0;
        if (JOOMLAWATCH_SERVER_DAYLIGHT_SAVING) {
            $daylightSaving = date("I");
        }
        $serverTimezone = date("Z")/3600 - $daylightSaving;

        $offset = $userTimezone - $serverTimezone;
        if (JOOMLAWATCH_DEBUG) {
            echo("server timezone: $serverTimezone user timezone: $userTimezone difference: $offset daylight saving: $daylightSaving");
        }

        return $offset;
    }

    /**
     * helper
     */
    function getServerTime() {
        //        return time() + $this->config->getConfigValue('JOOMLAWATCH_TIMEZONE_OFFSET') * 3600;
        return time();
    }

    function serverTimeToLocal($time) {
        return $time + JoomlaWatchHelper::getTimezoneOffset();
    }

    function getLocalTime() {
        JoomlaWatchHelper::serverTimeToLocal(JoomlaWatchHelper::getServerTime());
    }


    /**
     * helper
     */
    // fnmatch PHP function only on UNIX :(, this replaces the wildcard search
    function wildcardSearch($pattern, $string) {
        return preg_match("#^" . strtr(preg_quote($pattern, '#'), array (
                                                                        '\*' => '.*',
                                                                        '\?' => '.'
                                                                  )) . "$#i", $string);
    }

    /**
     * helper
     *
     * @return unknown
     */
    function jwDateBySeconds($sec) {
        $date = floor($sec / 3600 / 24 + $this->config->getConfigValue('JOOMLAWATCH_DAY_OFFSET'));
        return $date;
    }

    /**
     * helper
     */
    function getDayByTimestamp($timestamp) {
        return floor( ($timestamp + $this->config->getConfigValue('JOOMLAWATCH_DAY_OFFSET')) / 24 / 3600 + $this->config->getConfigValue('JOOMLAWATCH_WEEK_OFFSET'));
    }

    /**
     * helper
     */
    function getWeekByTimestamp($timestamp) {
        return ceil(($timestamp +$this->config->getConfigValue('JOOMLAWATCH_DAY_OFFSET')) / 7 / 24 / 3600 + $this->config->getConfigValue('JOOMLAWATCH_WEEK_OFFSET'));
    }

    /**
     * helper
     */
    function getTooltipOnClick() {
        return $this->config->getCheckboxValue("JOOMLAWATCH_TOOLTIP_ONCLICK");
    }

    /**
     * helper
     * @return unknown
     */
    function getTooltipOnEvent() {
        if ($this->getTooltipOnClick()) {
            return "title='" . _JW_TOOLTIP_CLICK . "' onclick";
        } else {
            return "title='" . _JW_TOOLTIP_MOUSE_OVER . "' onmouseover";
        }
    }

    /**
     * helper
     */
    function getTooltipOnEventHide() {
        if (!$this->getTooltipOnClick()) {
            return "onClick='ajax_hideTooltip();'";
        }
        return;
    }

    /**
     * helper
     * @return unknown
     */
    function getAvailableLanguages() {
        $langDirPath = JPATH_BASE2 . DS . "components" . DS . "com_joomlawatch" . DS . "lang";

        if ($handle = @ opendir($langDirPath)) {
            while (false !== ($file = readdir($handle))) {
                if (strstr($file, ".php")) {
                    $file = str_replace(".php", "", $file);
                    $langArray[] = $file;
                }
            }
            closedir($handle);
        }
        sort($langArray);
        return @ $langArray;
    }

    /**
     * helper
     *
     * functions taken from
     * Open Web Application Security Project
     * (http://www.owasp.org)
     */
    // sanitize a string for SQL input (simple slash out quotes and slashes)
    function sanitize( $string ) {
        $db = & JFactory::getDBO();
        return $this->database->getEscaped($string); // Return the sanitized code
    }


    /**
     * helper
     */
    function countryByIp($ip) {
        if ($ip == '127.0.0.1') {
            /* ignore localhost */
            return;
        }

        $query = sprintf("select ip, country from #__joomlawatch where (ip = '%s' and country is not NULL) limit 1", $this->database->getEscaped($ip));
        $row3 = $this->database->resultQuery($query);

        if (@ !$row3->country) {

            $iplook = new ip2country($ip);
            $iplook->UseDB = true;
            $iplook->db_tablename = "#__joomlawatch_ip2c";

            if (($iplook->LookUp())) {
                $country = strtolower($iplook->Country);
                $query3 = sprintf("update #__joomlawatch set country = '%s' where ip = '%s'", $this->database->getEscaped($country), $this->database->getEscaped($ip));
                $this->database->executeQuery($query);
            }

        } else {
            $country = $row3->country;
        }

        return @ $country;
    }

    /**
     * helper
     */
    function countryCodeToCountryName($code) {
        $query = sprintf("select country from #__joomlawatch_cc2c where cc = '%s' limit 1", $this->database->getEscaped($code));
        $countryName = $this->database->resultQuery($query);
        return $countryName;
    }

    function getWeekFromTimestamp($timestamp) {
        //date_default_timezone_set(JoomlaWatchHelper::getTimezone());
        //return JoomlaWatchHelper::date("W", $timestamp);
        return JoomlaWatchHelper::date("W", $timestamp);
    }

    function getYearFromTimestamp($timestamp) {
        //date_default_timezone_set(JoomlaWatchHelper::getTimezone());
        //        return JoomlaWatchHelper::date("Y", $timestamp);
        return JoomlaWatchHelper::date("y", $timestamp);
    }

    function removeRepetitiveTitle($title) {
        if ($this->config->getCheckboxValue("JOOMLAWATCH_HIDE_REPETITIVE_TITLE")) {
            $config = new JConfig();
            $title = str_replace($config->sitename,"",$title);
        }
        return $title;
    }


    /**
     * filtering input get var
     * @param  $key
     * @return mixed
     */
    function requestGet($key) {
        if (isset($key)) {
            return JRequest::getVar($key);
        } else {
            return JRequest::get('get');
        }
    }

    /**
     * Filtering input post var
     * @param  $key
     * @return mixed
     */
    function requestPost($key) {
        if (isset($key)) {
            return JRequest::getVar($key);
        } else {
            return JRequest::get( 'post' );
        }

    }

    /**
     * Used as replacement for date to use joomla timezone
     * @param  $format
     * @param  $timestamp
     * @return string
     */
    function date($format, $timestamp) {

        $tz = JoomlaWatchHelper::getTimezoneOffset();
        return date($format, $timestamp + $tz * 3600);
    }


    /**
     * sender
     *
     * @param  $recipient
     * @param  $sender
     * @param  $subject
     * @param  $body
     * @return void
     */
    function sendEmail($recipient, $sender, $subject, $body) {

        JUtility::sendMail($recipient, $sender, $recipient, $subject, $body, 1, $cc, $bcc, $attachment, $replyto, $replytoname);
    }

    /**
     * Config
     * @param  $post
     * @return bool
     */
    function saveAntiSpamSettings($post) {

        $checkboxNamesArray = array (
            'JOOMLAWATCH_SPAMWORD_BANS_ENABLED'
        );

        JoomlaWatchHelper :: saveConfigValues($checkboxNamesArray, $post);
        return true;
    }

    /**
     * Config
     * @param  $post
     * @return bool
     */
    function saveEmailSettings($post) {

        $checkboxNamesArray = array (
            'JOOMLAWATCH_EMAIL_REPORTS_ENABLED'
        );

        JoomlaWatchHelper :: saveConfigValues($checkboxNamesArray, $post);
        return true;
    }
}


?>