Keyword

Advanced Search

Search Results (Searched for: How do I check K2 version)

  • Individual IT
  • Individual IT's Avatar
28 Dec 2017 06:57
Replied by Individual IT on topic Tool for importing / exporting items to / from K2

Tool for importing / exporting items to / from K2

Category: English K2 Community

A new version of the tool is online: www.individual-it.net/en/Joomla/#27
The new version fixes a problem with K2 2.8.0 and does show less/no strict standard issues

If you already purchased the extension in the past, please check if your download link is still active. With an active download link you can download the new version free of cost.
  • Gergely Csapó
  • Gergely Csapó's Avatar
26 Dec 2017 00:18
K2 page is not available was created by Gergely Csapó

K2 page is not available

Category: English K2 Community

Hello

I wanted to download K2 from getk2.org but I get this message continuously:

This page (getk2.org/downloads/?f=K2_v2.8.0.zip) is currently offline. However, because the site uses Cloudflare's Always Online™ technology you can continue to surf a snapshot of the site. We will keep checking in the background and, as soon as the site comes back, you will automatically be served the live version. Always Online™ is powered by Cloudflare | Hide this Alert

Is there any known issue? Is there any alternative link where I could get K2 extension?

Thanks!
  • Lisa
  • Lisa's Avatar
28 Nov 2017 18:18 - 28 Nov 2017 18:37

If K2 Content Module In Item View, Don't Show Current Item

Category: English K2 Community

Hi everyone,

I want to show the mod_k2_content module in Item View (to provide interesting other content to readers). You can imagine that it would be of little value to provide another preview/link to the current item. However, there's no filtering option for this built-in to K2.

I tried some stuff but I just don't get it to work. Here's what I tried - I'm in modules/mod_k2_content/helper.php (since this seems to be where the content query is filtered) and added the following between the filtering and the ordering (around line 200 in my version of K2):
 // hide items identical to current if in item view if($option=='com_k2' && $view=='item'){ $query .= " AND i.id != ".$item->id; }

Anyone know why this doesn't work and if this is even the right approach? Or where else in the module code I could include a statement to compare the item IDs?

Thank you!!

PS.: Here's how a similar module does it for regular articles; not sure whether that helps:
 // check if the link is the same of the article activaly shown $css_active = ''; $option = $app->input->get('option'); $view = $app->input->get('view'); if ($option === 'com_content' && $view === 'article') { $current_id = $app->input->getInt('id'); if ($current_id == $item->id) { $css_active = ' active'; } }
  • Vlask
  • Vlask's Avatar
14 Sep 2017 23:07 - 14 Sep 2017 23:17

K2 2.8 - cant edit or delete date in extra fields

Category: English K2 Community

Checked it in opera developer mode and this is what it shows. Looks like its set to read only mode. Error in some not updated file, or customized css from previous version missing some lines?

Tried to delete readonly parameter in developer mode and line is editable and can be deleted. Just don't know right now if problem is on my side or in latest version and where to delete that readonly parameter to make it permanent....

screenshot
  • Michael Monteith
  • Michael Monteith's Avatar
06 Jul 2017 18:58
Stuck at Joomla 3.6.5. Cannot Update was created by Michael Monteith

Stuck at Joomla 3.6.5. Cannot Update

Category: English K2 Community

I've come back to this to try again and still frustrated to no end. I've spent at least 3 full days off and on trying different things. I have a couple of sites that breaks every time I try to update to Joomla 3.7.3. I think my previous attempts were to 3.7.1 I think. Well, in any case as soon as I do the update the home page and all pages seem to loose their framework. I'm using K2. I've removed about all other extensions and still keep my site working. I just can't upgrade Joomla. I've done database checks, clearing cache etc prior and after. Thank goodness for backup. I've tried automatic updates, manual updates, etc. I don't know if it's K2, Joomla, or the combination or what. If it was just my personal site only I'd trash it, do the update and start over. But it's also doing it on a club site I built for a club I'm in. It took me a long time getting the gallery of all their pics up and would be a huge investment in time trying to rebuild that all over. For some reason I can attach files to this. I was going to show before and after.

Here's some information. I'm running on Godaddy.
System Information
Setting Value

PHP Built On Linux a2plcpnl0394.prod.iad2.secureserver.net 2.6.32-673.26.1.lve1.4.25.el6.x86_64 #1 SMP Wed Apr 5 16:33:01 EDT 2017 x86_64
Database Version 5.6.35-cll-lve
Database Collation latin1_swedish_ci
Database Connection Collation utf8mb4_general_ci
PHP Version 5.6.30
Web Server Apache/2.4.25
WebServer to PHP Interface cgi-fcgi
Joomla! Version Joomla! 3.6.5 Stable [ Noether ] 1-December-2016 22:46 GMT
Joomla! Platform Version Joomla Platform 13.1.0 Stable [ Curiosity ] 24-Apr-2013 00:00 GMT
User Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
K2 - 2.7.1
Joomla 3.6.5

I'll try attaching the files again later.

It's either get past this or toss Joomla altogether. I mean I don't want to have to get to a point and have to rebuild a site all over when stuff like this happens. That or stay at the current version. Which I know will not work forever either.

Thanks
Michael
  • Kmedia
  •  Kmedia's Avatar
29 May 2017 13:23 - 01 Jun 2017 12:11
[SOLVED] K2 query (cache?) problem was created by Kmedia

[SOLVED] K2 query (cache?) problem

Category: English K2 Community

Hi, some time ago we started suffering slow queries on our production site. We tested the K2 query issue on separate workstation from exactly same tables and there caching and query execution seems to work fine.

However, the query takes long time in production database without exceptions. It seems like the query-cache doesn't work correctly. ( variable query_cache_type | ON ) slow-log says that typically query takes over 2 seconds.

Our site has constantly approx. 200-500 active users opening K2 items, some of those registered and thus going past cache.
Site has some 65 000 to 100 000+ page views daily.
We have 200 000+ K2 items and more added daily
Site has 3 minutes cache set

System info

PHP Built On Linux www 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64
Database Version 5.5.56-MariaDB
Database Collation latin1_swedish_ci
Database Connection Collation utf8mb4_general_ci
PHP Version 7.0.13-0ubuntu0.16.04.1
Web Server nginx/1.10.0
WebServer to PHP Interface fpm-fcgi
Joomla! Version Joomla! 3.6.4 Stable [ Noether ] 21-October-2016 16:33 GMT
Joomla! Platform Version Joomla Platform 13.1.0 Stable [ Curiosity ] 24-Apr-2013 00:00 GMT



I can send URLs and more details privately.

Query:
SELECT i.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as
categoryparams FROM xxx_k2_items as i RIGHT JOIN xxx_k2_categories AS c ON c.id = i.catid
WHERE i.published = 1 AND i.access IN(1,1) AND i.trash = 0 AND c.published = 1 AND c.access
IN(1,1) AND c.trash = 0 AND ( i.publish_up = '0000-00-00 00:00:00' OR i.publish_up <= '2017-
05-17 07:01:49' ) AND ( i.publish_down = '0000-00-00 00:00:00' OR i.publish_down >= '2017-05-
17 07:01:49' ) AND c.id IN (269,270,271,272,273,274,276,402) ORDER BY i.publish_up DESC
LIMIT 0, 15;

Test database:
Server: MariaDB
Server version: 10.1.22-MariaDB-1~xenial mariadb.org binary distribution
Protocol version: 10


At test database (with no external load) query times: 1.38s, 0s, 0s, 0s, 0s

Test database variables:

| query_alloc_block_size | 16384

| query_cache_limit | 131072

| query_cache_min_res_unit | 4096

| query_cache_size | 67108864

| query_cache_strip_comments | OFF

| query_cache_type | ON


Production database:
Server: MariaDB
Server version: 5.5.56-MariaDB MariaDB Server
Protocol version: 10


At production database query times: 3.23s, 2.89s, 2.99s, 2.93s, 2.78s


Production database variables:

| query_cache_limit | 33554432

| query_cache_min_res_unit | 4096

| query_cache_size | 134217728

| query_cache_strip_comments | OFF

| query_cache_type | ON

Slow log occurence (trigger time 2s)

SET timestamp=1495005105;
SET timestamp=1495005155;
SET timestamp=1495005174;
SET timestamp=1495005179;
SET timestamp=1495005220;
SET timestamp=1495005227;
SET timestamp=1495005256;
SET timestamp=1495005308;
SET timestamp=1495005333;
SET timestamp=1495005364;
SET timestamp=1495005366;
SET timestamp=1495005366;
SET timestamp=1495005398;
SET timestamp=1495005400;
SET timestamp=1495005434;
SET timestamp=1495005509;
SET timestamp=1495005536;
SET timestamp=1495005541;
SET timestamp=1495005550;
SET timestamp=1495005555;
SET timestamp=1495005557;
SET timestamp=1495005592;
SET timestamp=1495005612;
SET timestamp=1495005614;
SET timestamp=1495005622;
SET timestamp=1495005670;
SET timestamp=1495005681;
SET timestamp=1495005683;
SET timestamp=1495005687;
SET timestamp=1495005706;
SET timestamp=1495005715;
SET timestamp=1495005719;
SET timestamp=1495005727;
SET timestamp=1495005746;
SET timestamp=1495005748;
SET timestamp=1495005757;
SET timestamp=1495005763;
SET timestamp=1495005766;
SET timestamp=1495005769;

Profiled query information:
Running first time:
+
+
+
| Status | Duration |
+
+
+
| starting | 0.000024 |
| Waiting for query cache lock | 0.000004 |
| checking query cache for query | 0.000075 |
| checking permissions | 0.000004 |
| checking permissions | 0.000004 |
| Opening tables | 0.000016 |
| After opening tables | 0.000005 |
| System lock | 0.000006 |
| Table lock | 0.000003 |
| After table lock | 0.000004 |
| Waiting for query cache lock | 0.000003 |
| After table lock | 0.000017 |
| init | 0.000051 |
| optimizing | 0.000030 |
| statistics | 0.000173 |
| preparing | 0.000042 |
| executing | 0.000005 |
| Creating tmp table | 0.000249 |
| Copying to tmp table | 2.228058 |
| Sorting result | 0.505713 |
| Sending data | 0.000511 |
| end | 0.000010 |
| removing tmp table | 0.124335 |
| end | 0.000022 |
| query end | 0.000005 |
| closing tables | 0.000024 |
| freeing items | 0.000022 |
| updating status | 0.000045 |
| logging slow query | 0.000060 |
| cleaning up | 0.000006 |
+
+
+

Running second time:
+
+
+
| Status | Duration |
+
+
+
| starting | 0.000042 |
| Waiting for query cache lock | 0.000006 |
| checking query cache for query | 0.000104 |
| checking permissions | 0.000006 |
| checking permissions | 0.000006 |
| Opening tables | 0.000026 |
| After opening tables | 0.000006 |
| System lock | 0.000006 |
| Table lock | 0.000004 |
| After table lock | 0.000005 |
| Waiting for query cache lock | 0.000003 |
| After table lock | 0.000023 |
| init | 0.000065 |
| optimizing | 0.000039 |
| statistics | 0.000132 |
| preparing | 0.000043 |
| executing | 0.000005 |
| Creating tmp table | 0.000272 |
| Copying to tmp table | 2.357103 |
| Sorting result | 0.768763 |
| Sending data | 0.000117 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000099 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000065 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000113 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000032 |
| Waiting for query cache lock | 0.000004 |
| Sending data | 0.000251 |
| end | 0.000054 |
| removing tmp table | 0.127060 |
| end | 0.000023 |
| query end | 0.000006 |
| closing tables | 0.000119 |
| freeing items | 0.000024 |
| updating status | 0.000007 |
| Waiting for query cache lock | 0.000003 |
| updating status | 0.000040 |
| Waiting for query cache lock | 0.000004 |
| updating status | 0.000002 |
| storing result in query cache | 0.000040 |
| logging slow query | 0.000074 |
| cleaning up | 0.000007 |
+
+
+

When I tried to run it third time, the result was something similar to step one, thus running the query again instead of fetching cached results.

So, it seems that query cache is invalidated too frequently, may be due to the heavy use of k2_items and k2_categories tables.

Is there something we could do to get the cache working correctly and get less slow queries?

Thank you!
  • John Gerald
  • John Gerald's Avatar
25 Apr 2017 14:07
Removed Category But Still Showing was created by John Gerald

Removed Category But Still Showing

Category: English K2 Community

Good Day...

I have a large Joomla site with lots of items and categories.
I have a page that displays Gazebos and they are broken down into multiple categories (wooden, maintenance free, etc.).
I had a sub-category under Wooden category that was called "Knotty Cedar".
I have removed that Category from the system and have checked the database to insure it is actually gone but it is still showing up on the website (see attached).
I did check the Menu item and it is setup to display category "Wooden" and child categories. In this case the child category "Knotty Cedar" no longer exists but it somehow still showing up on the site (see attached).
I have cleared the server cache several times and still it is showing. The links no longer work but the category should not be showing at all.
Can you please help me with this?

Note:
I did export the database to a text file and did a full search to insure "Knotty Cedar" had been fully removed and it is clean.
Joomla Version: 3.6.5
K2 Version: 2.7.2
K2 Store Pro: 3.8.3

Screen Shots:
imgur.com/gijg8Jj
imgur.com/a/4kIb1


Thanks for any help or ideas on this issue.
John
  • Paul Hutchins
  • Paul Hutchins's Avatar
19 Apr 2017 21:51
K2 with RAXO modules was created by Paul Hutchins

K2 with RAXO modules

Category: English K2 Community

I have checked your topics for the problems I have having with the upgrade to K2.

Joomla Version 3.6.5 Dev 2016.

Last weekend I upgraded my site with K2 for use with the RAXO modules.

I carried out the following:-

1. Imported all existing Joomla content to K2
2. All contract could be seen on the K2 schedule page
3. When I clicked on a title it would not open and I received an error message "Error decoding JSON data Syntax error.
4. Found on your site a fix to change the
Step 1: Edit "(JOOMLA_PATH)/libraries/vendor/joomla/registry/src/Registry.php"
Step 2:
In line 366 replace:
$obj = $handler->stringToObject($data, $options);
to
$obj_count = json_decode($data);
if(count($obj_count) > 0) {
$obj = $handler->stringToObject($data, $options);
} else {
$obj = $obj_count;
}


5. This allowed me to have access to the content, however I could then not open up any of the extension modules for my site.

6. The system then became unstable and I had to restore it from a system backup.

I like you product and think K2 makes Joomla so much better. Can you please help.

Regards
  • Scott Oman
  • Scott Oman's Avatar
30 Dec 2016 16:49

Captcha * disabled but text still visible on some pages

Category: English K2 Community

Unfortunately I'm doing the best I can but just don't have the expertise to really understand how to know whether or not it's hard-coded in the template.

You could be 100% right. I checked everything that I could think of myself.

There's nothing that seems to disable the captcha entirely. I can disable the system captcha and k2 captcha, but the html captcha text still remains when I do.

I think it is fine for my purposes, though being able to use captcha version 2 would certainly be a plus. It just doesn't appear in all areas of the site when I choose version 2 in system captcha plugin. Only version 1 will display everywhere for some strange reason.

Thanks for your help. Maybe I can shoot the template developers a message to see what they have to say.
  • George
  • George 's Avatar
16 Dec 2016 13:45 - 16 Dec 2016 13:47

New Items from 1 Category don't shoe up on front end

Category: English K2 Community

I have a big strange problem with a site with k2 2.7.1 and Joomla 3.6.5 (now but problem persists since 1st version of 3.6.x).
Server have PHP 5.3.29, MySQL 5.5.52-cll

The problem is that on only 1 category new items refuse to show on Front End. I deleted the category, recreated, made clean install of Joomla files and K2, checked DB, done everything. Checked if new items have language selected to ALL (even site is mono-language).

That items (articles) in that particular category refuse to display on front-end....

Any help please ..
  • Ignacio
  • Ignacio's Avatar
25 Nov 2016 11:37
Replied by Ignacio on topic Translation of Read more button

Translation of Read more button

Category: English K2 Community

Hi all, I don´t know if the problem with the "Read More" text translation is already fixed. I had the same problem and found out that the problem was not related to any K2 language file but to the component I used to show the module. Check other language files, in my case the component had only the English version so I had to manually change the text.
Hope it helps,
i.
  • Marco
  • Marco's Avatar
10 Nov 2016 16:46
Replied by Marco on topic png for K2

png for K2

Category: English K2 Community

Hello Krikor,

thank you for your quick reply. But that was not my question.
I mean, the plugin used to be very popular and now it looks like it is not supported anymore.
extensions.joomla.org/extension/png-for-k2-items

My question to the community was:
Is there any alternatives to get png-Images working
OR
does anybody know an solution, how to get that plugin working on the actual version of k2.

I attached the main php-File - maybe someone can help me.
plugins/k2/png4k2/png4k2.php
<?php /** * @version 1.0.5 * @package png4k2 (plugin) * @author JoomlaChamp - http://www.joomlachamp.com * @copyright Copyright (c) 2012 - 2014 Redpanda OE (redpanda.gr). * @license GPLv2 or later */ // no direct access defined('_JEXEC') or die('Restricted access'); // Load the K2 plugin API JLoader::register('K2Plugin', JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'k2plugin.php'); class plgK2Png4k2 extends K2Plugin { var $pluginName = 'png4k2'; var $pluginNameHumanReadable = 'Png images for K2 items'; var $_new = null; var $_old = null; function plgK2Png4k2(&$subject, $params) { $this->_new = new JObject; $this->_old = new JObject; parent::__construct($subject, $params); } function onBeforeK2Save(&$item, $isNew) { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); if($_FILES["image"] && $_FILES["image"]["error"] === 0) { $this->_new->ext = strtolower(end(explode(".",$_FILES["image"]["name"]))); $path_parts = pathinfo($_FILES["image"]["tmp_name"]); if($this->_new->ext!="jpg") { $curName = $path_parts['filename']; $copyName = "copy".$item->id."_".$path_parts['filename']; $fullName = str_replace($curName,$copyName,$_FILES["image"]["tmp_name"]); if(copy($_FILES["image"]["tmp_name"], $fullName)) { $_FILES["image-clone"] = $_FILES["image"]; $_FILES["image-clone"]["tmp_name"] = $fullName; } } } } function onAfterK2Save(&$item, $isNew) { jimport('joomla.filesystem.file'); jimport('joomla.filesystem.folder'); JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'tables'); require_once (JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'class.upload.php'); require_once (JPATH_SITE.DS.'plugins'.DS.'k2'.DS.'png4k2'.DS.'helpers'.DS.'gifsplit.php'); $db = JFactory::getDBO(); $files = JRequest::get('files'); $existingImage = JRequest::getVar('existingImage'); $params = JComponentHelper::getParams('com_k2'); if (($files['image-clone']['error'] === 0 || $existingImage) && !JRequest::getBool('del_image')) { // lets get in an array all the cur images $oldSrc = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'src'.DS.md5("Image".$item->id).'*'); $oldCache = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_*'); $oldImgs = array_merge((array)$oldSrc, (array)$oldCache); if(count($oldImgs)) { foreach($oldImgs as $oldImg) { JFile::delete($oldImg); } } if($existingImage) { $image = JPATH_SITE.DS.JPath::clean($existingImage); } if ($files['image-clone']['error'] === 0) { $image = $files['image-clone']; } $handle = new Upload($image); $handle->allowed = array('image/*'); $handle->no_upload_check = true; if ($handle->uploaded) { $errors = array(); $newImgs = array(); $isAnimated = false; //Image params $category = JTable::getInstance('K2Category', 'Table'); $category->load($item->catid); $cparams = class_exists('JParameter') ? new JParameter($category->params) : new JRegistry($category->params); if ($cparams->get('inheritFrom')) { $masterCategoryID = $cparams->get('inheritFrom'); $query = "SELECT * FROM #__k2_categories WHERE id=".(int)$masterCategoryID; $db->setQuery($query, 0, 1); $masterCategory = $db->loadObject(); $cparams = class_exists('JParameter') ? new JParameter($masterCategory->params) : new JRegistry($masterCategory->params); } $params->merge($cparams); //Original image $savepath = JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'src'; $handle->jpeg_quality = 100; $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = md5("Image".$item->id); $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for Source image"; } else { $newImgs[] = $handle->file_dst_pathname; } if($this->_isAnimatedGif($handle->file_dst_pathname)) $isAnimated = true; $filename = $handle->file_dst_name_body; $savepath = JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'; //XLarge image $handle->image_resize = true; $handle->image_ratio_y = true; $handle->jpeg_quality = $params->get('imagesQuality'); $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = $filename.'_XL'; if (JRequest::getInt('itemImageXL')) { $imageWidth = JRequest::getInt('itemImageXL'); } else { $imageWidth = $params->get('itemImageXL', '800'); } $handle->image_x = $imageWidth; $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for XL image"; } else { $newImgs[] = $handle->file_dst_pathname; } //Large image $handle->image_resize = true; $handle->image_ratio_y = true; $handle->jpeg_quality = $params->get('imagesQuality'); $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = $filename.'_L'; if (JRequest::getInt('itemImageL')) { $imageWidth = JRequest::getInt('itemImageL'); } else { $imageWidth = $params->get('itemImageL', '600'); } $handle->image_x = $imageWidth; $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for L image"; } else { $newImgs[] = $handle->file_dst_pathname; } //Medium image $handle->image_resize = true; $handle->image_ratio_y = true; $handle->jpeg_quality = $params->get('imagesQuality'); $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = $filename.'_M'; if (JRequest::getInt('itemImageM')) { $imageWidth = JRequest::getInt('itemImageM'); } else { $imageWidth = $params->get('itemImageM', '400'); } $handle->image_x = $imageWidth; $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for M image"; } else { $newImgs[] = $handle->file_dst_pathname; } //Small image $handle->image_resize = true; $handle->image_ratio_y = true; $handle->jpeg_quality = $params->get('imagesQuality'); $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = $filename.'_S'; if (JRequest::getInt('itemImageS')) { $imageWidth = JRequest::getInt('itemImageS'); } else { $imageWidth = $params->get('itemImageS', '200'); } $handle->image_x = $imageWidth; $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for S image"; } else { $newImgs[] = $handle->file_dst_pathname; } //XSmall image $handle->image_resize = true; $handle->image_ratio_y = true; $handle->jpeg_quality = $params->get('imagesQuality'); $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = $filename.'_XS'; if (JRequest::getInt('itemImageXS')) { $imageWidth = JRequest::getInt('itemImageXS'); } else { $imageWidth = $params->get('itemImageXS', '100'); } $handle->image_x = $imageWidth; $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for XS image"; } else { $newImgs[] = $handle->file_dst_pathname; } //Generic image $handle->image_resize = true; $handle->image_ratio_y = true; $handle->jpeg_quality = $params->get('imagesQuality'); $handle->file_auto_rename = false; $handle->file_overwrite = true; $handle->file_new_name_body = $filename.'_Generic'; $imageWidth = $params->get('itemImageGeneric', '300'); $handle->image_x = $imageWidth; $handle->Process($savepath); if (!$handle->processed) { $errors[] = "Error for Generic image"; } else { $newImgs[] = $handle->file_dst_pathname; } if ($files['image-clone']['error'] === 0) $handle->Clean(); // lets check what sizes will resize the animated gif $aniSizes = $this->params->get('png4k2_anisizes', ''); $aniSizes = explode(",",$aniSizes); $acSizes = array("XL","L","M","S","XS","Generic"); $resAniSizes = array_intersect($acSizes, $aniSizes); if(count($resAniSizes)) { $o = JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'src'.DS.$filename.'.gif'; foreach($resAniSizes as $aniSize) { $this->_scaleImageFile($o,$params->get('itemImage'.$aniSize),0,$savepath.DS.$filename."_".$aniSize.".gif",4); } } } //echo $handle->log; die(); } if(($_FILES["image"] && $_FILES["image"]["error"] === 0 && $this->_new->ext=="jpg") || JRequest::getBool('del_image')) { $extensions = array("gif","jpeg","png"); if(JRequest::getBool('del_image')) $extensions[] = "jpg"; $oldSrc = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'src'.DS.md5("Image".$item->id).'*.{'.implode(',',$extensions).'}', GLOB_BRACE); $oldCache = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'*.{'.implode(',',$extensions).'}', GLOB_BRACE); $oldImages = array_merge((array)$oldSrc, (array)$oldCache); if(count($oldImages)) { foreach($oldImages as $oldImage) { JFile::delete($oldImage); } } } } function onK2PrepareContent(&$item, &$params, $limitstart=0) { // do not exec for category objects if(!isset($item->catid)) return; //Image $item->imageXSmall = ''; $item->imageSmall = ''; $item->imageMedium = ''; $item->imageLarge = ''; $item->imageXLarge = ''; // image array $imgs = array(); $imgs["_XS"] = "imageXSmall"; $imgs["_S"] = "imageSmall"; $imgs["_M"] = "imageMedium"; $imgs["_L"] = "imageLarge"; $imgs["_XL"] = "imageXLarge"; $imgs["_Generic"] = "imageGeneric"; $date = JFactory::getDate($item->modified); $timestamp = '?t='.$date->toUnix(); $md5 = md5("Image".$item->id); $resultImages = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.$md5.'_*'); if(count($resultImages)) { foreach($resultImages as $resultImage) { foreach($imgs as $imgChar=>$imgValue) { $pos = stripos($resultImage, $imgChar); if ($pos !== false) { $info = pathinfo($resultImage); $item->$imgValue = JURI::root().'media/k2/items/cache/'.$md5.$imgChar.'.'.$info['extension']; if ($params->get('imageTimestamp')) { $item->$imgValue .= $timestamp; } } } } } $image = 'image'.$params->get('itemImgSize', 'Small'); if (isset($item->$image)) $item->image = $item->$image; } function onRenderAdminForm(&$item, $type, $tab = '') { if($type=="item") { $date = JFactory::getDate($item->modified); $timestamp = '?t='.$date->toUnix(); $resultLarge = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_L*.{gif,jpg,jpeg,png}', GLOB_BRACE); if(count($resultLarge)) { foreach($resultLarge as $large) { $info = pathinfo($large); $item->image = JURI::root().'media/k2/items/cache/'.md5("Image".$item->id).'_L.'.$info['extension'].$timestamp; } } $resultSmall = glob (JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache'.DS.md5("Image".$item->id).'_S*.{gif,jpg,jpeg,png}', GLOB_BRACE); if(count($resultSmall)) { foreach($resultSmall as $small) { $info = pathinfo($small); $item->thumb = JURI::root().'media/k2/items/cache/'.md5("Image".$item->id).'_S.'.$info['extension'].$timestamp; } } } } function _isAnimatedGif($filename) { return (bool)preg_match('#(\x00\x21\xF9\x04.{4}\x00\x2C.*){2,}#s', file_get_contents($filename)); } function _scaleImageFile($fileSrc, $w, $h, $saveTo, $resizemethod = 1){ $delays = array(5); if(file_exists($fileSrc) && is_numeric($w)) { if(list($width, $height, $type, $attr) = getimagesize($fileSrc)){ if(!$h) $h = (($height * $w) / $width); if($type == 1 && $this->_isAnimatedGif($fileSrc)){ $gif = new GIFDecoder(file_get_contents($fileSrc)); $delays = $gif->GIFGetDelays(); $oldimg_a = $gif->GIFGetFrames(); if(sizeof($oldimg_a) <= 0) return false; for($i = 0; $i < sizeof($oldimg_a); $i++){ $oldimg_a[$i] = imagecreatefromstring($oldimg_a[$i]); } }else{ if(! ($oldimg = $this->_loadImage($fileSrc, $type))) return false; $oldimg_a = array($oldimg); } $newimg_a = array(); foreach($oldimg_a as $oldimg){ $newimg = null; if($resizemethod == 4){ $ratio = 1.0; $ratio_w = $width / $w; $ratio_h = $height / $h; $ratio = ($ratio_h < $ratio_w ? $ratio_h : $ratio_w); $neww = intval($width / $ratio); $newh = intval($height / $ratio); $tempimg = imagecreatetruecolor($neww, $newh); imagecopyresampled($tempimg, $oldimg, 0, 0, 0, 0, $neww, $newh, $width, $height); $clipw = 0; $cliph = 0; if($neww > $w) $clipw = $neww - $w; if($newh > $h) $cliph = $newh - $h; $cliptop = floor($cliph / 2); $clipleft = floor($clipw / 2); $newimg = imagecreatetruecolor($w, $h); imagecopy($newimg, $tempimg, 0, 0, $clipleft, $cliptop, $w, $h); }else if($resizemethod == 3){ $newimg = imagecreatetruecolor($w, $h); imagecopyresampled($newimg, $oldimg, 0, 0, 0, 0, $w, $h, $width, $height); }else if($resizemethod == 2){ $ratio = 1.0; $ratio_w = $width / $w; $ratio_h = $height / $h; $ratio = ($ratio_h > $ratio_w ? $ratio_h : $ratio_w); $newimg = imagecreatetruecolor(intval($width / $ratio), intval($height / $ratio)); imagecopyresampled($newimg, $oldimg, 0, 0, 0, 0, intval($width / $ratio), intval($height / $ratio), $width, $height); }else{ $ratio = 1.0; if($width > $w || $height > $h){ $ratio = $width / $w; if(($height / $h) > $ratio) $ratio = $height / $h; } $newimg = imagecreatetruecolor(intval($width / $ratio), intval($height / $ratio)); imagecopyresampled($newimg, $oldimg, 0, 0, 0, 0, intval($width / $ratio), intval($height / $ratio), $width, $height); } array_push($newimg_a, $newimg); } if(sizeof($newimg_a) > 1){ $newa = array(); foreach($newimg_a as $i){ ob_start(); imagegif($i); $gifdata = ob_get_clean(); array_push($newa, $gifdata); } $gifmerge = new GIFEncoder ( $newa, $delays, 999, 2, 0, 0, 0, "bin" ); FWrite ( FOpen ( $saveTo, "wb" ), $gifmerge->GetAnimation ( ) ); } else { $this->_outputImage($newimg, $saveTo); } foreach($newimg_a as $newimg){ imagedestroy($newimg); } return true; } else return false; } return false; } function _loadImage($fileSrc, $imgType){ switch ($imgType){ case 1: // gif return imagecreatefromgif($fileSrc); case 2: // jpeg return imagecreatefromjpeg($fileSrc); case 3: // png return imagecreatefrompng($fileSrc); } return false; } function _outputImage($img, $saveTo){ if(strlen($saveTo) > 0){ imagejpeg($img, $saveTo, 90); } return true; } } // End class 
  • GBpilot Man
  • GBpilot Man's Avatar
21 Aug 2016 10:36 - 22 Aug 2016 08:06
K2Model Error - Still was created by GBpilot Man

K2Model Error - Still

Category: English K2 Community

Edit 1 8/22/2016: Additional information.

I created a new install of Joomla and the o1nly item I installed was the JCE Editor. When I installed K2 it went to a screen and gave me a com_k2 error and I could not go to any other place in the administrator. I renamed the /plugins/system/k2 directory and could then get back into the administrator. When I check the install I see this error. So what is going on here? I've heard a lot about K2 and coming from another big CMS it appears like it will give me much of the functionality of that CMS but i can not get installed.

Warning

ERROR: operator does not exist: ` character varying LINE 1: SELECT id FROM #__modules WHERE `module` = 'mod_k2_quick... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.SQL=SELECT id FROM #__modules WHERE `module` = 'mod_k2_quickicons'

Original:

I am running Joomla 3.6.2 and attempted to install K2 latest version 2.7.1 from the Extensions-?Mange->update menu. K2 appeared to install but when I refreshed the site I got a 500 error and the Apache err_log shows this error.

"Class K2Model not found in /home/.....public_html/plugins/system/k2/k2.php on line 430."

I have only JCE and the Akeeba Backup installed, no other plugins or extensions installed. I can get the site back up by removing the plugins/system/k2 directory and I see com_k2 entries in the component menu and the K2 modules are installed.

From what research I did this seems to be a common issue but I found no solutions ,just suggestions but none work.

Note that I can not access either my Joomla administrator pages or the site until I delete the K2 directory. I then go in and clean out all the K2 stuff. I've tried reinstalling but get the same issue.

After I delete the k2 directory I can get back to the Extensions install page and I see this error.

ERROR: operator does not exist: ` character varying LINE 1: SELECT id FROM #__modules WHERE `module` = 'mod_k2_quick... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.SQL=SELECT id FROM #__modules WHERE `module` = 'mod_k2_quickicons'

If I try and uninstall everything uninstalls except com_k2 and I get this error.

JFolder: :delete: Path is not a folder. Path: /home/l1049hoadmin/public_html/administrator/components/com_k2
JFolder: :delete: Path is not a folder. Path: /home/l1049hoadmin/public_html/components/com_k2
Component Uninstall: Can't uninstall. Please remove manually.

If I create the directories it then gives me this

JInstaller: :Install: Can't find XML setup file.
Component Uninstall: Can't uninstall. Please remove manually.

So first how do I clean it out of my system and get rid of the com_k2 that's left. I've reinstalled and renamed the plugin k2 directory which lets me get back into the admin for the site. As soon as I rename the plugin k2 directory I cannot use my site. If i rename it again I can uninstall all of K2 but the com_k2. Even if I rename the directory back the com_k2 uninstall complains about no XML file but it's there. There is a com_k2 mod listed in the database table extensions and I could delete it from there.

Second, how do I get it to install without taking the site offline?

Thanks.
  • carlostegs
  • carlostegs's Avatar
07 Aug 2016 19:18 - 07 Aug 2016 19:19

Error message when you post the article Frontend after k2 up

Category: English K2 Community

My site was perfect with k2 2.70 to ...

Then I upgrade to Joomla 3.62 and updated the K2 to version 2.71, and identified an error in the website frontend.

I am using Joomla 3.62 with K2 v2.71 with folder permissions to 755 and 644 to archive permission are correct.

Yet this showing an error message for those who put items by the website frontend.

Detail on the site Frontend can never put image only text, entando that disabled the image part.

Only after I updated to version v2.71 k2, the user places the item and save the item in addition to appearing message successfully saved, appears a second message with the following error:

 "The image was not loaded. Please make sure that you used a valid image file and upload the file is configured according to your server"

When I checked the article by Backend, I notice that he entered normal only is presenting this error in the Frontend user screen.

In Backend not appear any error, this normal.

Only to the user in the frontend that uses the articles post, this appearing this message, after saving the new article.

Does anyone have an idea of ​​what may be occurring

Behind a possible solution

I am looking forward to a possible aid
I shall be grateful
much Success
Jose Carlos
  • Abeer Kirollos
  • Abeer Kirollos's Avatar
17 Jul 2016 05:38 - 17 Jul 2016 16:04
Fatal Error after Joomla 3.6 update was created by Abeer Kirollos

Fatal Error after Joomla 3.6 update

Category: English K2 Community

After updating our website to joomla 3.6, we are getting a fatal error when adding new K2 items from the frontend: Fatal error: Call to a member function isCheckedOut() on null in /administrator/components/com_k2/views/item/view.html.php on line 100 and a blank screen.

We currently have K2 version 2.6.9. How to correct this issue?
  • James Rocks
  • James Rocks's Avatar
23 Apr 2016 19:06 - 23 Apr 2016 19:08
Replied by James Rocks on topic New to K2: Featured Article Page

New to K2: Featured Article Page

Category: English K2 Community

Hi again Krikor,

Turns out I had already found those videos on YouTube and I didn't really get on with them ... I found her presentation style too fast and the subject material (the actual website itself) something of a distraction. Just one of those things I guess ... I am reviewing the K2 site's other documentation though.

I am attempting to more-or-less duplicate Joomla's "featured article" capability but using K2 items as source ... under "normal" Joomla I can have several featured articles on my front page effectively giving a history of featured articles.

From what I can tell featured pages are pretty much impossible within K2 itself and I can find no way to include K2 articles on a "normal" Joomla featured article page. I checked that last by deleting my primary featured article in Joomla and checking that the K2 imported version was still in the K2 item list and that it was still classed as featured. I then checked my website to find that the article had gone which means the "normal" Joomla featured article page does not source from K2 items. Therefore K2 must have its own method of displaying featured articles or it can't do it at all and the latter seems odd because K2 items have a "featured" checkbox.

There doesn't appear to be a K2 menu system, you simply attach a K2 category or whatever to a Joomla item so the next step was to check what kinds of K2 "Menu Item Type" I could have, these are K2 item
  • Categories: This could work if I was willing to have one of my categories only as my featured items for instance my "News & Progress" category.
  • Item: This would work if I had only one featured article at any one time (this was pretty much how I had originally envisaged featured articles)
  • Item edit form: Wouldn't work at all.
  • Latest items from (one or more) users or categories: Might work but doesn't seem to offer what I'd need.
  • Tag: This has potential if I was willing to create a "featured" tag and use that tag as the filter for this page.
  • User page (blog): Wouldn't really work at all.

My limited research indicates that K2 doesn't have a true featured article page and that, if I want to stick with K2 (which I do), my best bet would be to use the tag version. I have tested that and it does work.

I would probably still prefer a proper featured page system though.

James
  • David Hack
  • David Hack's Avatar
18 Apr 2016 17:25

K2 Front End Not Closing iFrame After Saving

Category: English K2 Community

Hi,

I've been holding off upgrading K2 as it will break my integraton with Community Builder and was hoping you could help me fix a problem with my current system.

When logged in via the front end, after editing a K2 article, I click Save and the iFrame fails to close. On checking, the article is actually saved but the iFrame goes blank and stays open. Any ideas how I can fix this? Note: Clicking the close button does close the iFrame.

Note: I'm running jQuery library v1.11 (remote) and a remote copy of jQuery and jQuery UI. Latest version of CB (2.0.14).
  • Panagiotis Sakellariou
  • Panagiotis Sakellariou's Avatar
29 Mar 2016 05:33 - 29 Mar 2016 06:36
Replied by Panagiotis Sakellariou on topic Optimum Server Setup for K2 Sites

Optimum Server Setup for K2 Sites

Category: English K2 Community

K2 doesn't have any specific needs. It is based, along with joomla, on PHP. As far as php goes, I've found that litespeed has the best php handler out there (LSAPI) which is a lot faster than anything else, and together with php 7 it can be amazingly fast!

Litespeed is commercial, and it is used instead of apache. The best thing is that it operates exactly like apache, so everything works as if you had apache (htaccess etc). In fact, in Cpanel you can switch from apache to litespeed and back, with one click and a couple of seconds wait time.

As for joomla specific security, I recommend admin tools the pro version (it has an awesome WAF = firewall), and for extra performance use Jotcache in combination with joomla global config cache. What you need to setup with the caches is this:

1.Jotcache ideally ALL pages
2.Exclude from jotcache any module positions that you need to be real time updated
3.Switch on conservative global caching of joomla which affects the caching of modules
4.Then go to each and every 1 of your modules and choose the time you want it to be recached. Keep in mind that if a module does not change its output from page to page, then it does not need to be cached on module level (switch off its caching option), instead it will be cached on page level by jotcache
5.If you exclude any module positions from jotcache's page cache, then go to the modules that you have assigned to these positions and enable their individual module caching with the recache time you need

Also, compress, minify and combine all of your css and js files. DO NOT use a plugin for this, the plugins will end up using a lot of "server juice" to do what you can do manually, and in many cases will serve the same code many many times to your clients, by using different filenames for the same code. Ideally you should be serving 1 css file and 1 js file to you clients ready to go. Record the css and js files you serve now, and hunt down the code that inserts them and remove that code (yes that means hacking core files. ALWAYS write down which core files you hack AND have a filename-Copy of the original file in the respective folder). Then insert you own files directly in your template's head file, and use this in order to add a timestamp to your css and js files (only), so that every time you change them, the changes will be visible to your clients. And lastly, if you use bootstrap , jquery , fontawesome etc etc do not use them as is, instead go to their respective "customize" pages and create your own versions with only the parts you actually use, thus reducing their size considerably. (for fontawesome I included a link to iconmoon which will generate fontawesome with different css classes, instead of fa fa- it uses something like ico ico- , so when you generate the files, don't forget to edit the css and change the classes to fa fa-. Also iconmoon does not generate .woff2 and .otf font files, instead go here and here to transform the ttf file to .otf and .woff2 and then add them in the css file of fontawesome )

Also, use K2's templating to create your own templates, and remove ALL code parts that you do not use. There's no point in making php check if you have "Show Media" enabled, if you do not use media. Every extra "if" is an extra millisecond that you can avoid, reducing TTFB (time to first byte)
  • Luke
  • Luke's Avatar
08 Mar 2016 17:56 - 08 Mar 2016 18:05

Section 508 Compliance Labels for Select Menu

Category: English K2 Community

Hello,

I am relatively new to Joomla so this may be a silly question. I am set to keep this website goodwillmidmichigan.org/ compliant with Section 508, using a compliance checking tool it flags the Select Box (Resource Guides) as missing labels on the home which violates Section 508 compliance standards. The question is, how exactly do I change the code in order to add labels to this section?

I think it has to do with this file public_html/templates/goodwillmidmichigan/html/mod_k2_tools/helper.php but anything I do in this file does not reflect on the site itself. I have confirmed that the changes are indeed being made and saved. I am just misunderstanding what needs to be done to edit the way this is to work.

Any advice would be awesome!

The code in helper.php that leads me to believe this is what needs to be edited is as follows:
public static function treeselectbox(&$params, $id = 0, $level = 0) { $mainframe = JFactory::getApplication(); $root_id = (int)$params->get('root_id2'); $option = JRequest::getCmd('option'); $view = JRequest::getCmd('view'); $category = JRequest::getInt('id'); $id = (int)$id; $user = JFactory::getUser(); $aid = (int)$user->get('aid'); $db = JFactory::getDBO(); if (($root_id != 0) && ($level == 0)) { $query = "SELECT * FROM #__k2_categories WHERE parent={$root_id} AND published=1 AND trash=0 "; } else { $query = "SELECT * FROM #__k2_categories WHERE parent={$id} AND published=1 AND trash=0 "; } if (K2_JVERSION != '15') { $query .= " AND access IN(".implode(',', $user->getAuthorisedViewLevels()).") "; if ($mainframe->getLanguageFilter()) { $languageTag = JFactory::getLanguage()->getTag(); $query .= " AND language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") "; } } else { $query .= " AND access <= {$aid}"; } $query .= " ORDER BY ordering"; $db->setQuery($query); $rows = $db->loadObjectList(); if ($db->getErrorNum()) { echo $db->stderr(); return false; } if ($level == 0) { echo ' <div class="k2CategorySelectBlock '.$params->get('moduleclass_sfx').'"> <form action="'.JRoute::_('index.php').'" method="get"> <label for="category" style="font-weight:bold;font-size:12pt">Resource Guides</label></br> <!-- 12-24-2014 JMEInc, MJM, added for Sec508 compliance --> <select name="category" id="category" onchange="window.location=this.form.category.value;"> <option value="'.JURI::base(true).'/">'.JText::_('K2_SELECT_CATEGORY').'</option> '; } $indent = ""; for ($i = 0; $i < $level; $i++) { $indent .= '&ndash; '; } foreach ($rows as $row) { if (($option == 'com_k2') && ($category == $row->id)) { $selected = ' selected="selected"'; } else { $selected = ''; } if (modK2ToolsHelper::hasChildren($row->id)) { echo '<option value="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'"'.$selected.'>'.$indent.$row->name.'</option>'; modK2ToolsHelper::treeselectbox($params, $row->id, $level + 1); } else { echo '<option value="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'"'.$selected.'>'.$indent.$row->name.'</option>'; } } if ($level == 0) { echo ' </select> <input name="option" value="com_k2" type="hidden" /> <input name="test" value="test" type="test" /> <input name="view" value="itemlist" type="hidden" /> <input name="task" value="category" type="hidden" /> <input name="Itemid" value="'.JRequest::getInt('Itemid').'" type="hidden" />'; // For Joom!Fish compatibility if (JRequest::getCmd('lang')) { echo '<input name="lang" value="'.JRequest::getCmd('lang').'" type="hidden" />'; } echo ' </form> </div> '; } }
  • Francesco Deruvo
  • Francesco Deruvo's Avatar
24 Feb 2016 11:54
404 error on K2.css was created by Francesco Deruvo

404 error on K2.css

Category: English K2 Community

Hi,
yesterday i noticed a page of my website was "unformatted", checking with chrome i realized the k2.css was not loaded.
The error in chrome inspects was:

GET www.gamazine.it/components/com_k2/css/k2.css 404 (View not found [name, type, prefix]: category, css, contentView)
224-dead-or-alive-xtreme-3-hitomi-trailer.html:39 GET www.gamazine.it/components/com_k2/js/k2.js?v2.6.9&sitepath=/ 404 (View not found [name, type, prefix]: category, js, contentView)
224-dead-or-alive-xtreme-3-hitomi-trailer.html:378 Uncaught SyntaxError: Unexpected token ILLEGAL


This error was found on only one page.
I did several tests including:
delete cache
disable cache, gzip
disable and uninstall Jotcache
disable and uninstall JCH optimizer
copy the files in /com_k2/templates to the folder /templates/miotemplate/html/com_k2/
change the permission to the cache folder from 755 to 775
copy the k2.css file in the folder /templates/my-template/css/custom/

every single change, i deleted the cache before refresh, and checked the website with either chrome and firefox.
The only result is that now the other pages are not displayed correctly (whereas before it was just one)
Then I tried to restore everything, i reinstalled JCH and put back the settings as they were before, rehabilitating gzip and cache.
when i try to open the url website.it/components/com_k2/css/k2.css on my brower i get a 404 page...

My website is gamazine .it
All the pages of the items were formatted correctly by K2, now are not anymore.
The page that initially does not see properly was: gamazine .it/blog/
My htaccess file have one redirect (from non-www to www), the rest is the joomla default htaccess
recently i added the cloudflare service but i never noticed if that page had already before these errors
on cloudflare i disabled the minify options but the cache cannot be disabled

Joomla version v3.4.8 stable
K2 version 2.6.9
Php 5.4.39
The template is Xenon from Rockettheme
Extensions used: Jotcache and JCH optimize (free)

I hope I have said everything.
I don't have more ideas on how to fix this error, I hope someone can help me because the site as well is unusable

Thank you
Displaying 21 - 40 out of 269 results.

Powered by Kunena Forum