Ravens PHP Scripts: Forums
 

 

View next topic
View previous topic
Post new topic   Reply to topic    Ravens PHP Scripts And Web Hosting Forum Index -> RavenNuke(tm) v2.5x
Author Message
neralex
Site Admin



Joined: Aug 22, 2007
Posts: 1772

PostPosted: Sun Jun 23, 2013 8:29 am Reply with quote

We all know it, if we are post a link to a website in facebook or google+, then we get a selection of images. In the most cases we get not the right image or sometimes no image.

Facebook and Google+ use the meta tags from the Open Graph but these tags are not valid and i have searched in the last time for a simple solution to use it.

Code:
<meta property="og:title" content="..." />

<meta property="og:image" content="..." />
<meta property="og:description" content="..." />
<meta property="og:url" content="..." />


After a some tests i have found a solution to create the meta tag only if facebook or google+ is scanning the website if you have posted a link to your website.

I have started with the mimetype.php in the includes folder and have changed this one:

php Code:
if(!isset($dhMETA)) $dhMETA = array('title' => array(1 => ''));


to this:

php Code:
if(!isset($dhMETA)) {

$dhMETA = array(
'title' => array(1 => ''),
'DESCRIPTION' => array(1 => '')
);
}


After that I have created a global called $og_image. With this global I will create later my images for the links. And I have also added the global $nukeurl to get the full image-path.

Code:
global $og_image, $nukeurl;


With the following preg_match I have to check now the browser-agent to set my meta tags only if facebook and google+ scanning the site while posting a link:

php Code:
if(preg_match('/facebookexternalhit/',$_SERVER['HTTP_USER_AGENT']) || preg_match('/developers.google.com/',$_SERVER['HTTP_USER_AGENT'])) {

echo '<meta property="og:title" content="' , $dhMETA['title'][1] , '" />' , PHP_EOL
, '<meta property="og:description" content="' , $dhMETA['DESCRIPTION'][1] , '" />' , PHP_EOL
, '<meta property="og:url" content="' . (empty($_SERVER['HTTPS']) ? 'http' : 'https') . '://' , $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] , '" />' , PHP_EOL;
if(preg_match('/facebookexternalhit/',$_SERVER['HTTP_USER_AGENT'])) {
echo '<meta property="fb:app_id" content="1234567890" />' , PHP_EOL
, '<meta property="og:image:width" content="800" />' , PHP_EOL
, '<meta property="og:image:height" content="800" />' , PHP_EOL;
}
if(defined('HOME_FILE')) {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_index.jpg" />' , PHP_EOL;
} elseif($name == 'Legal') {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_legal.jpg" />' , PHP_EOL;
} elseif(defined('NEWS_ARTICLE')) {
if($og_image != '') {
echo '<meta property="og:image" content="' , $og_image , '" />' , PHP_EOL;
} else {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_other.jpg" />' , PHP_EOL;
}
} else {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_other.jpg" />' , PHP_EOL;
}
}


Now I have a separate determinded image-link for the index, the Legal module, a defined area called 'NEWS_ARTICLE' and for all other sites without a definition of a image-link.

Edit 16.09.2016:

Since some months you have to create a simple app in the developer-area of facebook where you have to add your website url to get a fb:app_id. This fb:app_id should be placed before the og:image property.
[ Only registered users can see links on this board! Get registered or login! ]

Also is it recommended to add values of width and height for the og:images. My values of 800 are only examples. It should be values which you are using for your images. The best experience I get currently with square-sizes between 800 and 1000 or with rectangular-sizes with width: 1200 and height: 900. My suggestion is, along this example with the using of the topic images, to upload topic images with a larger and unique size for all images. but this would be need to add some css-restrictions to prevent an overlapping of the topic-images in your theme.

Edit 06.11.2016: added property="og:url"

To use now my global $og_image I have added the global in the header.php in function head at the end of the global line.

Then I have made some changes in the article.php of the News module after get_lang($module_name);:

php Code:
define('NEWS_ARTICLE', true);


Find in article.php:

php Code:
getTopics($sid);


Place this line above the header-include like this and make sure that you doesn't have this line twice in this file:

php Code:
getTopics($sid);

include_once('header.php');


Between getTopics($sid); and the header-include I have added the following lines to build my og_image based on the topic image:

php Code:


getTopics($sid);

global $og_image;
if($tipath != '' && $topicimage != '') {
$og_image = $nukeurl . '/' . $tipath . $topicimage;
} else {
$og_image = '';
}

include_once('header.php');


I could now re-produce the building of the $og_image in every module with different paths and images.

Now my wish: It would be very cool to have in the next release an option like this. I have readed in the last weeks here, in the next release exists a new header class and i think it should not be the big issue to create an option to use the meta tags for the Open Graph if facebook or google+ scanning the site while posting a link.

To test the open graph meta tags you can use the debug-site from facebook: [ Only registered users can see links on this board! Get registered or login! ]

Working examples you can find on the following links:
[ Only registered users can see links on this board! Get registered or login! ] [ Only registered users can see links on this board! Get registered or login! ] [ Only registered users can see links on this board! Get registered or login! ]

Wink

_________________
Github: RavenNuke

Last edited by neralex on Sun Nov 06, 2016 12:59 pm; edited 13 times in total 
View user's profile Send private message
spasticdonkey
RavenNuke(tm) Development Team



Joined: Dec 02, 2006
Posts: 1693
Location: Texas, USA

PostPosted: Sun Jun 23, 2013 1:11 pm Reply with quote

Cool stuff. I'll have to think a bit on exactly how this would plug into the next version; as mimetype.php no longer exists; and as you mentioned there is a new header class as well. It's likely that you will be able to do all of this within your theme. Adding custom meta tags would be as easy as:

global $header;
$header->addMeta('<meta property="og:image" content="..." />');

The logic for determining what you populate the meta content with may require edits elsewhere. The meta tags could also be added within a module, as long as it's before header.php is called.

The header class should support what you want to do. I doubt at this point we'll be able to add this functionality built-in; as we already have an entire summer's worth of work outlined. But it shouldn't be hard to accomplish as an addon or even added to the distro in a subsequent release.
 
View user's profile Send private message Visit poster's website
neralex







PostPosted: Mon Jun 24, 2013 7:35 am Reply with quote

Thanks for your reply, sounds really nice!
 
Guardian2003
Site Admin



Joined: Aug 28, 2003
Posts: 6799
Location: Ha Noi, Viet Nam

PostPosted: Mon Jun 24, 2013 9:14 am Reply with quote

As Spasticdonkey mentioned in his post, this sort of stuff will be much, much easier to do in RavenCMS thought the main problem might be how to actually populate the content attribute. If your code can obtain that value BEFORE calling header.php, then it is possible out-of-box to do what you need.

Unfortunately, the meta 'property' attribute is not W3C valid for HTML5 (RavenCMS tm will be HTML5 ready).
You could try instead to use the 'name' property
Code:
<meta name="og:title" content="Here is my content for facebook" />

I think 'name' validates in xHTML but not for HTML5.

Another option would be to change the doctype to xhtml+RDFa - this would probably get you validation in xHTML but not HTML5.
Please note that in RavenCMS (tm) you can actually alter the pages doctype on the fly (before header.php is called) so you could change the doctype really easily on a permanent basis, by theme, or by module.

A final, and possibly the only really foolproof option would be to do this; ( not tested but posted so you get the idea Wink
Code:


if(preg_match("facebookexternalhit", $_SERVER['HTTP_USER_AGENT'])){
 echo <meta property="og:title" content="..." />
<meta property="og:image" content="..." />
<meta property="og:description" content="..." />';
    }

So you basically look for facebook in the user agent string and only load your code for facebook.
If I knew what their UA string was, I could probably add that to our header class but again, you would need to have the content data available before calling header.php

*Posted edited by G to add additional information*
 
View user's profile Send private message Send e-mail
Guardian2003







PostPosted: Mon Jun 24, 2013 9:52 am Reply with quote

Sorry Neralex, I just read your post again and realised you were sniffing the UA string and already doing what I suggested in my post.
I would need to do some reasearch to see if there are any limits on the number of characters for 'content' and if there was a limit on image size but it should be easy to add a specific function for this in RavenCMS.
 
neralex







PostPosted: Mon Jun 24, 2013 1:57 pm Reply with quote

No problem. To sniff the User-Agent was the solution for me to use the meta tags without to break the validation. I have only builded a possible integration around for the og:image. Facebook cuts the descriptions, so is it not the problem to use the dhMETA description, how i have it described. The dhMETA description in RN have a own limit. To the limits for the images means facebook that should have a size of 200x200 px but i have it tested with smaller and also with larger images. Both is in facebook and Google+ possible. Google+ is using some other meta tags too and it seems currently Google+ have an issue with the descriptions in their API. But with the og:title and the og:image is all fine.
[ Only registered users can see links on this board! Get registered or login! ] [ Only registered users can see links on this board! Get registered or login! ]
 
Guardian2003







PostPosted: Mon Jun 24, 2013 3:29 pm Reply with quote

Thank you for the links, I have them bookmarked for reference so I'll have a look as soon as I have time.
Did you see the new admin panel we posted on Facebook? [ Only registered users can see links on this board! Get registered or login! ]
 
neralex







PostPosted: Tue Jun 25, 2013 4:57 am Reply with quote

Nice one! Smile
 
hicuxunicorniobestbuildpc
The Mouse Is Extension Of Arm



Joined: Aug 13, 2009
Posts: 1122

PostPosted: Wed Nov 13, 2013 6:12 am Reply with quote

Hi Neralex, I tried to follow your modifation and I am not so sure if I do it properly. Correct me if u see something wrong.

Open mimetype.php

Search for

Quote:
if(!isset($dhMETA)) $dhMETA = array('title' => array(1 => ''));


replace with

Quote:
if(!isset($dhMETA)) {
$dhMETA = array(
'title' => array(1 => ''),
'DESCRIPTION' => array(1 => '')
);
}


Right after this code above I insert global?

Quote:
if(!isset($dhMETA)) {
$dhMETA = array(
'title' => array(1 => ''),
'DESCRIPTION' => array(1 => '')
);
}
global $og_image, $nukeurl;
if (preg_match('/facebookexternalhit/',$_SERVER['HTTP_USER_AGENT']) || preg_match('/developers.google.com/',$_SERVER['HTTP_USER_AGENT'])) {
echo '<meta property="og:title" content="' , $dhMETA['title'][1] , '" />' , PHP_EOL
, '<meta property="og:description" content="' , $dhMETA['DESCRIPTION'][1] , '" />' , PHP_EOL;
if (defined('HOME_FILE')) {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_index.jpg" />' , PHP_EOL;
} elseif ($name == 'Legal') {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_legal.jpg" />' , PHP_EOL;
} elseif (defined('NEWS_ARTICLE')) {
if ($og_image != '') {
echo '<meta property="og:image" content="' , $og_image , '" />' , PHP_EOL;
} else {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_other.jpg" />' , PHP_EOL;
}
} else {
echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_other.jpg" />' , PHP_EOL;
}
}


then I open header.php

Search for

Quote:
function head() {
global $slogan, $sitename, $banners, $nukeurl, $Version_Num, $artpage, $topic, $hlpfile, $user, $hr, $theme, $cookie, $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $textcolor1, $textcolor2, $forumpage, $adminpage, $userpage, $pagetitle, $name, $db, $prefix, $nukeNAV;


Replace global with

Quote:
function head() {
global $slogan, $sitename, $banners, $nukeurl, $Version_Num, $artpage, $topic, $hlpfile, $user, $hr, $theme, $cookie, $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $textcolor1, $textcolor2, $forumpage, $adminpage, $userpage, $pagetitle, $name, $db, $prefix, $nukeNAV, $og_image;


I open article.php in News module

Search for

Quote:
get_lang($module_name);


Add after

Quote:
define('NEWS_ARTICLE', true);


I Searched for

getTopics($sid)

but unfortunately I coudn't find it in article.php.

This part is not clear to me but if have time will be nice to give us more details or maybe to share the files u have been mod so I can compare it. Thanks in advance.

Quote:
Now i have a separate determinded image-link for the index, the Legal module, a defined area called 'NEWS_ARTICLE' and for all other sites without a definition of a image-link.

To use now my global $og_image i have added the global in the header.php in function head at the end of the global line.

Then i have made some changes in the article.php of the News module after get_lang($module_name);:


Did u mean articlebox.php?
Shocked
 
View user's profile Send private message
neralex







PostPosted: Wed Nov 13, 2013 9:53 am Reply with quote

hicuxunicorniobestbuildpc, in the articlebox it makes really no sense because facebook would never use it.

This was an example for the core version of the News module and not for my news-mod, that you are using. In my news-mod i haven't use this mainfile based function. But I don't want give more details here in this thread to add this example in my news-mod. If someone is using my news-mod and want add it, he can contact me over my website. But you know exactly why you don't get support from me and i don't want repeat it.
 
draxx
Involved
Involved



Joined: Nov 19, 2003
Posts: 282

PostPosted: Fri Nov 15, 2013 2:50 am Reply with quote

Hey Narelex - I like this idea but I am confused about a couple things:

What file does this go?

Code:
global $og_image, $nukeurl;



What file does this go?
Code:
if (preg_match('/facebookexternalhit/',$_SERVER['HTTP_USER_AGENT']) || preg_match('/developers.google.com/',$_SERVER['HTTP_USER_AGENT'])) {

   echo '<meta property="og:title" content="' , $dhMETA['title'][1] , '" />' , PHP_EOL
      , '<meta property="og:description" content="' , $dhMETA['DESCRIPTION'][1] , '" />' , PHP_EOL;
   if (defined('HOME_FILE')) {
      echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_index.jpg" />' , PHP_EOL;
   } elseif ($name == 'Legal') {
      echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_legal.jpg" />' , PHP_EOL;
   } elseif (defined('NEWS_ARTICLE')) {
      if ($og_image != '') {
         echo '<meta property="og:image" content="' , $og_image , '" />' , PHP_EOL;
      } else {
         echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_other.jpg" />' , PHP_EOL;
      }
   } else {
      echo '<meta property="og:image" content="' , $nukeurl , '/images/og_image_other.jpg" />' , PHP_EOL;
   }
}
 
View user's profile Send private message
neralex







PostPosted: Fri Nov 15, 2013 8:01 am Reply with quote

both in mimetype.php
 
draxx







PostPosted: Sun Nov 17, 2013 4:32 pm Reply with quote

As I sat down to implement this change I became curious about the article.php modification.

Where does $topicimage come from?

Is this the image assigned to the topic category or is this an image that was displayed within the article itself?

The reason I ask because that is what it seems to be doing - so the problem I think I have is my topic images are all 50 x 50.
 
neralex







PostPosted: Sun Nov 17, 2013 10:04 pm Reply with quote

The variable $topicimage comes from the function call of the mainfile based function getTopics($sid) and its passed in the function themearticle(...). Follow this variable through your theme and you will find the way of using of this variable in the functions of the theme.php. The using is different in the themes. Compare the stock themes of RN.

To the image size: its only a example to show what is possbile. But what are you doing with the topicimage or with another image ... that is your part Smile


Last edited by neralex on Sat Sep 17, 2016 5:23 am; edited 1 time in total 
neralex







PostPosted: Sat Sep 17, 2016 3:08 am Reply with quote

In order of the request to add also the $informant (Author) of each article you can add it along this way:

Open includes/mimetype.php:

find:

php Code:
if(!isset($dhMETA)) {

$dhMETA = array(
'title' => array(1 => ''),
'DESCRIPTION' => array(1 => '')
);
}


replace:

php Code:
if(!isset($dhMETA)) {

$dhMETA = array(
'title' => array(1 => ''),
'DESCRIPTION' => array(1 => ''),
'AUTHOR' => array(1 => '')
);
}


find:

php Code:
global $og_image, $nukeurl;


replace:

php Code:
global $og_image, $nukeurl, $article_author;


add after:

php Code:
if(defined('NEWS_ARTICLE') && $article_author != '') {

echo '<meta name="author" content="' , $article_author , '" />' , PHP_EOL;
} else {
echo '<meta name="author" content="' , $dhMETA['AUTHOR'][1] , '" />' , PHP_EOL;
}


Save and close mimetype.php!

Open includes/nukeSEO/nukeSEOdh.php:

find:

php Code:
$skiptags = array('title', 'GENERATOR', 'Content-Type');


replace:

php Code:
$skiptags = array('title', 'GENERATOR', 'Content-Type', 'AUTHOR');


Save and close nukeSEOdh.php!


Open modules/News/article.php:

find:

php Code:
$informant = $row['informant'];


add after:

php Code:
global $article_author;

$article_author = $row['informant'];


Save and close article.php!

...done! Wink


Last edited by neralex on Sun Nov 06, 2016 8:28 am; edited 1 time in total 
kenspa
Hangin' Around



Joined: Sep 24, 2005
Posts: 48
Location: Spain

PostPosted: Sat Nov 05, 2016 1:33 pm Reply with quote

Hi,

I'm using ravennuke 2.51. I must have left something out to modify.

I used [ Only registered users can see links on this board! Get registered or login! ] also and my surprise was to see the image that I placed in the og:image correctly, but when I turn to news article to share on fb, the image shown is from a different mod which has nothing to do with the news mo

Any hints will be much appreciated
Cheers Smile
 
View user's profile Send private message
neralex







PostPosted: Sun Nov 06, 2016 1:53 am Reply with quote

Without to see your code I guess the $og_image variable in the article.php is not filled correctly. Search the variable in this file and check if the variable is defined BEFORE the include of the header.php! If yes, then set an echo after the if-statement.

php Code:
if(is_admin($admin)) {

echo $og_image.' = article-output<br/>';
}


Compare the output. If the output is correct then open the mimetype.php, set the same echo after global $og_image and reload the article-page.

php Code:
if(is_admin($admin)) {

echo $og_image.' = mimetype-output<br/>';
}


Normally you should get the same URL twice. If not, then you must have left something out to modify.
 
kenspa







PostPosted: Sun Nov 06, 2016 7:45 am Reply with quote

Thank you so much neralex.

I have the same feeling that the $og_image is not filled or defined correctly, before include_once('header.php'); I didn't have it, so I added
$og_image = $nukeurl . '/imgdir/imgnews/'; just before the header.
Then added echos on both article.php and mimetype.php

The issue did not change, still having different images from video_streming mod for my news article. BTW, I'm using news mod included with raven 2.51

And fb debugger always gives me this warning:
Inferred Property The 'og:url' property should be explicitly provided, even if a value can be inferred from other tags.

My apologies if I'm not being smarter to handle this Idea
 
neralex







PostPosted: Sun Nov 06, 2016 8:12 am Reply with quote

php Code:
$og_image = $nukeurl . '/imgdir/imgnews/';


This can't work because you need the full path to the image. This only the path to the directory where the images are stored.

This is the way for the article.php from the first post of this thread.

Code:
global $og_image;

if ($tipath != '' && $topicimage != '') {
   $og_image = $nukeurl . '/' . $tipath . $topicimage;
} else {
   $og_image = '';
}


The variable $tipath is the foldername of the topic images and the variable $topicimage is the filename of the topic image, which is used by the article. Can you tell me how you have stored your news-images or how do you want use it? What is your identifier to get the right image for each article in the /imgnews/ folder? Do you have created a new field in the _stories database-table where the filename is stored or do you have stored images with their unique id as filename?

og:url issue:

Thank you for the hint, I added this in the first post.

find in mimetype.php:

php Code:
	echo '<meta property="og:title" content="' , $dhMETA['title'][1] , '" />' , PHP_EOL

, '<meta property="og:description" content="' , $dhMETA['DESCRIPTION'][1] , '" />' , PHP_EOL;


replace it with:

php Code:
	echo '<meta property="og:title" content="' , $dhMETA['title'][1] , '" />' , PHP_EOL

, '<meta property="og:description" content="' , $dhMETA['DESCRIPTION'][1] , '" />' , PHP_EOL
, '<meta property="og:url" content="' . (empty($_SERVER['HTTPS']) ? 'http' : 'https') . '://' , $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] , '" />' , PHP_EOL;
 
kenspa







PostPosted: Sun Nov 06, 2016 12:06 pm Reply with quote

Hi neralex and thanks again for your great support. Honestly and initially, I was hoping that fb sharer will give you the option to choose which pic you want it to appear on the shared link by simply providing the image directory where all pics related to the news articles are uploaded and stored without the need to create that new row in sql (which might suppose altering a lot of functionality in the mod). Therefore, I have no identifier for the images.

After your indications, I alternate putting
Quote:
php Code:
global $og_image;

if ($tipath != '' && $topicimage != '') {
$og_image = $nukeurl . '/' . $tipath . $topicimage;
} else {
$og_image = '';
}


in article.php before the include_once('header.php'); and after getTopics($sid); coz this comes much later after including the header, with the same results. The strange thing, using the fb debugger the code is perfect, but when you share then a different image appear on the share as I described in my first post here. That means Facebook sharer looks for any image from whatever directory and takes it for that purpose, and it's always the same pic for the same article!!

The idea of creating a new sql field for the related images was in mind, but let's see if I could stop fb sharer taking those pics for the news article first.

The added "og:url" solved the warning thing Smile

I've already emailed you the two files in rar. You will see the $og_image in two different places where I tried them both.
 
neralex







PostPosted: Sun Nov 06, 2016 12:29 pm Reply with quote

Nice hope but this not so easy to realize because the News module doesn't have a option to upload a unique image for each article. This needs a lot of new things in the News module. I have this done for some of my customers but this is not available for free. Basically, this modification works only on the server-side and it provides the data for the sharing-dialog. All needed data must be prepared for that otherwise FB will grab other images which are placed on the shared URL. There is no way to choose images after FB has scanned the shared URL.

The only way, without to expand the modification, is the removing of the code around the $og_image variable in the article.php. In this case the $og_image will be empty and the generic image will be used, which is used for all other undefined areas.

Edit: I had noticed now that getTopics($sid); is placed in the non-modded News module in RN251 after the header-include. It should be moved over the header-include. I will add it in the first post. In this case you could use the topic images.


Last edited by neralex on Thu Nov 17, 2016 5:25 pm; edited 1 time in total 
kenspa







PostPosted: Sun Nov 06, 2016 2:00 pm Reply with quote

Thanks for the help, I will remove all the pics from server where fb is taking them for the share, scrape my url using fb debug tool and wait to see if at least no pic will pop up on the share!!
I did what you said
Quote:
The only way, without to expand the modification, is the removing of the code around the $og_image variable in the article.php. In this case the $og_image will be empty and the generic image will be used, which is used for all other undefined areas.

Edit: I had noticed now that getTopics($sid); is placed in the non-modded News module in RN215 after the header-include. It should be moved over the header-include. I will add it in the first post. In this case you could use the topic images.
But nothing..

I'll keep on this till get no pic at all at least!

Confused
 
neralex







PostPosted: Thu Nov 17, 2016 5:27 pm Reply with quote

kenspa, it seems there are some other issues on your end. Without to check all affected files, is it hard understand there your issue is based. I sent an email to you.
 
kenspa







PostPosted: Sat Nov 19, 2016 12:07 pm Reply with quote

Hi neralex. Just seen your message. Sorry, I was away for work.
Well, I think I got this solved. I noticed that all pics that fb was using had full path stored in sql table. Just made the changes there replacing the full path into something more common in sql and of course had to modify the mod where all those pics were needed and done!! I already created some pics intended for use on the shares, and pointed the fb sharer to use them. It worked although there is still something wrong on this. I'll get back to you when shortly.

Many thanks for your help

Cheers
 
Display posts from previous:       
Post new topic   Reply to topic    Ravens PHP Scripts And Web Hosting Forum Index -> RavenNuke(tm) v2.5x

View next topic
View previous topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You can attach files in this forum
You can download files in this forum


Powered by phpBB © 2001-2007 phpBB Group
All times are GMT - 6 Hours
 
Forums ©