Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewmenich committed Mar 12, 2024
2 parents aaa249b + e0239fe commit 8e23be2
Show file tree
Hide file tree
Showing 12 changed files with 628 additions and 73 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Changelog

## 4.0.01 - 2023-10-31
## 4.0.2 - 2024-03-12

### Added
- Add logic to Media Sync 'mark as stale' for items that should be manually reviewed for deletion

### Changed
- During Media Sync, skip processing of new items if availability does not have any start/end dates. If media is already in the CMS, it will be disabled and marked as stale.

## 4.0.1 - 2023-10-31

### Removed
- Remove the 'stale-media' template file that was part of the 'check for changes' feature that needed to be reverted.
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "moon/pbs-media-manager-craft-plugin",
"name": "moon/pbs-media-manager-craft-plugin-food",
"description": "Media Manager 4 for PBS API",
"version": "4.0.1",
"version": "4.0.2",
"type": "craft-plugin",
"keywords": ["craftcms", "pbs", "media-manager"],
"license": "MIT",
Expand Down
28 changes: 21 additions & 7 deletions src/MediaManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@
namespace papertiger\mediamanager;

use Craft;
use craft\log\MonologTarget;
use craft\models\FieldGroup;
use Exception;
use Monolog\Formatter\LineFormatter;
use papertiger\mediamanager\base\ConstantAbstract;
use Psr\Log\LogLevel;
use yii\base\Event;
use craft\base\Plugin;
use craft\web\UrlManager;
Expand Down Expand Up @@ -52,6 +55,7 @@ class MediaManager extends Plugin
public bool $hasCpSettings = true;
public bool $hasCpSection = true;

public string $schemaVersion = '1.0.1';

// Public Methods
// =========================================================================
Expand All @@ -71,14 +75,17 @@ public function init()
$this->registerBehaviors();
$this->registerPluginServices();

Craft::info(
Craft::t(
'mediamanager',
'{name} plugin loaded',
[ 'name' => $this->name ]
Craft::getLogger()->dispatcher->targets[] = new MonologTarget([
'name' => 'media-manager-errors',
'categories' => ['plugins\pbs-media-manager-craft-plugin-food\*'],
'level' => LogLevel::ERROR,
'logContext' => true,
'allowLineBreaks' => true,
'formatter' => new LineFormatter(
format: "%datetime% [%level_name%] from %extra.yii_category%: %message%\n",
dateFormat: 'Y-m-d H:i:s',
),
__METHOD__
);
]);
}

public function beforeInstall(): void
Expand Down Expand Up @@ -177,6 +184,11 @@ public function getCpNavItem(): array
'label' => self::t( 'Settings' ),
'url' => UrlHelper::cpUrl( 'settings/plugins/mediamanager' )
];

$navigation['subnav']['stale-media'] = [
'label' => self::t('Manage Stale Media'),
'url' => 'mediamanager/stale-media'
];

return $navigation;
}
Expand Down Expand Up @@ -276,6 +288,8 @@ private function registerPluginServices()
'oldsettings' => OldSettingsService::class,
]);
}




// Protected Methods
Expand Down
2 changes: 1 addition & 1 deletion src/base/ConstantAbstract.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ abstract class ConstantAbstract
const DEFAULT_FIELD_LAYOUT = [
'Content' => [ 'thumbnail', 'duration', 'description' ],
'Tags' => [ 'siteTags', 'film', 'topic' ] ,
'API' => [ 'mediaManagerId', 'mediaType', 'playerCode', 'displayPassportIcon', 'expirationStatus', 'lastSynced', 'season', 'episode' ]
'API' => [ 'mediaManagerId', 'mediaType', 'playerCode', 'displayPassportIcon', 'expirationStatus', 'lastSynced', 'season', 'episode', 'markedForDeletion' ]
];

const DEFAULT_SHOW_FIELD_LAYOUT = [
Expand Down
14 changes: 12 additions & 2 deletions src/controllers/MainController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@

use Craft;
use craft\base\Element;
use craft\helpers\Queue;
use craft\helpers\UrlHelper;
use craft\elements\Entry;
use craft\web\Controller;
use papertiger\mediamanager\jobs\CancelStaleMedia;
use yii\base\Exception;
use yii\base\InvalidConfigException;
use yii\web\ForbiddenHttpException;
Expand All @@ -36,13 +38,21 @@ class MainController extends Controller
// Public Methods
// =========================================================================

public function actionIndex()
public function actionIndex(): Response
{
return $this->renderTemplate( self::INDEX_TEMPLATE_PATH );
}

public function actionEntries()
public function actionEntries(): Response
{
return $this->renderTemplate( self::ENTRIES_TEMPLATE_PATH );
}

public function actionCancelMarkedForDeletion(): Response
{
$this->requireLogin();
Queue::push((new CancelStaleMedia()));

return $this->asJson('Unchecking items marked for deletion.');
}
}
56 changes: 56 additions & 0 deletions src/jobs/CancelStaleMedia.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php
/**
* Media Manager
*
* @package PaperTiger:MediaManager
* @author Paper Tiger
* @copyright Copyright (c) 2020 Paper Tiger
* @link https://www.papertiger.com/
*/

namespace papertiger\mediamanager\jobs;

use Craft;
use craft\helpers\Db;
use craft\queue\BaseJob;
use craft\elements\Entry;
use craft\elements\Asset;
use craft\elements\Tag;
use craft\helpers\ElementHelper;
use craft\helpers\Assets as AssetHelper;

use papertiger\mediamanager\MediaManager;
use papertiger\mediamanager\helpers\SettingsHelper;

class CancelStaleMedia extends BaseJob
{

// Public Properties
// =========================================================================


// Public Methods
// =========================================================================

public function execute( $queue ): void
{

$relatedMediaObjects = Entry::find()->markedForDeletion(1);

foreach(Db::each($relatedMediaObjects) as $media) {
$media->setFieldValue('markedForDeletion', 0);
Craft::$app->getElements()->saveElement($media);
}
}

// Protected Methods
// =========================================================================

protected function defaultDescription(): string
{
return Craft::t( 'mediamanager', "Unmarking entries for deletion." );
}

// Private Methods
// =========================================================================
}
94 changes: 94 additions & 0 deletions src/jobs/IdentifyStaleMedia.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?php
/**
* Media Manager
*
* @package PaperTiger:MediaManager
* @author Paper Tiger
* @copyright Copyright (c) 2020 Paper Tiger
* @link https://www.papertiger.com/
*/

namespace papertiger\mediamanager\jobs;

use Craft;
use craft\helpers\Db;
use craft\queue\BaseJob;
use craft\elements\Entry;
use craft\elements\Asset;
use craft\elements\Tag;
use craft\helpers\ElementHelper;
use craft\helpers\Assets as AssetHelper;

use DateTime;
use papertiger\mediamanager\MediaManager;
use papertiger\mediamanager\helpers\SettingsHelper;

class IdentifyStaleMedia extends BaseJob
{

// Public Properties
// =========================================================================

/**
* @var string
*/
public string $date;

/**
* @var string
*/
public string $tags;

/**
* @var int
*/
public int $sectionId;

/**
* @var int|array
*/
public int|array $siteId;

// Public Methods
// =========================================================================

public function execute( $queue ): void
{

if (!$this->tags) {
// too generic, exit
return;
}


$relatedMediaObjects = Entry::find()->sectionId($this->sectionId)->lastSynced("< {$this->date}")->relatedTo(['and', $this->tags])->markedForDeletion(0)->siteId($this->siteId)->ids();

foreach($relatedMediaObjects as $media) {
if (!$this->_queueJobExists($media)) {
$queue = Craft::$app->getQueue();
$queue->push(new MarkStaleMedia(['entryId' => $media]));
}
}
}

// Protected Methods
// =========================================================================

protected function defaultDescription(): string
{
return Craft::t( 'mediamanager', "Marking entries for deletion." );
}

// Private Methods
// =========================================================================

private function _queueJobExists(int $entryId): bool
{
// Preflight check to ensure regular queue in place
if(!Craft::$app->queue->hasProperty('jobInfo')){
return false;
}

return in_array("Marking entry {$entryId} for deletion.", array_column(Craft::$app->queue->jobInfo, 'description'), true);
}
}
98 changes: 98 additions & 0 deletions src/jobs/MarkStaleMedia.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<?php
/**
* Media Manager
*
* @package PaperTiger:MediaManager
* @author Paper Tiger
* @copyright Copyright (c) 2020 Paper Tiger
* @link https://www.papertiger.com/
*/

namespace papertiger\mediamanager\jobs;

use Craft;
use craft\helpers\Db;
use craft\helpers\Json;
use craft\queue\BaseJob;
use craft\elements\Entry;
use craft\elements\Asset;
use craft\elements\Tag;
use craft\helpers\ElementHelper;
use craft\helpers\Assets as AssetHelper;

use DateTime;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Exception\RequestException;
use papertiger\mediamanager\MediaManager;
use papertiger\mediamanager\helpers\SettingsHelper;
use papertiger\mediamanager\services\Api;

class MarkStaleMedia extends BaseJob
{

// Public Properties
// =========================================================================

/**
* @var int
*/
public int $entryId;

// Public Methods
// =========================================================================

public function execute( $queue ): void
{
$entry = Entry::find()->id($this->entryId)->one();

if(!$entry) {
return;
}

$markForDeletion = 0;
// hit PBS API to check if there is data for this entry's api key
$client = Craft::createGuzzleClient();
$baseUrl = MediaManager::$plugin->api->getApiBaseUrl();
$apiAuth = MediaManager::$plugin->api->getApiAuth();

try {
$data = $client->get($baseUrl . "assets/" . $entry->mediaManagerId . "?platform-slug=bento&platform-slug=partnerplayer", $apiAuth);

$asset = Json::decode($data->getBody(), false);
if(isset($asset->data)){
if(!isset($asset->data->attributes->availabilities->public, $asset->data->attributes->availabilities->all_members)){
return;
}

if($asset->data->attributes->availabilities->public->start === null && $asset->data->attributes->availabilities->all_members->start === null){
$markForDeletion = 1;
}
}
} catch (ClientException $e) {
if ($e->getCode() === 404) {
$markForDeletion = 1;
}
} catch (RequestException $e) {
Craft::error($e->getMessage(), __METHOD__);
return;
}

// if data object is empty, return
Craft::warning("Marking entry ID {$entry->id} for deletion.", __METHOD__);
$entry->setFieldValue('markedForDeletion', $markForDeletion);
$entry->setFieldValue('lastSynced', (new DateTime()));
Craft::$app->getElements()->saveElement($entry);
}

// Protected Methods
// =========================================================================

protected function defaultDescription(): string
{
return Craft::t( 'mediamanager', "Marking entry {$this->entryId} for deletion." );
}

// Private Methods
// =========================================================================
}
Loading

0 comments on commit 8e23be2

Please sign in to comment.