Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
akrys committed Jul 3, 2016
2 parents 054ce7f + 8145013 commit 9ebbc0a
Show file tree
Hide file tree
Showing 16 changed files with 349 additions and 181 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
[english](README_en.md)

# Usage Check

Dieses Addon sucht nach Bildern, Module und Templates, die nicht (mehr) verwendet werden.
Expand Down
37 changes: 37 additions & 0 deletions README_en.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion akrys/redaxo/addon/UsageCheck/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class Config
*
* @var string
*/
const VERSION = '1.0 Beta 4';
const VERSION = '1.0 Beta 5';

/**
* release state
Expand Down
190 changes: 16 additions & 174 deletions akrys/redaxo/addon/UsageCheck/Modules/Pictures.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '';
Expand All @@ -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 ';
Expand All @@ -116,178 +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 = '';

$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_':
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;
}
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 {
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;
}

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 = <<<SQL
select f.name, t.label as type
from $metainfoFieldTable f
inner join $metainfoTypeTable t on t.id=f.type and t.label like '%MEDIA%'
SQL;
$names = $rexSQL->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 = <<<SQL
select f.name, t.label as type
from $metainfoFieldTable f
inner join $metainfoTypeTable t on t.id=f.type_id and t.label like '%MEDIA%'
SQL;

$names = $rexSQL->getArray($sql);
}
return $names;
}
protected abstract function getMetaNames();

/**
* SQL Partsfür XForm/YForm generieren.
Expand All @@ -303,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);
Expand Down
30 changes: 29 additions & 1 deletion akrys/redaxo/addon/UsageCheck/RedaxoCall.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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
Expand Down
Loading

0 comments on commit 9ebbc0a

Please sign in to comment.