From a8ae0f9a80ff39131a84e066a088eb66d3f3bf3c Mon Sep 17 00:00:00 2001 From: Axel Krysztofiak Date: Sat, 11 Jun 2016 19:02:28 +0200 Subject: [PATCH 1/5] =?UTF-8?q?Datei-Metadaten=20ber=C3=BCcksichtigen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anpassungen für Redaxo 4 Todo: Anpassungen für Redaxo 5 #4 --- akrys/redaxo/addon/UsageCheck/Config.php | 2 +- .../addon/UsageCheck/Modules/Pictures.php | 19 +++++++++- akrys/redaxo/addon/UsageCheck/RedaxoCall.php | 28 ++++++++++++++ general/config.inc.php | 2 +- lang/de_de_utf8.lang | 1 + lang/en_gb_utf8.lang | 1 + package.yml | 2 +- pages/_picture.php | 37 ++++++++++++++++++- ....0 Beta-4.php => 2016-05-22_1.0 Beta4.php} | 0 pages/release_notes/de/_1.0 Beta5.php | 4 ++ ....0 Beta-4.php => 2016-05-22_1.0 Beta4.php} | 0 pages/release_notes/en/_1.0 Beta5.php | 4 ++ 12 files changed, 94 insertions(+), 6 deletions(-) rename pages/release_notes/de/{2016-05-22_1.0 Beta-4.php => 2016-05-22_1.0 Beta4.php} (100%) create mode 100644 pages/release_notes/de/_1.0 Beta5.php rename pages/release_notes/en/{2016-05-22_1.0 Beta-4.php => 2016-05-22_1.0 Beta4.php} (100%) create mode 100644 pages/release_notes/en/_1.0 Beta5.php diff --git a/akrys/redaxo/addon/UsageCheck/Config.php b/akrys/redaxo/addon/UsageCheck/Config.php index e9d2a20..7e7a815 100644 --- a/akrys/redaxo/addon/UsageCheck/Config.php +++ b/akrys/redaxo/addon/UsageCheck/Config.php @@ -33,7 +33,7 @@ class Config * * @var string */ - const VERSION = '1.0 Beta 4'; + const VERSION = '1.0 Beta 5'; /** * release state diff --git a/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php b/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php index 124cd2b..2a8ace6 100644 --- a/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php +++ b/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php @@ -100,7 +100,7 @@ public function getPictures($show_all = false) if (!$show_all) { $sql.='where s.id is null '; - $havingClauses[] = 'metaCatIDs is null and metaArtIds is null '; + $havingClauses[] = 'metaCatIDs is null and metaArtIDs is null and metaMedIDs is null'; } $sql.='group by f.filename '; @@ -127,6 +127,7 @@ protected function getMetaTableSQLParts() $joinArtMeta = ''; $joinCatMeta = ''; + $joinMedMeta = ''; $names = self::getMetaNames(); @@ -144,8 +145,8 @@ protected function getMetaTableSQLParts() if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { $fieldname = 'joinArtMeta'; $tableName = 'rex_article_art_meta'; + $continue = false; } - $continue = false; break; case 'cat_': if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { @@ -155,6 +156,12 @@ protected function getMetaTableSQLParts() } break; case 'med_': + if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { + $fieldname = 'joinMedMeta'; + $tableName = 'rex_article_med_meta'; + $continue = false; + } + break; default: break; @@ -193,6 +200,14 @@ protected function getMetaTableSQLParts() $return['additionalJoins'].='LEFT join rex_article as rex_article_cat_meta on (rex_article_cat_meta.id is not null and ('.$joinCatMeta.'))'.PHP_EOL; $return['additionalSelect'].=',group_concat(distinct concat(rex_article_cat_meta.id,"\t",rex_article_cat_meta.catname,"\t",rex_article_cat_meta.clang,"\t",rex_article_cat_meta.parent_id) Separator "\n") as metaCatIDs '.PHP_EOL; } + + if ($joinMedMeta == '') { + $return['additionalSelect'].=',null as metaMedIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_file as rex_article_med_meta on (rex_article_med_meta.file_id is not null and ('.$joinMedMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_med_meta.file_id,"\t",rex_article_med_meta.category_id,"\t",rex_article_med_meta.filename) Separator "\n") as metaMedIDs '.PHP_EOL; + } + break; case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_5: $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); diff --git a/akrys/redaxo/addon/UsageCheck/RedaxoCall.php b/akrys/redaxo/addon/UsageCheck/RedaxoCall.php index 4f01a61..4d62a6e 100644 --- a/akrys/redaxo/addon/UsageCheck/RedaxoCall.php +++ b/akrys/redaxo/addon/UsageCheck/RedaxoCall.php @@ -364,6 +364,34 @@ public static function hasCategoryPerm($articleID) return $hasPerm; } + /** + * Kategorie-Rechte an einem Medium abfragen + * @global array $REX + * @param int $catID + * @return boolean + */ + public static function hasMediaCategoryPerm($catID) + { + $hasPerm = false; + switch (RedaxoCall::getRedaxoVersion()) { + case RedaxoCall::REDAXO_VERSION_4: + if ($GLOBALS['REX']['USER']->isAdmin() || $GLOBALS['REX']['USER']->hasPerm('media[0]')) { + return true; + } + + if ($GLOBALS['REX']['USER']->hasPerm('media['.$catID.']')) { + $hasPerm = true; + } + break; + case RedaxoCall::REDAXO_VERSION_5: + $user = \rex::getUser(); + $perm = \rex_structure_perm::get($user, 'media'); + $hasPerm = $perm->hasCategoryPerm($catID); + break; + } + return $hasPerm; + } + /** * URL zur Bearbeitung der Artikel-Metadaten. * @param int $articleID diff --git a/general/config.inc.php b/general/config.inc.php index decc67c..36ece98 100644 --- a/general/config.inc.php +++ b/general/config.inc.php @@ -17,7 +17,7 @@ $REX['ADDON']['rxid'][Config::NAME] = Config::ID; $REX['ADDON']['name'][Config::NAME] = 'Usage Check'; $REX['ADDON']['perm'][Config::NAME] = 'usage_check[]'; - $REX['ADDON']['version'][Config::NAME] = '1.0-Beta4'; + $REX['ADDON']['version'][Config::NAME] = '1.0-Beta5'; $REX['ADDON']['author'][Config::NAME] = 'Axel Krysztofiak '; $REX['ADDON']['supportpage'][Config::NAME] = 'https://github.com/akrys/redaxo-usage_check'; $REX['PERM'][] = 'usage_check[]'; diff --git a/lang/de_de_utf8.lang b/lang/de_de_utf8.lang index dd9896e..7f4f179 100644 --- a/lang/de_de_utf8.lang +++ b/lang/de_de_utf8.lang @@ -36,6 +36,7 @@ akrys_usagecheck_images_linktext_edit_in_metadata = In den Metadaten bearbeiten akrys_usagecheck_images_linktext_edit_in_metadata_art = In den Artikel-Metadaten bearbeiten (ID: $articleID$, Artikel: "$articleName$") akrys_usagecheck_images_linktext_edit_in_metadata_cat = In den Kategorie-Metadaten bearbeiten (ID: $articleID$, Artikel: "$articleName$")
Bitte dort den "Plus"-Button klicken akrys_usagecheck_images_linktext_edit_in_xformtable = In Tabelle "$tableName$" bearbeiten (ID: $entryID$) +akrys_usagecheck_images_linktext_edit_in_metadata_med = In Datei "$filename$" bearbeiten akrys_usagecheck_module_subpagetitle = Module diff --git a/lang/en_gb_utf8.lang b/lang/en_gb_utf8.lang index c9a98c6..7de765b 100644 --- a/lang/en_gb_utf8.lang +++ b/lang/en_gb_utf8.lang @@ -35,6 +35,7 @@ akrys_usagecheck_images_linktext_edit_in_slice = edit in original slice (ID: $sl akrys_usagecheck_images_linktext_edit_in_metadata_art = edit in article metadata (ID: $articleID$, article: "$articleName$") akrys_usagecheck_images_linktext_edit_in_metadata_cat = edit in category metadata (ID: $articleID$, category: "$articleName$")
Please click on the "plus sign" button there akrys_usagecheck_images_linktext_edit_in_xformtable = edit in table "$tableName$" (ID: $entryID$) +akrys_usagecheck_images_linktext_edit_in_metadata_med = edit in file "$filename$" akrys_usagecheck_module_subpagetitle = Modules diff --git a/package.yml b/package.yml index eee93e3..f7f962f 100644 --- a/package.yml +++ b/package.yml @@ -1,5 +1,5 @@ package: usage_check -version: '1.0-Beta4' +version: '1.0-Beta5' author: Axel Krysztofiak supportpage: https://github.com/akrys/redaxo-usage_check #load: early diff --git a/pages/_picture.php b/pages/_picture.php index d7d3686..f7b9e31 100644 --- a/pages/_picture.php +++ b/pages/_picture.php @@ -55,7 +55,7 @@ outputImagePreview($item); + $pictures->outputImagePreview($item); ?>
@@ -92,6 +92,10 @@ $used = true; } + if ($item['metaMedIDs'] !== null) { + $used = true; + } + $errors = array(); if ($used === false) { $errors[] = RedaxoCall::i18nMsg('akrys_usagecheck_images_msg_not_used'); @@ -238,6 +242,37 @@ } } + if ($item['metaMedIDs'] !== null) { + + $usages = explode("\n", $item['metaMedIDs']); + $linktextRaw = RedaxoCall::i18nMsg('akrys_usagecheck_images_linktext_edit_in_metadata_med'); + foreach ($usages as $usage) { + $mediaData = explode("\t", $usage); + + + + //file_id,"\t",category_id,"\t",filename + $fileID = $mediaData[0]; + $fileCatID = $mediaData[1]; + $filename = $mediaData[2]; + + $hasPerm = RedaxoCall::hasMediaCategoryPerm($fileCatID); + $hasPerm = true; + + if ($hasPerm) { + $linktext = $linktextRaw; + $linktext = str_replace('$filename$', $filename, $linktext); + $href = "index.php?page=mediapool&subpage=detail&file_name=".$filename; + ?> + +
  • + + +
  • Datei-Metadaten durchsuchen
  • + diff --git a/pages/release_notes/en/2016-05-22_1.0 Beta-4.php b/pages/release_notes/en/2016-05-22_1.0 Beta4.php similarity index 100% rename from pages/release_notes/en/2016-05-22_1.0 Beta-4.php rename to pages/release_notes/en/2016-05-22_1.0 Beta4.php diff --git a/pages/release_notes/en/_1.0 Beta5.php b/pages/release_notes/en/_1.0 Beta5.php new file mode 100644 index 0000000..c7c0cc2 --- /dev/null +++ b/pages/release_notes/en/_1.0 Beta5.php @@ -0,0 +1,4 @@ + + From fef1fecd4b4257b34368ff741188a4ba75b2bd5f Mon Sep 17 00:00:00 2001 From: Axel Krysztofiak Date: Sat, 2 Jul 2016 14:57:55 +0200 Subject: [PATCH 2/5] Umsetzung Redaxo 5 #4 --- akrys/redaxo/addon/UsageCheck/Modules/Pictures.php | 10 +++++++++- akrys/redaxo/addon/UsageCheck/RedaxoCall.php | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php b/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php index 2a8ace6..4584f24 100644 --- a/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php +++ b/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php @@ -222,6 +222,9 @@ protected function getMetaTableSQLParts() } else if (preg_match('/'.preg_quote(\rex_metainfo_category_handler::PREFIX, '/').'/', $name['name'])) { $fieldname = 'joinCatMeta'; $tableName = 'rex_article_cat_meta'; + } else if (preg_match('/'.preg_quote(\rex_metainfo_media_handler::PREFIX, '/').'/', $name['name'])) { + $fieldname = 'joinMedMeta'; + $tableName = 'rex_article_med_meta'; } else { continue; } @@ -255,7 +258,12 @@ protected function getMetaTableSQLParts() $return['additionalJoins'].='LEFT join rex_article as rex_article_cat_meta on (rex_article_cat_meta.id is not null and ('.$joinCatMeta.'))'.PHP_EOL; $return['additionalSelect'].=',group_concat(distinct concat(rex_article_cat_meta.id,"\t",rex_article_cat_meta.catname,"\t",rex_article_cat_meta.clang_id,"\t",rex_article_cat_meta.parent_id) Separator "\n") as metaCatIDs '.PHP_EOL; } - + if ($joinMedMeta == '') { + $return['additionalSelect'].=',null as metaMedIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_media as rex_article_med_meta on (rex_article_med_meta.id is not null and ('.$joinMedMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_med_meta.id,"\t",rex_article_med_meta.category_id,"\t",rex_article_med_meta.filename) Separator "\n") as metaMedIDs '.PHP_EOL; + } break; } diff --git a/akrys/redaxo/addon/UsageCheck/RedaxoCall.php b/akrys/redaxo/addon/UsageCheck/RedaxoCall.php index 4d62a6e..a0c911a 100644 --- a/akrys/redaxo/addon/UsageCheck/RedaxoCall.php +++ b/akrys/redaxo/addon/UsageCheck/RedaxoCall.php @@ -63,7 +63,7 @@ public static function getLang() case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_4: $out = $GLOBALS['REX']['LANG']; break; - case\akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_5: + case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_5: $out = \rex::getProperty('lang'); break; } From 9729d67f1f0e24ef3d7ed2f95e1b306379940d68 Mon Sep 17 00:00:00 2001 From: Axel Krysztofiak Date: Sat, 2 Jul 2016 15:19:43 +0200 Subject: [PATCH 3/5] =?UTF-8?q?Code=20aufr=C3=A4umen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #4 --- .../addon/UsageCheck/Modules/Pictures.php | 211 ++---------------- .../UsageCheck/RexV4/Modules/Pictures.php | 116 ++++++++++ .../UsageCheck/RexV5/Modules/Pictures.php | 96 ++++++++ 3 files changed, 227 insertions(+), 196 deletions(-) diff --git a/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php b/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php index 4584f24..17eedaf 100644 --- a/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php +++ b/akrys/redaxo/addon/UsageCheck/Modules/Pictures.php @@ -77,8 +77,8 @@ public function getPictures($show_all = false) $rexSQL = \rex_sql::factory(); } - $sqlPartsXForm = self::getXFormTableSQLParts(); - $sqlPartsMeta = self::getMetaTableSQLParts(); + $sqlPartsXForm = $this->getXFormTableSQLParts(); + $sqlPartsMeta = $this->getMetaTableSQLParts(); $havingClauses = array(); $additionalSelect = ''; @@ -116,201 +116,13 @@ public function getPictures($show_all = false) * SQL Parts für die Metadaten generieren * @return array */ - protected function getMetaTableSQLParts() - { - $return = array( - 'additionalSelect' => '', - 'additionalJoins' => '', - 'tableFields' => array(), - 'havingClauses' => array(), - ); - - $joinArtMeta = ''; - $joinCatMeta = ''; - $joinMedMeta = ''; - - $names = self::getMetaNames(); - - switch (\akrys\redaxo\addon\UsageCheck\RedaxoCall::getRedaxoVersion()) { - case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_4: - $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); - $metainfoFieldTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('62_params'); - $metainfoTypeTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('62_type'); - - foreach ($names as $name) { - foreach ($GLOBALS['REX']['ADDON']['prefixes']['metainfo'] as $key => $value) { - $continue = true; - switch ($value) { - case 'art_': - if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { - $fieldname = 'joinArtMeta'; - $tableName = 'rex_article_art_meta'; - $continue = false; - } - break; - case 'cat_': - if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { - $fieldname = 'joinCatMeta'; - $tableName = 'rex_article_cat_meta'; - $continue = false; - } - break; - case 'med_': - if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { - $fieldname = 'joinMedMeta'; - $tableName = 'rex_article_med_meta'; - $continue = false; - } - break; - default: - - break; - } - if ($continue) { - continue 1; - } - - switch ($name['type']) { - case 'REX_MEDIA_BUTTON': - if ($$fieldname != '') { - $$fieldname.=' or '; - } - $$fieldname.=''.$tableName.'.'.$name['name'].' = f.filename'; - break; - case 'REX_MEDIALIST_BUTTON': - if ($$fieldname != '') { - $$fieldname.=' or '; - } - $$fieldname.='FIND_IN_SET(f.filename, '.$tableName.'.'.$name['name'].')'; - break; - } - } - } - - if ($joinArtMeta == '') { - $return['additionalSelect'].=',null as metaArtIDs '.PHP_EOL; - } else { - $return['additionalJoins'].='LEFT join rex_article as rex_article_art_meta on (rex_article_art_meta.id is not null and ('.$joinArtMeta.'))'.PHP_EOL; - $return['additionalSelect'].=',group_concat(distinct concat(rex_article_art_meta.id,"\t",rex_article_art_meta.name,"\t",rex_article_art_meta.clang) Separator "\n") as metaArtIDs '.PHP_EOL; - } - - if ($joinCatMeta == '') { - $return['additionalSelect'].=',null as metaCatIDs '.PHP_EOL; - } else { - $return['additionalJoins'].='LEFT join rex_article as rex_article_cat_meta on (rex_article_cat_meta.id is not null and ('.$joinCatMeta.'))'.PHP_EOL; - $return['additionalSelect'].=',group_concat(distinct concat(rex_article_cat_meta.id,"\t",rex_article_cat_meta.catname,"\t",rex_article_cat_meta.clang,"\t",rex_article_cat_meta.parent_id) Separator "\n") as metaCatIDs '.PHP_EOL; - } - - if ($joinMedMeta == '') { - $return['additionalSelect'].=',null as metaMedIDs '.PHP_EOL; - } else { - $return['additionalJoins'].='LEFT join rex_file as rex_article_med_meta on (rex_article_med_meta.file_id is not null and ('.$joinMedMeta.'))'.PHP_EOL; - $return['additionalSelect'].=',group_concat(distinct concat(rex_article_med_meta.file_id,"\t",rex_article_med_meta.category_id,"\t",rex_article_med_meta.filename) Separator "\n") as metaMedIDs '.PHP_EOL; - } - - break; - case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_5: - $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); - $metainfoFieldTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('metainfo_field'); - $metainfoTypeTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('metainfo_type'); - - foreach ($names as $name) { - - if (preg_match('/'.preg_quote(\rex_metainfo_article_handler::PREFIX, '/').'/', $name['name'])) { - $fieldname = 'joinArtMeta'; - $tableName = 'rex_article_art_meta'; - } else if (preg_match('/'.preg_quote(\rex_metainfo_category_handler::PREFIX, '/').'/', $name['name'])) { - $fieldname = 'joinCatMeta'; - $tableName = 'rex_article_cat_meta'; - } else if (preg_match('/'.preg_quote(\rex_metainfo_media_handler::PREFIX, '/').'/', $name['name'])) { - $fieldname = 'joinMedMeta'; - $tableName = 'rex_article_med_meta'; - } else { - continue; - } - - switch ($name['type']) { - case 'REX_MEDIA_WIDGET': - if ($$fieldname != '') { - $$fieldname.=' or '; - } - $$fieldname.=''.$tableName.'.'.$name['name'].' = f.filename'; - break; - case 'REX_MEDIALIST_WIDGET': - if ($$fieldname != '') { - $$fieldname.=' or '; - } - $$fieldname.='FIND_IN_SET(f.filename, '.$tableName.'.'.$name['name'].')'; - break; - } - } - - if ($joinArtMeta == '') { - $return['additionalSelect'].=',null as metaArtIDs '.PHP_EOL; - } else { - $return['additionalJoins'].='LEFT join rex_article as rex_article_art_meta on (rex_article_art_meta.id is not null and ('.$joinArtMeta.'))'.PHP_EOL; - $return['additionalSelect'].=',group_concat(distinct concat(rex_article_art_meta.id,"\t",rex_article_art_meta.name,"\t",rex_article_art_meta.clang_id) Separator "\n") as metaArtIDs '.PHP_EOL; - } - - if ($joinCatMeta == '') { - $return['additionalSelect'].=',null as metaCatIDs '.PHP_EOL; - } else { - $return['additionalJoins'].='LEFT join rex_article as rex_article_cat_meta on (rex_article_cat_meta.id is not null and ('.$joinCatMeta.'))'.PHP_EOL; - $return['additionalSelect'].=',group_concat(distinct concat(rex_article_cat_meta.id,"\t",rex_article_cat_meta.catname,"\t",rex_article_cat_meta.clang_id,"\t",rex_article_cat_meta.parent_id) Separator "\n") as metaCatIDs '.PHP_EOL; - } - if ($joinMedMeta == '') { - $return['additionalSelect'].=',null as metaMedIDs '.PHP_EOL; - } else { - $return['additionalJoins'].='LEFT join rex_media as rex_article_med_meta on (rex_article_med_meta.id is not null and ('.$joinMedMeta.'))'.PHP_EOL; - $return['additionalSelect'].=',group_concat(distinct concat(rex_article_med_meta.id,"\t",rex_article_med_meta.category_id,"\t",rex_article_med_meta.filename) Separator "\n") as metaMedIDs '.PHP_EOL; - } - break; - } - - return $return; - } + protected abstract function getMetaTableSQLParts(); /** * Meta-Bildfelder ermitteln. * @return array */ - protected function getMetaNames() - { - switch (\akrys\redaxo\addon\UsageCheck\RedaxoCall::getRedaxoVersion()) { - case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_4: - $rexSQL = new \rex_sql; - - $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); - $metainfoFieldTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('62_params'); - $metainfoTypeTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('62_type'); - - $sql = <<getArray($sql); - - break; - case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_5: - $rexSQL = \rex_sql::factory(); - - $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); - $metainfoFieldTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('metainfo_field'); - $metainfoTypeTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('metainfo_type'); - - $sql = <<getArray($sql); - } - return $names; - } + protected abstract function getMetaNames(); /** * SQL Partsfür XForm/YForm generieren. @@ -326,10 +138,17 @@ protected function getXFormTableSQLParts() 'tableFields' => array(), 'havingClauses' => array(), ); - if (\akrys\redaxo\addon\UsageCheck\RedaxoCall::getRedaxoVersion() == \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_4) { - $rexSQL = new \rex_sql; - } else { - $rexSQL = \rex_sql::factory(); + + switch (\akrys\redaxo\addon\UsageCheck\RedaxoCall::getRedaxoVersion()) { + case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_4: + $rexSQL = new \rex_sql; + break; + case \akrys\redaxo\addon\UsageCheck\RedaxoCall::REDAXO_VERSION_5: + $rexSQL = \rex_sql::factory(); + break; + default: + throw new \Exception('no database class created'); + break; } $tables = $this->getXFormSQL($return); diff --git a/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php b/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php index 5dce116..545f392 100644 --- a/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php +++ b/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php @@ -190,4 +190,120 @@ public function outputMenu($subpage, $showAllParam, $showAllLinktext) '', + 'additionalJoins' => '', + 'tableFields' => array(), + 'havingClauses' => array(), + ); + + $joinArtMeta = ''; + $joinCatMeta = ''; + $joinMedMeta = ''; + + $names = $this->getMetaNames(); + + foreach ($names as $name) { + foreach ($GLOBALS['REX']['ADDON']['prefixes']['metainfo'] as $key => $value) { + $continue = true; + switch ($value) { + case 'art_': + if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { + $fieldname = 'joinArtMeta'; + $tableName = 'rex_article_art_meta'; + $continue = false; + } + break; + case 'cat_': + if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { + $fieldname = 'joinCatMeta'; + $tableName = 'rex_article_cat_meta'; + $continue = false; + } + break; + case 'med_': + if (preg_match('/'.preg_quote($value, '/').'/', $name['name'])) { + $fieldname = 'joinMedMeta'; + $tableName = 'rex_article_med_meta'; + $continue = false; + } + break; + default: + + break; + } + if ($continue) { + continue 1; + } + + switch ($name['type']) { + case 'REX_MEDIA_BUTTON': + if ($$fieldname != '') { + $$fieldname.=' or '; + } + $$fieldname.=''.$tableName.'.'.$name['name'].' = f.filename'; + break; + case 'REX_MEDIALIST_BUTTON': + if ($$fieldname != '') { + $$fieldname.=' or '; + } + $$fieldname.='FIND_IN_SET(f.filename, '.$tableName.'.'.$name['name'].')'; + break; + } + } + } + + if ($joinArtMeta == '') { + $return['additionalSelect'].=',null as metaArtIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_article as rex_article_art_meta on (rex_article_art_meta.id is not null and ('.$joinArtMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_art_meta.id,"\t",rex_article_art_meta.name,"\t",rex_article_art_meta.clang) Separator "\n") as metaArtIDs '.PHP_EOL; + } + + if ($joinCatMeta == '') { + $return['additionalSelect'].=',null as metaCatIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_article as rex_article_cat_meta on (rex_article_cat_meta.id is not null and ('.$joinCatMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_cat_meta.id,"\t",rex_article_cat_meta.catname,"\t",rex_article_cat_meta.clang,"\t",rex_article_cat_meta.parent_id) Separator "\n") as metaCatIDs '.PHP_EOL; + } + + if ($joinMedMeta == '') { + $return['additionalSelect'].=',null as metaMedIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_file as rex_article_med_meta on (rex_article_med_meta.file_id is not null and ('.$joinMedMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_med_meta.file_id,"\t",rex_article_med_meta.category_id,"\t",rex_article_med_meta.filename) Separator "\n") as metaMedIDs '.PHP_EOL; + } + + return $return; + } + + /** + * Meta-Bildfelder ermitteln. + * @return array + */ + protected function getMetaNames() + { + $rexSQL = new \rex_sql; + + $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); + $metainfoFieldTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('62_params'); + $metainfoTypeTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('62_type'); + + $sql = <<getArray($sql); + + return $names; + } } diff --git a/akrys/redaxo/addon/UsageCheck/RexV5/Modules/Pictures.php b/akrys/redaxo/addon/UsageCheck/RexV5/Modules/Pictures.php index ed8a0c0..5c1bc8b 100644 --- a/akrys/redaxo/addon/UsageCheck/RexV5/Modules/Pictures.php +++ b/akrys/redaxo/addon/UsageCheck/RexV5/Modules/Pictures.php @@ -189,4 +189,100 @@ public function outputMenu($subpage, $showAllParam, $showAllLinktext) '', + 'additionalJoins' => '', + 'tableFields' => array(), + 'havingClauses' => array(), + ); + + $joinArtMeta = ''; + $joinCatMeta = ''; + $joinMedMeta = ''; + + $names = $this->getMetaNames(); + + foreach ($names as $name) { + if (preg_match('/'.preg_quote(\rex_metainfo_article_handler::PREFIX, '/').'/', $name['name'])) { + $fieldname = 'joinArtMeta'; + $tableName = 'rex_article_art_meta'; + } else if (preg_match('/'.preg_quote(\rex_metainfo_category_handler::PREFIX, '/').'/', $name['name'])) { + $fieldname = 'joinCatMeta'; + $tableName = 'rex_article_cat_meta'; + } else if (preg_match('/'.preg_quote(\rex_metainfo_media_handler::PREFIX, '/').'/', $name['name'])) { + $fieldname = 'joinMedMeta'; + $tableName = 'rex_article_med_meta'; + } else { + continue; + } + + switch ($name['type']) { + case 'REX_MEDIA_WIDGET': + if ($$fieldname != '') { + $$fieldname.=' or '; + } + $$fieldname.=''.$tableName.'.'.$name['name'].' = f.filename'; + break; + case 'REX_MEDIALIST_WIDGET': + if ($$fieldname != '') { + $$fieldname.=' or '; + } + $$fieldname.='FIND_IN_SET(f.filename, '.$tableName.'.'.$name['name'].')'; + break; + } + } + + if ($joinArtMeta == '') { + $return['additionalSelect'].=',null as metaArtIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_article as rex_article_art_meta on (rex_article_art_meta.id is not null and ('.$joinArtMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_art_meta.id,"\t",rex_article_art_meta.name,"\t",rex_article_art_meta.clang_id) Separator "\n") as metaArtIDs '.PHP_EOL; + } + + if ($joinCatMeta == '') { + $return['additionalSelect'].=',null as metaCatIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_article as rex_article_cat_meta on (rex_article_cat_meta.id is not null and ('.$joinCatMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_cat_meta.id,"\t",rex_article_cat_meta.catname,"\t",rex_article_cat_meta.clang_id,"\t",rex_article_cat_meta.parent_id) Separator "\n") as metaCatIDs '.PHP_EOL; + } + if ($joinMedMeta == '') { + $return['additionalSelect'].=',null as metaMedIDs '.PHP_EOL; + } else { + $return['additionalJoins'].='LEFT join rex_media as rex_article_med_meta on (rex_article_med_meta.id is not null and ('.$joinMedMeta.'))'.PHP_EOL; + $return['additionalSelect'].=',group_concat(distinct concat(rex_article_med_meta.id,"\t",rex_article_med_meta.category_id,"\t",rex_article_med_meta.filename) Separator "\n") as metaMedIDs '.PHP_EOL; + } + + return $return; + } + + /** + * Meta-Bildfelder ermitteln. + * @return array + */ + protected function getMetaNames() + { + $rexSQL = \rex_sql::factory(); + + $articleTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('article'); + $metainfoFieldTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('metainfo_field'); + $metainfoTypeTable = \akrys\redaxo\addon\UsageCheck\RedaxoCall::getTable('metainfo_type'); + + $sql = <<getArray($sql); + + return $names; + } } From b1ebf938268ca1a133b4ff37b1c5c65cfeafd3d7 Mon Sep 17 00:00:00 2001 From: Axel Krysztofiak Date: Sat, 2 Jul 2016 17:04:17 +0200 Subject: [PATCH 4/5] gecachte Bilder aus dem Medienpool nutzen und nicht die originale #7 --- akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php | 2 +- akrys/redaxo/addon/UsageCheck/RexV5/Modules/Pictures.php | 2 +- pages/release_notes/de/_1.0 Beta5.php | 1 + pages/release_notes/en/_1.0 Beta5.php | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php b/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php index 545f392..7d533e3 100644 --- a/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php +++ b/akrys/redaxo/addon/UsageCheck/RexV4/Modules/Pictures.php @@ -165,7 +165,7 @@ public function outputImagePreview($item) if (stristr($item['filetype'], 'image/')) { ?> - +

    - +

  • Datei-Metadaten durchsuchen
  • +
  • Mediapool-Vorschau anstatt der Originalbilder zur Anzeige verwenden
  • diff --git a/pages/release_notes/en/_1.0 Beta5.php b/pages/release_notes/en/_1.0 Beta5.php index c7c0cc2..7a8ac50 100644 --- a/pages/release_notes/en/_1.0 Beta5.php +++ b/pages/release_notes/en/_1.0 Beta5.php @@ -1,4 +1,5 @@
    • check file meta data for unused files
    • +
    • use mediapool preview images instead of originals
    From f7e86fc54a275d5256bde097167c37457c00dd33 Mon Sep 17 00:00:00 2001 From: Axel Krysztofiak Date: Sat, 2 Jul 2016 18:46:37 +0200 Subject: [PATCH 5/5] =?UTF-8?q?englischer=20Begleittext,=20da=20auch=20das?= =?UTF-8?q?=20addon=20eine=20englische=20=C3=BCbersetzung=20unterst=C3=BCt?= =?UTF-8?q?zt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ README_en.md | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 README_en.md diff --git a/README.md b/README.md index 4dcb86e..6cc5eae 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[english](README_en.md) + # Usage Check Dieses Addon sucht nach Bildern, Module und Templates, die nicht (mehr) verwendet werden. diff --git a/README_en.md b/README_en.md new file mode 100644 index 0000000..029b73c --- /dev/null +++ b/README_en.md @@ -0,0 +1,37 @@ +# Usage Check + +This addon searches for pictures, modules and templates that are not used anymore. + +## Installation + +All files are directly included and can be moved to +`redaxo/inlcude/addons/usage_check` (using Redaxo 4.x) or +`redaxo/src/addons/usage_check` (using Redaxo 5.x) + +The directory itself (`usage_check`) is not included. +Why? If you like, you can check out this repository to the right directory. This +would be impossible, if I included the `usage_check` folder. + +You can also download the ZIP archive from here. The unzipped files can be moved +to the right destination depending on your Redaxo copy version. + +After copying the files you'll need to install and activate this addon using +the Redaxo backend. + +## Compatibility +- PHP version: __5.3.2__ or later +- tested on Redaxo versions __4.3.2__, __4.4.1__, __4.5__, __4.6.1__, __5.0.1__, __5.1__ + +This addon works with Redaxo 4 and Redaxo 5 + +##Language file notice + +The folder `usage_check/lang` needs writing rights for your PHP / Apache user. + +Reason: I'm using `de_de_utf8.lang` and `en_gb_utf8.lang` only. + +Redaxo usually needs the language files `de_de.lang` and `en_gb.lang`. +Redaxo 4 needs these files in __ISO-8859-1__, Redaxo 5 in __UTF-8__. So I +decided to use the old `xx_yy_utf8.lang` files as these are always UTF-8. +These have to be converted according to the used Redaxo version. That's why it +needs writing rights.