Die folgende Erweiterung einer Core-Datei der Dateiverwaltung sorgt dafür, dass überprüft werden kann, ob
1)
eine Datei innerhalb des wysiwyg-Contents verwendet wird, sprich über den TinyMCE eingebunden wurde – dabei wird nicht nur die aktuelle Version des Webartikels geprüft sondern auch alte Versionen, die bei einer aktivierten Artikelversionierung (siehe "Administration -> System" im Reiter "Konfiguration") angelegt werden
2)
ein Bild über die Module "content_header_image" (anfangs "content_image") oder "content_teaser_config" aktuell eingebunden ist
3)
eine Datei über den Artikel-Reiter "Konfiguration" zugewiesen wurde.
Einbinden der Erweiterung
Im Verzeichnis "root->contenido/includes/" die Datei "include.upl_files_overview.php" öffnen. Bitte unbedingt eine Sicherung dieser Datei vor der Anpassung anlegen!
Im Quelltext der Datei nach "public function convert($field, $data)" suchen. In der Version 4.10.0 wird man in Zeile 358 fündig.
Einige Zeilen weiter unten nach diesen Infos schauen und ergänzen:
Code: Alles auswählen
[...]
public function convert($field, $data) {
[...]
$retValue = '<a class="jsZoom" href="' . $href . '">
<img class="hover" name="smallImage" alt="" src="' . $sCacheThumbnail . '" data-width="' . $iWidth . '" data-height="' . $iHeight . '">
<img class="preview" name="prevImage" alt="" src="' . $sCacheThumbnail . '">
</a>';
/******************** FILES IN USE? modifications begin ********************/
$parts_path_name = explode("/", $data);
$check_data=$parts_path_name= end($parts_path_name);
$retValue.='<br/>';
$inuse_url = $sess->url('main.php');
$retValue.='<a href="'.$inuse_url.'&area=upl&frame=4&path='.$path.'&startpage='.$_REQUEST['startpage'].'&check_file_inuse='.$check_data.'">';//.$inuse_url.'&area=upl&frame=4&path='.$path.'&startpage='.$_REQUEST[startpage].'&check_file_inuse='.$check_data;
$retValue.='<img src="images/info.gif" title="Datei in Benutzung?"/>';//.$check_data;
$retValue.='</a>';
if(htmlspecialchars(strip_tags($_GET['check_file_inuse']))!="" AND $check_data==htmlspecialchars(strip_tags($_GET['check_file_inuse']))) // delete second condition if all files of page should be checked
{
$arr_inuse=array();
$arr_inuse_version=array();
$arr_inuse_collection=array();
$arr_inuse_version_collection=array();
$arr_inuse_folder=array();
echo '<p><b>Suche nach Datei</b><br/>Berücksichtigt werden<ul><li>alle Dateien, die per wysiwyg-Editor erstellt wurden in der aktuellen sowie alten Versionen der Webartikel</li><li>Dateien, die per Artikel-Reiter "Konfiguration" zugewiesen wurden</li><li>Bilder, die per Modul "content_image" oder "content_teaser_config" eingebunden wurden</li></ul><table><tr style="background-color: #e2e2e2;"><td>Suche in DB-Tabelle</td><td>Suche nach</td><td>Funde</td><td>Prüfung nach</td></tr>';
//con_content
$search = "SELECT idartlang FROM con_content WHERE value LIKE '%$data%'";
$result = cRegistry::getDb();
$result->query($search);
$amount_of_hits=0;
while($result->nextRecord())
{
$amount_of_hits++;
$arr_inuse=$result->toArray();
$arr_inuse_collection[]=$arr_inuse['idartlang'];
}
echo '<tr><td>con_content</td><td>'.$data.'</td><td>'.$amount_of_hits.'</td><td>per wysiwyg eingebundene Dateien in der aktuellen Fassung</td></tr>';
//con_content_version
$search = "SELECT idartlang FROM con_content_version WHERE value LIKE '%$data%'";
$result = cRegistry::getDb();
$result->query($search);
$amount_of_hits=0;
while($result->nextRecord())
{
$amount_of_hits++;
$arr_inuse_version=$result->toArray();
$arr_inuse_version_collection[]=$arr_inuse_version['idartlang'];
}
$arr_inuse_version_collection=array_unique($arr_inuse_version_collection);
echo '<tr><td>con_content_version</td><td>'.$data.'</td><td>'.$amount_of_hits.'</td><td>per wysiwyg eingebundene Dateien in alten Versionen</td></tr>';
//content_image
$search="SELECT * FROM con_content,con_upl WHERE value=idupl AND filename='$check_data'";
$result = cRegistry::getDb();
$result->query($search);
$amount_of_hits=0;
while($result->nextRecord())
{
$amount_of_hits++;
$arr_inuse=$result->toArray();
$arr_inuse_collection[]=$arr_inuse['idartlang'];
}
echo '<tr><td>con_content,con_upl</td><td>'.$check_data.'</td><td>'.$amount_of_hits.'</td><td>per Modul "content_image" oder "content_teaser_config" eingebundene Bilder</td></tr>';
//con_container_conf - file
$search="SELECT * FROM con_container_conf WHERE container LIKE '%$check_data%'";
$result = cRegistry::getDb();
$result->query($search);
$amount_of_hits=0;
while($result->nextRecord())
{
$arr_idtplcfg=$result->toArray();
$search2="SELECT * FROM con_art_lang WHERE idtplcfg='$arr_idtplcfg[idtplcfg]'";
$result2 = cRegistry::getDb();
$result2->query($search2);
while($result2->nextRecord())
{
$amount_of_hits++;
$arr_inuse=$result2->toArray();
$arr_inuse_collection[]=$arr_inuse['idartlang'];
}
}
echo '<tr><td>con_container_conf</td><td>'.$check_data.'</td><td>'.$amount_of_hits.'</td><td>über den Artikel-Reiter "Konfiguration" zugewiesene Dateien</td></tr></table></p>';
$arr_inuse_collection=array_unique($arr_inuse_collection);
echo '<p><b>Verwendung</b><br/><img src="' . $sCacheThumbnail . '"><br/><br/><span style="background-color: #e2e2e2;">idarts der Artikel, in denen die Datei "'.$check_data.'" aktuell verwendet wird</span><br/>';
if(count($arr_inuse_collection)>0) foreach($arr_inuse_collection AS $element) echo'<a href="'.$cfgClient[$client]["path"]["htmlpath"].'front_content.php?idart='.$element.'" target="_blank">'.$element.'</a> | ';
else echo 'keine';
echo '<br/><span style="background-color: #e2e2e2;">oder wurde</span><br/>';
if(count($arr_inuse_version_collection)>0)
{
foreach($arr_inuse_version_collection AS $element) echo '<a href="'.$cfgClient[$client]["path"]["htmlpath"].'front_content.php?idart='.$element.'" target="_blank">'.$element.'</a> | ';
echo '<br/>';
}
else echo 'keine<br/>';
echo '</p>';
}
/******************** FILES IN USE? modifications end ********************/
return $retValue;
break;
default:
$sCacheThumbnail = uplGetThumbnail($data, 150);
return '<img class="hover_none" name="smallImage" alt="" src="' . $sCacheThumbnail . '">';
}
}
return $data;
}
[...]
Was ist mit anderweitig eingebundenen Dateien?
Zum Beispiel Dateien, die in Bildergalerien verwendet werden.
Das ist schwierig und einfach zugleich. Diese Core-Erweiterung kann nur Dinge berücksichtigen, die in allen mit CONTENIDO 4.10 umgesetzten Websites vorkommen. Ideal wäre es natürlich, wenn sämtliche Möglichkeiten Dateien einzubinden geprüft würden. Aber da Module und Plugins aus der Feder von verschiedensten Entwicklern stammen, ist es unmöglich die Verwendung der Dateien vorherzusehen und eine allgemeingültige, verlässliche Prüfroutine zu entwickeln.
Dieses Manko kann aber größtenteils umgangen werden, indem man die Ordnerstruktur in der Dateiverwaltung sinnvoll aufbauen. Im Fall der Bildergalerien zum Beispiel sollte man die dort verwendeten Bilder eindeutig von den übrigen trennen. So weiß man immer, dass die in diesen Ordnern genutzten Dateien ausschließlich in einer Galerie genutzt werden. Und wenn die Galerie nicht mehr online ist, können die Bilder natürlich gelöscht werden.
Die Prüfung auf weitere Dateitypen ausweiten
Sofern man nicht nur die Verwendung von Bildern sondern zum Beispiel auch von PDF-Dateien prüfen will (was Sinn macht, denn die werden schließlich oft genug verlinkt) muss die Datei "include.upl_files_overview.php" noch einmal um diese Zeilen erweitert werden:
Code: Alles auswählen
[...]
switch ($fileType) {
case 'png':
case 'gif':
case 'tiff':
case 'bmp':
case 'jpeg':
case 'jpg':
case 'iff':
case 'xbm':
case 'wbmp':
/******************** FILES IN USE? modifications begin ********************/
case 'pdf':
/******************** FILES IN USE? modifications end ********************/
$frontendURL = cRegistry::getFrontendUrl();
[...]