inuse - Ist die Datei in Benutzung? 2.0

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

inuse - Ist die Datei in Benutzung? 2.0

Beitrag von McHubi » Mo 1. Dez 2014, 14:00

!!!
Diese Erweiterung ist auch für Version 4.10 möglich. Nähere Infos unter viewtopic.php?f=115&t=43502.
!!!

Hallo zusammen,

ich möchte gerne nochmal dieses schon von mir in der 4.8er angesprochene Thema aufgreifen (http://forum.contenido.org/viewtopic.ph ... 55#p152778).

Meiner Ansicht nach ist es für Redakteure durchaus wichtig, ohne große Umstände vor dem Löschen einer Datei in der Dateiverwaltung deren mögliche Verwendung zu prüfen. Da andere CMS diese Prüfung in der Dateiverwaltung schon länger bieten (TYPO3 z. B.) täte es Contenido gut, hier endlich nachzuziehen. Die Dateiverwaltung sollte ja - ist schon was länger her die Ankündigung von 4fb - mal generell auf den Prüfstand.

Da ich gerade in einem laufenden Projekt genau dies für die Redakteure benötige, habe ich eine Prüfung in die aktuelle Dateiverwaltung integriert. Es muss lediglich die Datei root->contenido/includes/include.upl_files_overview.php um ein paar Zeilen ergänzt werden:

Code: Alles auswählen

[...]
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_collection=array();
  //wysiwyg
  $search = "SELECT idartlang FROM con_content WHERE value LIKE '%$check_data%'";
  $result = cRegistry::getDb();
  $result->query($search);
  while($result->nextRecord())
    {
    $arr_inuse=$result->toArray();
    $arr_inuse_collection[]=$arr_inuse[idartlang];
    }
  //content_image
	$search="SELECT * FROM con_content,con_upl WHERE value=idupl AND filename='$check_data'";
    $result = cRegistry::getDb();
    $result->query($search);
    while($result->nextRecord())
      {
      $arr_inuse=$result->toArray();
      $arr_inuse_collection[]=$arr_inuse[idartlang];
      }
	
  $arr_inuse_collection=array_unique($arr_inuse_collection);
  if(count($arr_inuse_collection)>0)
    {
   $retValue.='<br/>Artikel:<br/>';
    foreach($arr_inuse_collection AS $element) $retValue.='<a href="'.$cfgClient[$client]["path"]["htmlpath"].'front_content.php?idart='.$element.'" target="_blank">'.$element.'</a>&nbsp;';
   }
   else $retValue.='<br/>Nicht per wysiwyg oder content_image-Modul eingebunden.<br/>';
  }
/******************** FILES IN USE? modifications end ********************/
					   				   
                    return $retValue;
[...]
}
[...]
Unterhalb der Icons in der Spalte "Vorschau" wird dann ein Button eingebunden, der beim Anklicken das Prüfen einer Einbindung der Datei in der DB-Tabelle con_content anstartet und die entsprechenden Artikel als Link genau dort auswirft.
screenshot-backend-dateiverwaltung-inuse-001.jpg
screenshot-backend-dateiverwaltung-inuse-001.jpg (57.41 KiB) 7105 mal betrachtet
Dabei gibt es diese Punkte zu berücksichtigen bzw. "ToDos":
1) Prüfung ist nur für Dateien gültig, die
a) per wysiwyg eingefügt werden (hier wird in der Tabelle con_content in der Spalte value nach dem Dateinamen durchsucht) und
b) über Module eingefügt werden, die in der Tabelle con_content und der Spalte value die idupl der Tabelle con_upl hinterlegen (z. B. content_image).
2) Aktuell werden lediglich Bilddateien geprüft. Sollen weitere Dateiformate geprüft werden, ist in der function convert($field, $data) eine Erweiterung der Dateiendungen vorzunehmen:

Code: Alles auswählen

[...]
                case 'xbm':
                case 'wbmp':
/******************** FILES IN USE? modifications begin ********************/
				case 'pdf':
/******************** FILES IN USE? modifications end ********************/
[...]
Dabei stört mich der bei vielen Dateiendungen unnötige Versuch, eine Vorschau beim Hovern zu erstellen. Jemand ne Ahnung, wie das zu unterdrücken ist?
3) In der con_content ist die idartlang angegeben. Laut AMR sollte die URL beim Aufruf per front_content.php?idartlang=123 funktionieren, oder? Kurioserweise tut es das nicht. Daher ist hier grundsätzlich ein Fehler, der bei mehrsprachigen Websites relevant wird:
foreach($arr_inuse_collection AS $element) $retValue.='<a href="'.$cfgClient[$client]["path"]["htmlpath"].'front_content.php?idart='.$element.'" target="_blank">'.$element.'</a>&nbsp;';
Oder irre ich mich mit "front_content.php?idartlang=123" und ich muss noch eine weitere Abfrage nach der idart per con_art_lang einbinden?
4) Die hardcodierten Bezeichnungen in Deutsch ersetzen durch "mi18n()-Funktionalität".

Auch, wenn es hier durchaus noch Verbesserungspotential gibt, ist es besser als der aktuelle Zustand "Nichts"... Es wäre also toll, wenn sich hier in einer der kommenden Versionen etwas bewegt. :wink:

VG und Danke für Tipps hinsichtlich der der ToDos,

Markus

EDIT 22.07.2016: Berücksichtigung von per z. B. Bildmodul wie content_image eingefügten Dateien ergänzt.
Zuletzt geändert von McHubi am So 24. Mär 2019, 23:37, insgesamt 5-mal geändert.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von Oldperl » Mi 3. Dez 2014, 09:37

Hi Markus,

gute Funktion, eventuell sollte man aber über die Tabelle con_content zusätzlich eine Suche nach der Upl-Id, beschränkt auf bestimmte CMS-Typen, laufen lassen. So findet man dann auch die inuse-Bilder in den Image-Types, da diese dort nur per ID gespeichert werden.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von frederic.schneider_4fb » Do 4. Dez 2014, 09:50

Vielen Dank für die Anregung, lieber Markus. Unserer Meinung nach ist es jedoch nicht mit einer solchen Prüfung getan. Was ist etwa mit dem automatisch erzeugten Dateilisten? Das wäre damit nicht berücksichtigt. Wir würden also nur eine "halbe Sache" umsetzen und das ist nicht unser Anspruch. Wir behalten die Anregung aber mal im Hinterkopf!
Frederic Schneider
Entwickler bei der four for business AG

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von McHubi » Do 4. Dez 2014, 12:28

Hallo Frederic,
Wir würden also nur eine "halbe Sache" umsetzen und das ist nicht unser Anspruch.
Kann ich so unterschreiben, das Problem mit Modulen oder Plugins die auf Dateien zugreifen ist durchaus gewichtig.

Wer aber seinen Dateiverwaltung ordentlich strukturiert, z. B. nicht alle Bilddateien (Layout, Content, Galerien, usw.) in einen Ordner knallt und statt dessen mit Unterordnern wie "bilder/content", "bilder/galerien/galerie_a" usw. arbeitet, kann mit der o.g. Lösung durchaus für einige Entlastung/ Sicherheit sorgen.

Wie eine Schnittstelle Dateiverwaltung <-> Module/Plugins realisiert werden kann, ist natürlich auch eine gute Frage. Letztlich würde ich es mir so vorstellen, dass beim Einbinden eines Bildes per CMS_TYPES in der con_upload eine Spalte "inuse" mit z. B. der idart des Artikels gefüllt wird, in den das Bild eingebunden wurde. Per tinymce dürfte das aber vermutlich schon nicht wieder so einfach sein. Und dann käme noch hinzu, dass eine Standard-Prüffunktion/Klasse/... erforderlich wäre um die Einbindung in Module zu checken. Wenn also der für eine Bildergalerie auszulesende Ordner per Artikelreiter "Konfiguration" festgelegt würde, müsste bei jedem Speichern der Konfiguration der gewählte Ordner durchlaufen werden um dann in der neuen "inuse"-Spalte der con_content die idart des Artikels zu hinterlegen - falls noch nicht enthalten. Gleichzeitig müsste natürlich auch eine Art "Bereinigungsfunktion" realisiert werden, wenn die Bildergalerie einen anderen Ordner zugewiesen bekommt.

Wirklich alles abzudecken dürfte aber die "eierlegende Wollmichsau" werden. In TYPO3 z. B. laufen derartige Prüfungen auch nur über "CMS_TYPES", per wysiwyg eingebundene Bilder werden auch nicht gefunden. Zumindest nicht in der 4.5er.

Dreh- und Angelpunkt für die ganze "inuse"-Geschichte ist für mich eine weitere Spalte in der con_content und eine allgemeingültige Prüfroutine (eine Art "fileCollection" als Pendant zur articleCollection) die von Modulen und Plugins aus aufgerufen werden kann. Alles andere bliebe in der Tat nichts halbes und nichts ganzes.

Automatisch generierte Listen, Galerien usw. sind der gordische Knoten - da die Art der Erstellung und Einbettung vielfältig ist und in der Regel immer unterschiedlich sein dürfte. Dafür eine allgemeingültige Prüfroutine zu entwickeln wird wohl kaum möglich sein. Hier ist man also auf eine gute Struktur der Dateiverwaltung angewiesen.

Dennoch sind zwei Bereiche bereits jetzt umsetzbar:
1) Prüfung des Contents nach Einbindung der Datei, sprich wysiwyg - Lösungsansatz siehe oben - funktioniert auch ohne neue Spalte "inuse" oder Anpassungen am Tiny
2) per CMS-TYPE eingebundene Dateien erhalten in der neuen Spalte "inuse" einen Vermerk, dessen Auslesen lediglich im obigen Lösungsansatz mit eingebunden werden müsste.

Also, ran an den CORE. :wink:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von Faar » Do 4. Dez 2014, 13:35

Das würde eigentlich eine Quelltext-Suche im Plugin, Modul und Content Code erfordern.
Beim Content handelt es sich ja um codierten Bestand in der Datenbank, dort könnte man die Pfade suchen und auf das Verzeichnis "upload" prüfen.
Beim Layout müsste das auch gehen, selbst im CSS.
Module beinhalten ja auch Pfade, mal so mal so. :roll:
Kurzum, eine Art Linkchecker der sämtlichen in Frage kommenden Code oder Inhalt auf Verlinkungen ins Upload-Verzeichnis durchsucht.
Eine Art Parser oder Scanner.

Das erfasst alles was im Upload-Verzeichnis verlinkt ist und ist unabhängig vom strukturierten Datenbank-Inhalt.
Man könnte das in einen Cronjob packen, der je nach anzupassendem Zeitabstand den Check durchführt, am besten nachts.
Das ist ähnlich wie ein Webseiten-Bot, der halt statt Webseiten Files und Datenbankinhalte durchsucht.
Im Prinzip müsste das funktionieren.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von frederic.schneider_4fb » Do 4. Dez 2014, 14:05

Der Cronjob hätte den Nachteil, dass er nicht "live" anzeigt. Sprich: Es kann zwar in der Nacht eine neue Indexierung stattgefunden haben, aber am Morgen haben die Redakteure mit lauter Dateien in Artikeln rumgearbeitet und Dutzende Zuordnungen sind nicht mehr aktuell. Die Anzeige wäre also nur eine "ungefähre". Ich bin offen für alle Ideen und würde mich freuen, wenn noch weitere Ideen zusammenkommen. VIelleicht haben wir ja am Ende eine perfekte Lösung :mrgreen:
Frederic Schneider
Entwickler bei der four for business AG

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von Faar » Do 4. Dez 2014, 16:05

Ja, aktuell ist so ein Cronjob nur dann, wenn er jede Minute läuft.
Aber aus Performancegründen würde ich das nur tun, wenn es dringend sein müsste.
Hoster sehen Cronjobs nicht so gerne.

Ich hatte mal für eine Firma mit ähnlichem zu tun. Da liefen parallel Pseudocronjobs, angestoßen und gesteuert über Shell-Scripte.
Ich hatte die so geschrieben und abgestimmt, dass sie sich nicht in die Quere kamen (wegen der parallelen Arbeit an der gleichen DB) und über 1 Mio Datenbankeinträge pro Stunde aktualisierten.
Für "manuelle" Prüfung, im Fall das jemand neue Daten sofort aktuell haben wollte, hatte ich ein Schalter eingebaut, der den Zeiger auf die Daten in die Queue-Tabelle schob, so dass sie gleich im nächsten Job dran kamen.
Contenido hat ja Cronjobs, also könnte man die nützen.

Man könnte sich überlegen, ob man solche Service-Prozesse begleitend zu der Lösung von McHubi und vielleicht einer manuellen Lösung (man trägt Beziehungen selbst in eine Liste ein) laufen lassen könnte.
Der Kollateralschaden wäre geringer, wenn 99% aller eingebundenen Dateien gelistet (und somit sicher) wären als so wie es momentan ist, nämlich gar keine.

Aber es ist nur eine Idee und ähnliches wäre für das Images-Verzeichnis für das Design auch interessant.
Dort liegt oft viel Datenmüll rum, besonders wenn Designs geändert und Agenturen ausgetauscht werden.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von Faar » Di 15. Sep 2015, 20:34

...und? :roll:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von frederic.schneider_4fb » Do 24. Sep 2015, 10:28

Wir haben uns damit noch nicht näher auseinander gesetzt. Ich dokumentiere das aber mal offiziell, damit es sicher nicht verloren geht.
Frederic Schneider
Entwickler bei der four for business AG

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung? 2.0

Beitrag von McHubi » Fr 22. Jul 2016, 14:55

Im Code des Eröffnungspostings ist jetzt die Berücksichtigung von per z. B. Bildmodul wie content_image eingefügten Dateien ergänzt.
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Antworten