Community Forum

Please read the intro before joining/posting. Thank you.

If you have questions about our software, chances are this forum has the answers.

You'll need to register before you can post on the forum to ask your question or to answer another one. A reply will be posted to each and every question that is asked so there is no need to double post or bump your post. We'll do our best to answer promptly, but in some cases it may take a day or two. If you bump your post, it may be removed. Bear with us and we'll get your question answered quickly.

Here are a few tips to help you to get your questions answered more rapidly.

IMPORTANT: Posts in English only. We don't employ translators and we'll be unable to understand your message properly and will probably delete it.
SOFTWARE: Each software has it's own forum. Software here is NOT supported. Posts about this software will be deleted. Supported software questions ONLY please.
SEARCH: Use the search option to see if your question has been answered on the forum before now or if there is an answer in the documentation of your software.
PERSONAL SUPPORT: If you have purchased a commercial version of any software, using the contact option at the licence centre ensures a faster response.
AUTO DELETION: Accounts older than 5 days, with no posts or topics, are automatically deleted. Only register if you are thinking of posting.
LINKS: Any links posted are not clickable (to deter spammers) and must be copied / pasted into your browser address bar.

            

You are not logged in.

Search Results
SayWhatAgain @ 15-05-2021 17:55:04

Hi,

recently my server updated its PHP version from 7.2 to the 7.4.18 version. In my 3.3 version of Maian Events only a few errors showed up, so I'm gonna tell you how to fix them till David don't release the new version (no rush David, take all the time you need).

You only have to edit 2 files. Remember to make a backup of the files before editing them.

1st File:

/control/classes/system/class.errors.php

Find:

function msFatalErr() {
  global $MSEH;
  $error = error_get_last();
  if ($error['type'] == E_ERROR || $error['type'] == 4) {
    $string = '[Error Code: ' . $error['type'] . '] ' . $error['message'] . linending();
    $string .= '[Date/Time: ' . date('j F Y @ H:iA') . ']' . linending();
    $string .= '[Fatal error on line ' . $error['line'] . ' in file ' . $error['file'] . ']';
    if (ERR_HANDLER_DISPLAY) {
      echo '<div style="background:#ff9999"><p style="padding:10px;color:#fff">A fatal error has occurred. For more details please view "' . ERR_HANDLER_LOG_FOLDER . '/' . FILE_FATAL_ERR_LOG_FILE . '".</div>';
    }
    $MSEH->fatalErr($string);
  }
}

and replace it with:

function msFatalErr() {
  global $MSEH;
  $error = error_get_last();
  if ((isset($error['type']) && $error['type'] == E_ERROR) || (isset($error['type']) && $error['type'] == 4)) {
    $string = '[Error Code: ' . $error['type'] . '] ' . $error['message'] . linending();
    $string .= '[Date/Time: ' . date('j F Y @ H:iA') . ']' . linending();
    $string .= '[Fatal error on line ' . $error['line'] . ' in file ' . $error['file'] . ']';
    if (ERR_HANDLER_DISPLAY) {
      echo '<div style="background:#ff9999"><p style="padding:10px;color:#fff">A fatal error has occurred. For more details please view "' . ERR_HANDLER_LOG_FOLDER . '/' . FILE_FATAL_ERR_LOG_FILE . '".</div>';
    }
    $MSEH->fatalErr($string);
  }
}


2nd file:

/control/functions.php

Find:

function mswCD($data) {
  if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    $sybase = strtolower(@ini_get('magic_quotes_sybase'));
    if (empty($sybase) || $sybase == 'off') {
      // Fixes issue of new line chars not parsing between single quotes..
      $data = str_replace('\n', '\\\n', $data);
      return stripslashes($data);
    }
  }
  return $data;
}

and replace it with:

function mswCD($data) {
  if (function_exists('get_magic_quotes_gpc')) {
    $sybase = strtolower(@ini_get('magic_quotes_sybase'));
    if (empty($sybase) || $sybase == 'off') {
      // Fixes issue of new line chars not parsing between single quotes..
      $data = str_replace('\n', '\\\n', $data);
      return stripslashes($data);
    }
  }
  return $data;
}

And find in the same file:

function mswSQL($data) {
  if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    $sybase = strtolower(@ini_get('magic_quotes_sybase'));
    if (empty($sybase) || $sybase == 'off') {
      $data = stripslashes($data);
    } else {
      $data = mswDAP($data);
    }
  }
  $data = ((isset($GLOBALS['___mysqli_dbcon']) && is_object($GLOBALS['___mysqli_dbcon'])) ? mysqli_real_escape_string($GLOBALS['___mysqli_dbcon'], $data) : ((trigger_error("Fix the mysqli_real_escape_string() call, this code does not work.", E_USER_ERROR)) ? "" : ""));
  return $data;
}

And replace it with:

function mswSQL($data) {
  if (function_exists('get_magic_quotes_gpc')) {
    $sybase = strtolower(@ini_get('magic_quotes_sybase'));
    if (empty($sybase) || $sybase == 'off') {
      $data = stripslashes($data);
    } else {
      $data = mswDAP($data);
    }
  }
  $data = ((isset($GLOBALS['___mysqli_dbcon']) && is_object($GLOBALS['___mysqli_dbcon'])) ? mysqli_real_escape_string($GLOBALS['___mysqli_dbcon'], $data) : ((trigger_error("Fix the mysqli_real_escape_string() call, this code does not work.", E_USER_ERROR)) ? "" : ""));
  return $data;
}

Save both files, upload them and your version of Maian Events will be ready for PHP 7.4

Go to topic
Go to post
SayWhatAgain @ 28-11-2020 11:52:34

Hi all,

What happens:
When you mistype an URL of an event in Maian Events you get a 403 error, not a 404 error because it's a not found.

This doesn't happen if a folder of Maian Events is mistyped (or doesn't exist), the 404 error shows as intended.

Proof of concept:
https://www.maiansoftware.com/demos/mevents/?e=16667

This event doesn't exist but it shows a 403 error instead the 404 error.

Why it should be fixed?:
In these pandemic days, there are a lot of cancelling events and for Google:

Access denied errors often take the form of a 403 Forbidden response code. When Google returns this error it generally means that the website’s server or host is blocking Googlebot’s access.
These errors are bad for SEO because the search engines can’t crawl that page. If the error isn’t fixed after a certain period of time Google may just de-index the page entirely.

Thanks for your work!

Go to topic
Go to post
SayWhatAgain @ 23-10-2020 11:28:55

Hi,

well, the "problem" is that the default search has no particular order, when in other "places" (webs, scripts, etc.) when you search the normal order would be:
1- Event Title (by relevance)
2- Location
3 - Web Url *
4 - Details *
5 - Categories
6 - Contact name
7 - Dates

* Note: #3 and #4 could change position.

I'm not asking for a particular advanced search, just for a default order more "normal".

Thanks again for your time.

Go to topic
Go to post
SayWhatAgain @ 20-10-2020 09:22:02

Hi again,

when you search for an event, the results are ordered in a "strange" way.

For example, in live Demo, if you search for "London" (without quotation marks) it'll show the results for the word, but I think that if the word is in the title of the event, normal behaviour is that the result should show before than others, and in the live Demo you'll see "International Yoga Day" and "King's Open Day - Guy's Campus" before than "LONDON Film & Comic Con SUMMER".

I think that the default ORDER should be changed.

Go to topic
Go to post
SayWhatAgain @ 12-08-2020 12:59:56

Hi!
As previous versions of Bootstrap 3 had vulnerabilities, I ask for an upgrade of this core files.

More info:
https://blog.getbootstrap.com/2019/02/13/bootstrap-4-3-1-and-3-4-1/

Go to topic
Go to post
SayWhatAgain @ 25-07-2020 11:36:26

Great! Thank you! big_smile

Go to topic
Go to post
SayWhatAgain @ 11-07-2020 08:38:39

Hi,

as v3.4 is being prepared, I request to add something that european users need (by law).

in the Add Event section a Privacy Panel (like the Options Panel before de Add Event button), with a checkbox unchecked and the text like "I have read and accept the privacy policy". The sender will need to check the checkbox to add the event.

The text (and the link of the privacy policy) could be changed in the admin section, and the Privacy Policy web page will be independent of Maian Events.

Same for Enquiry event tab, and for PROBLEMS? LET US KNOW.

I've to hard coded it in the v3.3 version because if I don't have it I couldn't use Main Events (I'll get in trouble).

Go to topic
Go to post
SayWhatAgain @ 11-07-2020 08:14:01

Hi,

so if I saw it right in the new update:

- Fixed issue where meta description & keywords were reversed and shown in the wrong meta values

Finally I was right... wink

Go to topic
Go to post
SayWhatAgain @ 13-01-2019 14:21:03

Hi,

open the msw.css file in /events/content/_theme_default/css/ folder.

Search for this code:

.navbar {
  background: #0089a1 url(../images/nav-bg.png);
  color: #fff;
  border: 0;
  border-bottom: 3px solid #c0c0c0;
  border-radius: 0;
  padding:10px 0 10px 0;
}

and replace it with:

.navbar {
  background: black;
  color: #fff;
  border: 0;
  border-bottom: 3px solid #c0c0c0;
  border-radius: 0;
  padding:10px 0 10px 0;
}

Go to topic
Go to post
SayWhatAgain @ 17-12-2018 18:32:39

Hi everyone,

* I've checked the files in the latest-version.zip file, and I found no changes in the next files:

admin > templates > css > chartist.css
admin > templates > css > mobile.css
admin > templates > js > plugins > sortable.js
admin > templates > js > jquery.js
admin > templates > _header.php
admin > templates > login.php
control > classes > certs > cacert.pem
control > classes > mailer > src > Exception.php
control > classes > system > class.cleantalk.php
control > classes > class.gateway.php
control > system > gateway > refunded.php
control > system > modules > rss.php
control > system > _ajax.php
control > tcpdf > tcpdf.php
content > language > english > add.php
content > language > english > global.php
content > _theme_default > header.tpl.php

I don't know if this is intended, or just a "slip".

* * Updated Open Graph, Twitter Cards etc to use event thumbnail rather than default image. Thumbnail must be 200x200 or greater.
If the thumbnails are less than 200x200, why don't use the original image itself? It'll will have a best resolution and size...

* The new version of normalize.css (v8) included in this update:
"Remove support for older browsers Android 4, lte IE 9, lte Safari 7."
It'll be great to warn the webmasters before the update wink

* The CSS files, and the JS files, aren't minified, and now it's a MUST to improve the speed of websites. It'll be great to have the same files with a .min version.

* In the "CSS File Changes" of the "Software Upgrade - v3.3" documentation, there are more changes that are missing:

.footbar .date {
  text-transform: capitalize;
}
.eventarea .details .date {
  text-transform: capitalize;
}
.event_calendar .dayviewarea .noevents {
  font-style: italic;
  font-size: 12px;
}
.eventpagearea .bottom .text .highlight {
  color: #008198;
  text-transform: capitalize;
}

*  Why are we keeping the local JS/CSS files when we could use the CDN ones?:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css" integrity="sha256-l85OmPOjvil/SOvVt3HnSSjzF1TUMyT9eV0c2BzEGzU=" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" integrity="sha256-rByPlHULObEjJ6XQxW/flG2r+22R5dKiAoef+aXWfik=" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.min.css" integrity="sha256-HtCCUh9Hkh//8U1OwcbD8epVEUdBvuI8wj1KtqMhNkI=" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous">
.....

Faster for the visitor, and less CPU/RAM for the web server wink

Go to topic
Go to post
SayWhatAgain @ 01-09-2018 17:04:58

Hi,

if you want to add a Scroll Back To Top Button in Maian Events (very useful if you're watching it in your mobile phone), you have to edit this two files:

In content/_theme_default/header.tpl.php find:

<body>

    <?php
    // Shows only on extra small screens
    ?>

And add just after the <body> tag:

<body>
    <script type="text/javascript">
    $(document).ready(function(){
        $(window).scroll(function(){
            if($(this).scrollTop() > 100){
                $('#scroll').fadeIn();
            }else{
                $('#scroll').fadeOut();
            }
        });
        $('#scroll').click(function(){
            $("html, body").animate({ scrollTop: 0 }, 600);
            return false;
        });
    });
    </script>
<a href="javascript:void(0);" id="scroll" title="Go Up" style="display: none;">Up!<span></span></a>
    <?php
    // Shows only on extra small screens
    ?>


In content/_theme_default/css/msw.css add at the end of the file:

#scroll {
    position:fixed;
    right:10px;
    bottom:10px;
    cursor:pointer;
    width:50px;
    height:50px;
    background-color:#3498db;
    text-indent:-9999px;
    display:none;
    -webkit-border-radius:5px;
    -moz-border-radius:5px;
    border-radius:5px;
    z-index: 999;
}
#scroll span {
    position:absolute;
    top:50%;
    left:50%;
    margin-left:-8px;
    margin-top:-12px;
    height:0;
    width:0;
    border:8px solid transparent;
    border-bottom-color:#ffffff
}
#scroll:hover {
    background-color:#7851af;
    opacity:1;
    filter:"alpha(opacity=100)";
    -ms-filter:"alpha(opacity=100)";
}
#scroll:visited {
    background-color:#7851af;
    opacity:1;
    filter:"alpha(opacity=100)";
    -ms-filter:"alpha(opacity=100)";
}

And that's it. Now you don't have to "waste" your finger in your mobile screen to return to the top. wink

Go to topic
Go to post
SayWhatAgain @ 04-08-2018 18:45:02

Hi again! smile

I want to delete the access.php file, but as it says: "NOTE. You must create additional users in the admin area before removing this file or data in this file
  or else you will not be able to access the system."

I've checked all the admin area, and I didn't found where I could create any user.

Would you mind to show me? Thanks

Go to topic
Go to post
SayWhatAgain @ 04-08-2018 17:41:04

Hi everyone!

If you want to update the Google Maps Link that shows in any event, you have to:

In control/userdef.php find:

/* MAPS LINK FOR EVENTS
   Replace variable where location should appear
-----------------------------------------------------*/

define('MAP_LINK', 'https://www.google.com/maps/place/{location}');

And replace it with:

/* MAPS LINK FOR EVENTS
   Replace variable where location should appear
-----------------------------------------------------*/

define('MAP_LINK', 'https://maps.google.com/?q={location}');

Save and replace the original file.

Now the link open in a new window with the correct location in the map.

Go to topic
Go to post
SayWhatAgain @ 01-05-2018 10:01:38

Hi again,

if you set in Admin CP the Week Star on Monday, the "View by Day calendar" gets an error that doesn't happen when you select on Sunday.

At the bottom of the calendar, in the clearer numbers of April (that belong to first week of May) the calendar shows an extra day (the 7th of May).

Pic related:

https://s9.postimg.cc/idkxh3een/extraday.png

Go to topic
Go to post
SayWhatAgain @ 30-04-2018 18:52:52

Hi (yes, me again),

if in Admin CP you enter a text in Meta Description, the text don't appear in the 'meta property="og:description"' / 'meta itemprop="description"' part.

if in Admin CP you enter a text (or the keywords) in Meta Keywords, the keywords you enter appear in the 'meta property="og:description"' / 'meta itemprop="description"' part, and the 'meta name="keywords"' don't appear.

Go to topic
Go to post
SayWhatAgain @ 30-04-2018 18:07:26

Hi  once more wink

when an event is posted, the default image of FB/Google meta is shown.

The event always have an image (or more), and I thought that it'll be great if the script takes the first image uploaded for the event and uses it as the image of FB/Google meta.

And if you could set the default image for FB and Google through the admin section, it'll impressive. smile

Go to topic
Go to post
SayWhatAgain @ 30-04-2018 16:33:26

Well, I still have it, and found a 'solution'

In control/system/global.php find:

for ($i=$DT->date('Y', $DT->ts()); $i<($DT->date('Y', $DT->ts()) + $SETTINGS->yearshow); $i++) {
      $tpl->assign('NAV_EVENTS_' . $i, (isset($HTML) && method_exists($HTML, 'navyears') ? $HTML->navyears(array('yr' => $i, 'cal' => $msw_calendar, 'cal2' => $msw_calendar2)) : ''));
      $offCanvasState['y' . $i] = (isset($sspanel) && $sspanel == 'y' . $i ? ' in' : '');
    }

and replace it with:

if (isset($DT) && method_exists($DT, 'ts')) {
    for ($i=$DT->date('Y', $DT->ts()); $i<($DT->date('Y', $DT->ts()) + $SETTINGS->yearshow); $i++) {
      $tpl->assign('NAV_EVENTS_' . $i, (isset($HTML) && method_exists($HTML, 'navyears') ? $HTML->navyears(array('yr' => $i, 'cal' => $msw_calendar, 'cal2' => $msw_calendar2)) : ''));
      $offCanvasState['y' . $i] = (isset($sspanel) && $sspanel == 'y' . $i ? ' in' : '');
    }
}

Now the 404 error page appears. Hope my 'solution' it's OK with the other parts of the script

Go to topic
Go to post
SayWhatAgain @ 29-04-2018 10:36:34

Hi again, I'm still testing all wink

When I try to use the Footer's Contact Form, this appears in errors.log:

[Error Code: 2] include(/(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/classes/class.cleantalk.php) [<a href='0function.include0'>function.include0</a>]: failed to open stream: No such file or directory
[Date/Time: 29 April 2018 @ 12:24PM]
[Error on line 585 in file /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/_ajax.php]
- - - - - - - - - - - - - - - - - - -
[Error Code: 2] include() [<a href='0function.include0'>function.include0</a>]: Failed opening '/(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/classes/class.cleantalk.php' for inclusion (include_path='.:/usr/share/php')
[Date/Time: 29 April 2018 @ 12:24PM]
[Error on line 585 in file /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/_ajax.php]

And this from fatal_errors.log:

[Error Code: 1] Uncaught Error: Class 'cleanTalk' not found in /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/_ajax.php:586
Stack trace:
#0 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system-load.php(13): include()
#1 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/index.php(38): include('/(censured)/(censured)/vhosts...')
#2 {main}
  thrown
[Date/Time: 29 April 2018 @ 12:24PM]
[Fatal error on line 586 in file /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/_ajax.php]

The message it's not sent, and the square spinner keeps spinning.

Thanks again for all.

Go to topic
Go to post
SayWhatAgain @ 29-04-2018 09:00:23

Hi again,

if I test the iCal file of an event with a validator ( https://icalendar.org/component/com_icalvalidator ),  it shows an error:

Errors
Lines not delimited by CRLF sequence near line # 1
Reference: RFC 5545 3.1. Content Lines

If I open the iCal file with Notepad++, and use EOL Conversion to windows, save it and check it, the validator says it's all ok.

So my question is if the iCal file it's OK, or it's a Windows problem?

Thanks.

Go to topic
Go to post
SayWhatAgain @ 28-04-2018 18:16:40

Hi again,

if I try to accessa an invented folder like:

https://www.example.com/events/INVENTED_FOLDER

instead of the 404 web, I get this error:

Notice: Undefined variable: DT in /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/global.php on line 111

Fatal error: Uncaught Error: Call to a member function date() on null in /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/global.php:111 Stack trace: #0 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/headers/404.php(9): include() #1 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/classes/system/class.rewrite.php(148): include('/(censured)/(censured)/vhosts...') #2 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/controllers.php(105): modrw->parser() #3 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/init.php(52): include('/(censured)/(censured)/vhosts...') #4 /(censured)/(censured)/vhosts/(censured)/httpdocs/events/index.php(30): include('/(censured)/(censured)/vhosts...') #5 {main} thrown in /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/system/global.php on line 111

errors.log shows no error at all

Go to topic
Go to post
SayWhatAgain @ 23-04-2018 16:46:32

Hi again,

I write this here to any person who have a problem with the disqus comment system inside the Maian Events.

If you see the warning:
"We were unable to load Disqus. If you are a moderator please see our troubleshooting guide."

yo have to edit the disqus.htm file (content > _theme_dafult > html). Replace the original:

<div id="disqus_thread"></div>

         <script>
          //<![CDATA[
          var disqus_shortname   = '{short_name}';
          var disqus_identifier  = 'msw_product_{id}';
          var disqus_url         = '{url}';
          var disqus_category_id = '{category}';

          (function() {
            var dsq   = document.createElement('script');
                  dsq.type  = 'text/javascript';
                  dsq.async = true;
            dsq.src   = '//' + disqus_shortname + '.disqus.com/embed.js';
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
           })();
           //]]>
         </script>

         <p><a href="http://disqus.com" class="dsq-brlink" rel="nofollow"><span class="logo-disqus">Disqus</span></a></p>

with:

<div id="disqus_thread"></div>
        <script>
          //<![CDATA[
            var disqus_config = function () {
            this.page.url = '{url}';
            this.page.identifier = 'msw_product_{id}';
            };
            (function() { // DON'T EDIT BELOW THIS LINE
            var d = document, s = d.createElement('script');
            s.src = 'https://{short_name}.disqus.com/embed.js';
            s.setAttribute('data-timestamp', +new Date());
            (d.head || d.body).appendChild(s);
            })();
           //]]>
         </script>
        <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
         <p><a href="http://disqus.com" class="dsq-brlink" rel="nofollow"><span class="logo-disqus">Disqus</span></a></p>

Save it, and check if the comments load OK.

Go to topic
Go to post
SayWhatAgain @ 23-04-2018 16:28:14

Hi,

I have an error with Cleantalk and Maian Events.

If I turn on Cleantalk, guests can't add new events. When they submit the new event the square spinner appears and nothing happens.
These errors show up in the error.log:

[Error Code: 2] Missing argument 2 for dt::date(), called in /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/classes/system/class.cleantalk.php on line 33 and defined
[Date/Time: 23 April 2018 @ 17:12PM]
[Error on line 24 in file /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/classes/system/class.datetime.php]
- - - - - - - - - - - - - - - - - - -
[Error Code: 8] Undefined variable: ts
[Date/Time: 23 April 2018 @ 17:12PM]
[Error on line 25 in file /(censured)/(censured)/vhosts/(censured)/httpdocs/events/control/classes/system/class.datetime.php]

If I turn off Cleantalk, events are added without problem.

Thanks for your time and work.

Go to topic
Go to post

 

100% Free SoftwareSoftware Versions, Development, Docs & UpgradesHostingNewsletter
Made with in the U.K & Hong Kong

Free PHP Scripts / Responsive PHP Scripts / Lightweight PHP Scripts / White Label PHP Scripts