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
<?php
namespace MatthiasWeb\RealMediaLibrary\order;
use MatthiasWeb\RealMediaLibrary\general;
use MatthiasWeb\RealMediaLibrary\metadata;
use MatthiasWeb\RealMediaLibrary\api;
use MatthiasWeb\RealMediaLibrary\base;
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
class GalleryOrder extends base\Base {
private static $me = null;
private function __construct() {
}
static $cachedOrders = null;
public function deleted_realmedialibrary_meta($meta_ids, $object_id, $meta_key) {
if (!empty($object_id) && $meta_key === "orderby") {
delete_media_folder_meta($object_id, "orderAutomatically");
}
}
public function order($fid, $orderby, $writeMetadata = true) {
$orders = $this->getAvailableOrders();
$core = general\Core::getInstance();
$core->debug("Try to order the folder $fid by $orderby...", __METHOD__);
if (in_array($orderby, array_keys($orders))) {
global $wpdb;
$split = explode("_", $orderby);
$order = $orders[$orderby];
$direction = $split[1];
$table_name = general\Core::getInstance()->getTableName("posts");
$sql = $wpdb->prepare("UPDATE $table_name AS rmlo2
LEFT JOIN (
SELECT @rownum := @rownum + 1 AS nr, t.ID
FROM ( SELECT wp.ID
FROM $table_name AS rmlo
INNER JOIN $wpdb->posts AS wp ON rmlo.attachment = wp.id AND wp.post_type = \"attachment\"
WHERE rmlo.fid = %d
ORDER BY " . $order["sqlOrder"] . " $direction ) AS t, (SELECT @rownum := 0) AS r
) AS rmlonew ON rmlo2.attachment = rmlonew.ID
SET rmlo2.nr = rmlonew.nr
WHERE rmlo2.fid = %d", $fid, $fid);
$wpdb->query($wpdb->prepare("UPDATE " . $core->getTableName() . " SET contentCustomOrder=1 WHERE id = %d", $fid));
$wpdb->query($sql);
if ($writeMetadata) {
update_media_folder_meta($fid, "orderby", $orderby);
}
$core->debug("Successfully ordered folder", __METHOD__);
return true;
}else{
$core->debug("'$orderby' is not a valid order...", __METHOD__);
return false;
}
}
public function getAvailableOrders() {
if (self::$cachedOrders === null) {
$orders = array(
"title_asc" => array(
"label" => __("Order by title ascending", RML_TD),
"sqlOrder" => "wp.post_title"
),
"title_desc" => array(
"label" => __("Order by title descending", RML_TD),
"sqlOrder" => "wp.post_title"
),
"filename_asc" => array(
"label" => __("Order by filename ascending", RML_TD),
"sqlOrder" => "SUBSTRING_INDEX(wp.guid, '/', -1)"
),
"filename_desc" => array(
"label" => __("Order by filename descending", RML_TD),
"sqlOrder" => "SUBSTRING_INDEX(wp.guid, '/', -1)"
),
"filenameNat_asc" => array(
"label" => __("Natural order by filename ascending", RML_TD),
"sqlOrder" => "LENGTH(SUBSTRING_INDEX(wp.guid, '/', -1)), SUBSTRING_INDEX(wp.guid, '/', -1)"
),
"filenameNat_desc" => array(
"label" => __("Natural order by filename descending", RML_TD),
"sqlOrder" => "LENGTH(SUBSTRING_INDEX(wp.guid, '/', -1)) desc, SUBSTRING_INDEX(wp.guid, '/', -1)"
),
"id_asc" => array(
"label" => __("Order by ID ascending", RML_TD),
"sqlOrder" => "wp.ID"
),
"id_desc" => array(
"label" => __("Order by ID descending", RML_TD),
"sqlOrder" => "wp.ID"
)
);
self::$cachedOrders = apply_filters("RML/Order/Orderby", $orders);
}
return self::$cachedOrders;
}
public static function getInstance() {
if (self::$me == null) {
self::$me = new GalleryOrder();
}
return self::$me;
}
}