1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633:
<?php
$plugin_description = gettext("Functions that provide various statistics about images and albums in the gallery.");
$plugin_author = "Malte Müller (acrylian), Stephen Billard (sbillard), gjr";
$plugin_category = gettext('Statistics');
require_once(dirname(dirname(__FILE__)) . '/template-functions.php');
function getAlbumStatistic($number = 5, $option, $albumfolder = '', $threshold = 0, $sortdirection = 'desc', $collection = false) {
global $_zp_gallery;
if ($albumfolder) {
$obj = newAlbum($albumfolder);
$albumWhere = ' WHERE parentid = ' . $obj->getID();
if ($collection) {
$albumWhere = '';
$ids = getAllSubAlbumIDs($albumfolder);
if (!empty($ids)) {
foreach ($ids as $id) {
$getids[] = $id['id'];
}
$getids = implode(', ', $getids);
$albumWhere = ' WHERE id IN (' . $getids . ')';
} else {
$albumWhere = ' WHERE parentid = ' . $obj->getID();
}
}
} else {
$obj = $_zp_gallery;
$albumWhere = '';
}
switch (strtolower($sortdirection)) {
case 'desc':
default:
$sortdir = 'DESC';
break;
case 'asc':
$sortdir = 'ASC';
break;
}
if (($option == 'toprated' || $option == 'mostrated' || $option == 'popular') && $threshold > 0) {
if (empty($albumWhere)) {
$albumWhere = ' WHERE ';
} else {
$albumWhere .= ' AND ';
}
if (($option == 'toprated' || $option == 'mostrated') && $threshold > 0) {
$albumWhere .= 'total_votes >= ' . $threshold;
}
if ($option == 'popular' && $threshold > 0) {
$albumWhere .= 'hitcounter >= ' . $threshold;
}
}
switch ($option) {
case "popular":
$sortorder = "hitcounter";
break;
default:
case "latest":
$sortorder = "id";
break;
case "latest-mtime":
$sortorder = "mtime";
break;
case "latest-date":
$sortorder = "date";
break;
case "latest-publishdate":
$sortorder = "IFNULL(publishdate,date)";
break;
case "mostrated":
$sortorder = "total_votes";
break;
case "toprated":
$sortorder = "(total_value/total_votes) DESC, total_value";
break;
case "latestupdated":
$sortorder = 'updateddate';
break;
case "random":
$sortorder = "RAND()";
break;
}
$albumArray = array();
if ($obj->table == 'albums' && $obj->isDynamic()) {
$albums = $obj->getAlbums(0, $sortorder, $sortdir);
foreach ($albums as $album) {
$album = newAlbum($album);
if ($album->checkAccess() && ($album->isPublic() || zp_loggedin(VIEW_UNPUBLISHED_RIGHTS))) {
$albumArray[] = $album;
if (count($albumArray) >= $number) {
break;
}
}
}
} else {
$result = query("SELECT id, title, folder, thumb FROM " . prefix('albums') . $albumWhere . " ORDER BY " . $sortorder . " " . $sortdir);
while ($row = db_fetch_assoc($result)) {
$album = newAlbum($row['folder'], true, true);
if ($album->exists && $album->checkAccess() && ($album->isPublic() || zp_loggedin(VIEW_UNPUBLISHED_RIGHTS))) {
$albumArray[] = $album;
if (count($albumArray) >= $number) {
break;
}
}
}
db_free_result($result);
}
return $albumArray;
}
function printAlbumStatistic($number, $option, $showtitle = false, $showdate = false, $showdesc = false, $desclength = 40, $showstatistic = '', $width = NULL, $height = NULL, $crop = NULL, $albumfolder = '', $firstimglink = false, $threshold = 0, $collection = false) {
$albums = getAlbumStatistic($number, $option, $albumfolder, $threshold, $collection);
echo "\n<div id=\"" . $option . "_album\">\n";
echo "<ul>";
foreach ($albums as $album) {
printAlbumStatisticItem($album, $option, $showtitle, $showdate, $showdesc, $desclength, $showstatistic, $width, $height, $crop, $firstimglink);
}
echo "</ul></div>\n";
}
function printAlbumStatisticItem($album, $option, $showtitle = false, $showdate = false, $showdesc = false, $desclength = 40, $showstatistic = '', $width = NULL, $height = NULL, $crop = NULL, $firstimglink = false) {
global $_zp_gallery;
$twidth = $width;
$theight = $height;
if (is_null($crop) && is_null($width) && is_null($height)) {
$crop = 2;
} else {
if (is_null($width))
$width = 85;
if (is_null($height))
$height = 85;
if (is_null($crop)) {
$crop = 1;
} else {
$crop = (int) $crop && true;
}
}
$tempalbum = $album;
if ($firstimglink && $tempimage = $tempalbum->getImage(0)) {
$albumpath = $tempimage->getLink();
} else {
$albumpath = $tempalbum->getLink();
}
echo "<li><a href=\"" . $albumpath . "\" title=\"" . html_encode($tempalbum->getTitle()) . "\">\n";
$albumthumb = $tempalbum->getAlbumThumbImage();
$attr = array(
'src' => '',
'width' => '',
'height' => '',
'alt' => html_encode($albumthumb->getTitle()),
'title' => html_encode($albumthumb->getTitle()),
'loading' => 'lazy'
);
switch ($crop) {
case 0:
$sizes = getSizeCustomImage($width, NULL, NULL, NULL, NULL, NULL, NULL, $albumthumb, 'thumb');
$attr['src'] = html_pathurlencode($albumthumb->getCustomImage($width, NULL, NULL, NULL, NULL, NULL, NULL, TRUE));
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('custom_album_thumb_attr', $attr, $albumthumb);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '<img' . $attributes . ' /></a>' . "\n";
echo zp_apply_filter('custom_album_thumb_html', $html, $albumthumb);
break;
case 1;
$sizes = getSizeCustomImage(NULL, $width, $height, $width, $height, NULL, NULL, $albumthumb, 'thumb');
$attr['src'] = html_pathurlencode($albumthumb->getCustomImage(NULL, $width, $height, $width, $height, NULL, NULL, TRUE));
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('custom_album_thumb_attr', $attr, $albumthumb);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '<img' . $attributes . ' /></a>' . "\n";
echo zp_apply_filter('custom_album_thumb_html', $html, $albumthumb);
break;
case 2:
$sizes = getSizeDefaultThumb($albumthumb);
$attr['src'] = html_pathurlencode($albumthumb->getThumb());
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('standard_album_thumb_attr', $attr, $albumthumb);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '<img' .$attributes .' /></a>' . "\n";
echo zp_apply_filter('standard_album_thumb_html', $html, $albumthumb);
break;
}
if ($showtitle) {
echo "<h3><a href=\"" . $albumpath . "\" title=\"" . html_encode($tempalbum->getTitle()) . "\">\n";
echo $tempalbum->getTitle() . "</a></h3>\n";
}
if ($showdate) {
if ($option === "latestupdated") {
$filechangedate = strtotime($tempalbum->getUpdatedDate());
echo "<p>" . sprintf(gettext("Last update: %s"), zpFormattedDate(DATE_FORMAT, $filechangedate)) . "</p>";
$latestimage = query_single_row("SELECT mtime FROM " . prefix('images') . " WHERE albumid = " . $tempalbum->getID() . " AND `show` = 1 ORDER BY id DESC");
if ($latestimage) {
$count = db_count('images', "WHERE albumid = " . $tempalbum->getID() . " AND mtime = " . $latestimage['mtime']);
if ($count <= 1) {
$image = gettext("image");
} else {
$image = gettext("images");
}
echo "<span>" . sprintf(gettext('%1$u new %2$s'), $count, $image) . "</span>";
}
} else {
echo "<p>" . zpFormattedDate(DATE_FORMAT, strtotime($tempalbum->getDateTime())) . "</p>";
}
}
if ($showstatistic === "rating" OR $showstatistic === "rating+hitcounter") {
$votes = $tempalbum->get("total_votes");
$value = $tempalbum->get("total_value");
if ($votes != 0) {
$rating = round($value / $votes, 1);
}
echo "<p>" . sprintf(gettext('Rating: %1$u (Votes: %2$u)'), $rating, $tempalbum->get("total_votes")) . "</p>";
}
if ($showstatistic === "hitcounter" OR $showstatistic === "rating+hitcounter") {
$hitcounter = $tempalbum->getHitcounter();
if (empty($hitcounter)) {
$hitcounter = "0";
}
echo "<p>" . sprintf(gettext("Views: %u"), $hitcounter) . "</p>";
}
if ($showdesc) {
echo shortenContent($tempalbum->getDesc(), $desclength, ' (...)');
}
echo "</li>";
}
function getImageStatistic($number, $option, $albumfolder = '', $collection = false, $threshold = 0, $sortdirection = 'desc') {
global $_zp_gallery;
if ($albumfolder) {
$obj = newAlbum($albumfolder);
$albumWhere = ' AND albums.id = ' . $obj->getID();
if ($collection) {
$albumWhere = '';
$ids = getAllSubAlbumIDs($albumfolder);
if (!empty($ids)) {
foreach ($ids as $id) {
$getids[] = $id['id'];
}
$getids = implode(', ', $getids);
$albumWhere = ' AND albums.id IN (' . $getids . ')';
}
} else {
$albumWhere = ' AND albums.id = ' . $obj->getID();
}
} else {
$obj = $_zp_gallery;
$albumWhere = '';
}
if (($option == 'toprated' || $option == 'mostrated') && $threshold > 0) {
$albumWhere .= 'AND images.total_votes >= ' . $threshold;
}
if ($option == 'popular' && $threshold > 0) {
$albumWhere .= 'AND images.hitcounter >= ' . $threshold;
}
switch (strtolower($sortdirection)) {
case 'desc':
default:
$sortdir = 'DESC';
break;
case 'asc':
$sortdir = 'ASC';
break;
}
switch ($option) {
case "popular":
$sortorder = "images.hitcounter";
break;
case "latest-date":
$sortorder = "images.date";
break;
case "latest-mtime":
$sortorder = "images.mtime";
break;
default:
case "latest":
$sortorder = "images.id";
break;
case "latest-publishdate":
$sortorder = "IFNULL(images.publishdate,images.date)";
break;
case "mostrated":
$sortorder = "images.total_votes";
break;
case "toprated":
$sortorder = "(images.total_value/images.total_votes) DESC, images.total_value";
break;
case "random":
$sortorder = "RAND()";
break;
}
$imageArray = array();
if (!empty($albumfolder) && $obj->isDynamic()) {
$sorttype = str_replace('images.', '', $sortorder);
$images = $obj->getImages(0, 0, $sorttype, $sortdir);
foreach ($images as $image) {
$image = newImage($obj, $image);
if ($image->exists && $image->checkAccess() && ($image->isPublic() || zp_loggedin(VIEW_UNPUBLISHED_RIGHTS))) {
$imageArray[] = $image;
if (count($imageArray) >= $number) {
break;
}
}
}
} else {
$result = query("SELECT images.filename AS filename, albums.folder AS folder FROM " . prefix('images') . " AS images, " . prefix('albums') . " AS albums " . "WHERE (images.albumid = albums.id) " . $albumWhere . " ORDER BY " . $sortorder . " " . $sortdir);
while ($row = db_fetch_assoc($result)) {
$image = newImage(NULL, $row, true);
if ($image->exists && $image->checkAccess() && ($image->isPublic() || zp_loggedin(VIEW_UNPUBLISHED_RIGHTS))) {
$imageArray[] = $image;
if (count($imageArray) >= $number) {
break;
}
}
}
db_free_result($result);
}
return $imageArray;
}
function printImageStatistic($number, $option, $albumfolder = '', $showtitle = false, $showdate = false, $showdesc = false, $desclength = 40, $showstatistic = '', $width = NULL, $height = NULL, $crop = NULL, $collection = false, $fullimagelink = false, $threshold = 0) {
$images = getImageStatistic($number, $option, $albumfolder, $collection, $threshold);
if (is_null($crop) && is_null($width) && is_null($height)) {
$crop = 2;
} else {
if (is_null($width))
$width = 85;
if (is_null($height))
$height = 85;
if (is_null($crop)) {
$crop = 1;
} else {
$crop = (int) $crop && true;
}
}
echo "\n<div id=\"$option\">\n";
echo "<ul>";
foreach ($images as $image) {
if ($fullimagelink) {
$imagelink = $image->getFullImageURL();
} else {
$imagelink = $image->getLink();
}
echo '<li><a href="' . html_encode($imagelink) . '" title="' . html_encode($image->getTitle()) . "\">\n";
$attr = array(
'src' => '',
'width' => '',
'height' => '',
'alt' => html_encode($image->getTitle()),
'title' => html_encode($image->getTitle()),
'loading' => 'lazy'
);
switch ($crop) {
case 0:
$sizes = getSizeCustomImage($width, NULL, NULL, NULL, NULL, NULL, NULL, $image, 'thumb');
$attr['src'] = html_pathurlencode($image->getCustomImage($width, NULL, NULL, NULL, NULL, NULL, NULL, TRUE));
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('custom_image_attr', $attr, $image);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '<img' . $attributes . '" /></a>' . "\n";
echo zp_apply_filter('custom_image_html', $html, true, $image);
break;
case 1:
$sizes = getSizeCustomImage(NULL, $width, $height, $width, $height, NULL, NULL, $image, 'thumb');
$attr['src'] = html_pathurlencode($image->getCustomImage(NULL, $width, $height, $width, $height, NULL, NULL, TRUE));
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('custom_image_attr', $attr, $image);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '<img' . $attributes . ' /></a>' . "\n";
echo zp_apply_filter('custom_image_html', $html, true, $image);
break;
case 2:
$sizes = getSizeDefaultThumb($image);
$attr['src'] = html_pathurlencode($image->getThumb());
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('standard_image_thumb_attr', $attr, $image);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '<img' . $attributes . ' /></a>' . "\n";
echo zp_apply_filter('standard_image_thumb_html', $html, $image);
break;
}
if ($showtitle) {
echo '<h3><a href="' . html_encode($image->getLink()) . '" title="' . html_encode($image->getTitle()) . "\">\n";
echo $image->getTitle() . "</a></h3>\n";
}
if ($showdate) {
echo "<p>" . zpFormattedDate(DATE_FORMAT, strtotime($image->getDateTime())) . "</p>";
}
if ($showstatistic === "rating" OR $showstatistic === "rating+hitcounter") {
$votes = $image->get("total_votes");
$value = $image->get("total_value");
if ($votes != 0) {
$rating = round($value / $votes, 1);
}
echo "<p>" . sprintf(gettext('Rating: %1$u (Votes: %2$u)'), $rating, $votes) . "</p>";
}
if ($showstatistic === "hitcounter" OR $showstatistic === "rating+hitcounter") {
$hitcounter = $image->getHitcounter();
if (empty($hitcounter)) {
$hitcounter = "0";
}
echo "<p>" . sprintf(gettext("Views: %u"), $hitcounter) . "</p>";
}
if ($showdesc) {
echo shortenContent($image->getDesc(), $desclength, ' (...)');
}
echo "</li>";
}
echo "</ul></div>\n";
}
function checkIfNew($mode = "image", $timerange = 604800) {
$currentdate = date("U");
switch ($mode) {
case "image":
$itemdate = getImageDate("%s");
break;
case "album":
$itemdate = getAlbumDate("%s");
break;
}
$newcheck = $currentdate - $itemdate;
if ($newcheck < $timerange) {
return TRUE;
} else {
return FALSE;
}
}
function getNumAllSubalbums($albumobj, $pre = '') {
global $_zp_gallery, $_zp_current_album;
if (is_null($albumobj)) {
$albumobj = $_zp_current_album;
}
$albums = $_zp_gallery->getAllAlbums($albumobj, LIST_RIGHTS, false);
$count = count($albums);
if ($count != 0) {
return $pre . $count;
} else {
return false;
}
}
function getPictureOfTheDay($albumfolder = '', $collection = false) {
global $_zp_gallery;
$potd = getSerializedArray(getOption('picture_of_the_day'));
if (date('Y-m-d', $potd['day']) == date('Y-m-d')) {
$album = newAlbum($potd['folder'], true, true);
if ($album->exists) {
$image = newImage($album, $potd['filename'], true);
if ($image->exists) {
return $image;
}
}
}
$randomimage = getImageStatistic(1, 'random', $albumfolder, $collection);
if ($randomimage) {
$potd = array('day' => time(), 'folder' => $randomimage[0]->getAlbumName(), 'filename' => $randomimage[0]->getFileName());
setThemeOption('picture_of_the_day', serialize($potd), NULL, $_zp_gallery->getCurrentTheme());
return $randomimage[0];
}
return NULL;
}