-
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial work at Add route type filter in admin area post listing #92 …
…- added route type column.
- Loading branch information
Showing
8 changed files
with
363 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
<?php | ||
/** | ||
* Copyright (c) 2014-2024 Alexandru Boia and Contributors | ||
* | ||
* Redistribution and use in source and binary forms, with or without modification, | ||
* are permitted provided that the following conditions are met: | ||
* | ||
* 1. Redistributions of source code must retain the above copyright notice, | ||
* this list of conditions and the following disclaimer. | ||
* | ||
* 2. Redistributions in binary form must reproduce the above copyright notice, | ||
* this list of conditions and the following disclaimer in the documentation | ||
* and/or other materials provided with the distribution. | ||
* | ||
* 3. Neither the name of the copyright holder nor the names of its contributors | ||
* may be used to endorse or promote products derived from this software without | ||
* specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY | ||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
* OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
if (!defined('ABP01_LOADED') || !ABP01_LOADED) { | ||
exit ; | ||
} | ||
|
||
class Abp01_Display_PostListing_TripSummaryRouteTypeColumn extends Abp01_Display_PostListing_Column { | ||
public function __construct($key, $label, Abp01_Display_PostListing_ColumnDataSource $dataSource) { | ||
parent::__construct($key, $label, $dataSource); | ||
} | ||
|
||
public function renderValue($postId) { | ||
$routeType = parent::renderValue($postId); | ||
|
||
if (empty($routeType)) { | ||
return '-'; | ||
} | ||
|
||
$label = $this->_getRouteTypeLabel($postId, | ||
$routeType); | ||
|
||
return $this->_formatRouteTypeLabel($postId, | ||
$routeType, | ||
$label); | ||
} | ||
|
||
private function _formatRouteTypeLabel($postId, $routeType, $routeTypeLabel) { | ||
$cssClass = sprintf('abp01-route-type-cell abp01-route-type-cell-%s', esc_attr($routeType)); | ||
$formatted = '<span class="' . $cssClass . '">' . $routeTypeLabel . '</span>'; | ||
|
||
return apply_filters('abp01_formatted_route_tyle_listing_label', | ||
$formatted, | ||
$postId, | ||
$routeType, | ||
$routeTypeLabel); | ||
} | ||
|
||
private function _getRouteTypeLabel($postId, $routeType) { | ||
$routeTypeLabel = ''; | ||
switch ($routeType) { | ||
case Abp01_Route_Info::BIKE: | ||
$routeTypeLabel = __('Biking', 'abp01-trip-summary'); | ||
break; | ||
case Abp01_Route_Info::HIKING: | ||
$routeTypeLabel = __('Hiking', 'abp01-trip-summary'); | ||
break; | ||
case Abp01_Route_Info::TRAIN_RIDE: | ||
$routeTypeLabel = __('Train Ride', 'abp01-trip-summary'); | ||
break; | ||
} | ||
|
||
return apply_filters('abp01_unformatted_route_type_label', | ||
$routeTypeLabel, | ||
$postId, | ||
$routeType); | ||
} | ||
|
||
public function renderLabel() { | ||
return parent::renderLabel(); | ||
} | ||
|
||
public function getKey() { | ||
return parent::getKey(); | ||
} | ||
} |
61 changes: 61 additions & 0 deletions
61
lib/display/postListing/TripSummaryRouteTypeColumnsDecorator.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<?php | ||
/** | ||
* Copyright (c) 2014-2024 Alexandru Boia and Contributors | ||
* | ||
* Redistribution and use in source and binary forms, with or without modification, | ||
* are permitted provided that the following conditions are met: | ||
* | ||
* 1. Redistributions of source code must retain the above copyright notice, | ||
* this list of conditions and the following disclaimer. | ||
* | ||
* 2. Redistributions in binary form must reproduce the above copyright notice, | ||
* this list of conditions and the following disclaimer in the documentation | ||
* and/or other materials provided with the distribution. | ||
* | ||
* 3. Neither the name of the copyright holder nor the names of its contributors | ||
* may be used to endorse or promote products derived from this software without | ||
* specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY | ||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
* OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
if (!defined('ABP01_LOADED') || !ABP01_LOADED) { | ||
exit ; | ||
} | ||
|
||
class Abp01_Display_PostListing_TripSummaryRouteTypeColumnsDecorator extends Abp01_Display_PostListing_ColumnCustomization { | ||
public function __construct() { | ||
parent::__construct($this->_getColumns(), $this->_getPostTypes()); | ||
} | ||
|
||
private function _getColumns() { | ||
$routeManager = $this->_getRouteManager(); | ||
return array( | ||
new Abp01_Display_PostListing_TripSummaryRouteTypeColumn( | ||
'abp01_trip_summary_route_type', | ||
esc_html__('Route type', 'abp01-trip-summary'), | ||
new Abp01_Display_PostListing_TripSummaryRouteTypeDataSource( | ||
$routeManager | ||
) | ||
) | ||
); | ||
} | ||
|
||
private function _getRouteManager(): Abp01_Route_Manager { | ||
return abp01_get_route_manager(); | ||
} | ||
|
||
private function _getPostTypes() { | ||
return Abp01_AvailabilityHelper::getTripSummaryAvailableForPostTypes(); | ||
} | ||
} |
106 changes: 106 additions & 0 deletions
106
lib/display/postListing/TripSummaryRouteTypeDataSource.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
<?php | ||
/** | ||
* Copyright (c) 2014-2024 Alexandru Boia and Contributors | ||
* | ||
* Redistribution and use in source and binary forms, with or without modification, | ||
* are permitted provided that the following conditions are met: | ||
* | ||
* 1. Redistributions of source code must retain the above copyright notice, | ||
* this list of conditions and the following disclaimer. | ||
* | ||
* 2. Redistributions in binary form must reproduce the above copyright notice, | ||
* this list of conditions and the following disclaimer in the documentation | ||
* and/or other materials provided with the distribution. | ||
* | ||
* 3. Neither the name of the copyright holder nor the names of its contributors | ||
* may be used to endorse or promote products derived from this software without | ||
* specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY | ||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
* OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
if (!defined('ABP01_LOADED') || !ABP01_LOADED) { | ||
exit ; | ||
} | ||
|
||
class Abp01_Display_PostListing_TripSummaryRouteTypeDataSource implements Abp01_Display_PostListing_ColumnDataSource { | ||
private $_routeManager; | ||
|
||
public function __construct(Abp01_Route_Manager $routeManager) { | ||
$this->_routeManager = $routeManager; | ||
} | ||
|
||
public function getValue($postId) { | ||
$routeType = $this->_getTripSummaryRouteTypeInfoForPostId($postId); | ||
return $routeType; | ||
} | ||
|
||
private function _getTripSummaryRouteTypeInfoForPostId($postId) { | ||
$allRouteTypeInfo = $this->_getTripSummaryRouteTypeInfoForCurrentWpQuery(); | ||
$postRouteTypeInfo = isset($allRouteTypeInfo[$postId]) | ||
? $allRouteTypeInfo[$postId] | ||
: ''; | ||
|
||
return $postRouteTypeInfo; | ||
} | ||
|
||
private function _getTripSummaryRouteTypeInfoForCurrentWpQuery() { | ||
$query = $this->_getCurrentWpQuery(); | ||
$allRouteTypeInfo = $query != null | ||
? $this->_getPostsTripSummaryRouteTypeInfo($query->posts) | ||
: array(); | ||
|
||
return $allRouteTypeInfo; | ||
} | ||
|
||
private function _getPostsTripSummaryRouteTypeInfo($posts) { | ||
$postIds = array(); | ||
$allRouteTypeInfo = array(); | ||
|
||
//extract post IDs | ||
$postIds = abp01_extract_post_ids($posts); | ||
if (!empty($postIds)) { | ||
//Attempt to extract any cached data | ||
$cacheKey = $this->_getPostsTripSummaryRouteTypeInfoCacheKey($postIds); | ||
$allRouteTypeInfo = $this->_retrieveCachedTripSummaryRouteTypeInfo($cacheKey); | ||
|
||
//If there is no status information cached, fetch it | ||
if (!is_array($allRouteTypeInfo)) { | ||
$allRouteTypeInfo = $this->_routeManager | ||
->getTripSummaryRouteTypeInfo($postIds); | ||
$this->_cacheTripSummaryRouteTypeInfo($cacheKey, | ||
$allRouteTypeInfo); | ||
} | ||
} | ||
|
||
return $allRouteTypeInfo; | ||
} | ||
|
||
private function _getPostsTripSummaryRouteTypeInfoCacheKey($postIds) { | ||
return sprintf('_abp01_posts_listing_route_type_info_%s', sha1(join('_', $postIds))); | ||
} | ||
|
||
private function _retrieveCachedTripSummaryRouteTypeInfo($cacheKey) { | ||
return get_transient($cacheKey); | ||
} | ||
|
||
private function _cacheTripSummaryRouteTypeInfo($cacheKey, $statusInfo) { | ||
set_transient($cacheKey, $statusInfo, MINUTE_IN_SECONDS / 2); | ||
} | ||
|
||
private function _getCurrentWpQuery() { | ||
return isset($GLOBALS['wp_query']) | ||
? $GLOBALS['wp_query'] | ||
: null; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.