inuse - Ist die Datei in Benutzung?

Ideen für neue Funktionen in CONTENIDO?
Antworten
McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

inuse - Ist die Datei in Benutzung?

Beitrag von McHubi » So 27. Feb 2011, 15:33

Hallo zusammen,

ein schönes neues Feature bei Contenido hört ja auf den Namen "inuse". Das gilt zumindest schonmal für Module, Templates und Layouts. Ich vermisse das jedoch in der Dateiverwaltung. Eine Grafik oder was auch immer kann ja ohne weiteres mehrfach eingebunden werden. Irgendwann steht man dann vor dem Problem, dass die Dateien ausgemistet werden sollen aber keiner weiß, ob die zu prüfende Datei überhaupt genutzt wird und wenn ja, wie oft?

Händische Lösung:
Durchsuchen der con_content im feld "value" mit dem Operator LIKE %...% und als Wert der Dateiname. So bekäme man zwar hinkend die Orte heraus, an denen die Datei verlinkt wird, ist aber sehr umständlich und für einen Redakteur schon mal gar nicht geeignet.

Ein Ansatzpunkt könnte die contenido/includes/include.upl_files_overview.php sein. Hier wird ja in der Spalte Aktionen die Möglichkeit eröffnet, die Wiedervorlage anzugehen oder die Eigenschaften anzuzeigen. Optimal wäre es, wenn hier ebenfalls das "rote Ausrufezeichen" erscheinen würde.

Ansatzpunkt 1:
Das bringt die con_inuse auf den Plan, die - obwohl bei meinem Demomandanten natürlich einige Templates, Module und ein Layout in Benutzung sind - leer ist.
Wenn bei jedem Einbinden einer Datei ein Eintrag in der con_inuse vorgenommen würde, könnte er in der Dateiverwaltung ausgelesen werden um die entsprechende Info auszugeben. Allerdings können Dateien ja nicht nur per Tiny eingebunden werden sondern auch per Modul. Und der Aufwand die tiny-Einbindung entsprechend umzuschreiben? - k. A.

Ansatzpunkt 2:
Bei der Anzeige der Dateien in der Dateiverwaltung würde die eingangs genannte Suche nach dem Dateinamen in der con_content durchgeführt um die "idcontent" herauszufinden, in denenn der Dateiname vorkommt. Wie kommt man aber von hier aus z. B. an die idart? Die idcontent habe ich in den anderen Tabellen (con_art..., con_cat..., con_content,) nicht wiederfinden können. Und man will ja nicht nur wissen wie häufig die Datei genutzt wird sondern auch wo? Nächstes Problem wäre sicherlich die Performance, denn je nach Umfang der con_content dürfte diese Abfrage sehr lange dauern da sie für alle gelisteten Dateien durchgeführt würde. Insofern sollte man diese Abfrage in die Anzeige der Dateieigenschaften auslagern.

Ansatzpunkt 3:
Die Anzeige der "inuse"-Information in der Dateiverwaltung wird in eine, manuell anzustartende Prüfung ausgelagert. Hier würden dann alle Dateien ordnerweise und nacheinander auf Vorkommen in dern con_content geprüft und ein Eintrag der idart in der con_upl vorgenommen - ein neues Tabellenfeld wäre hier also nötig. Bei der Anzeige in der Dateiverwaltung könnte dann die Info in punkto "inuse" sehr schnell aus dieser Tabelle gezogen werden. Wenn hier aber hunderte von Bildern anstehen, könnte das auch so seine Zeit dauern...

Ansatzpunkt 4:
Besser als das manuelle Durchsuchen der Datenbank aber leider losgelöst von der Dateiverwaltung: Eine Variante des Suchmoduls, dass nach händischer Eingabe der zu prüfenden Datei in der Suchausgabe nur die Artikel auswirft, die diese Datei beinhalten.

Hat jemand ne Idee oder schon einen weiten als diese Theorie gehenden Schritt gemacht?

Grüße,


Markus
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)

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung?

Beitrag von kummer » Mo 28. Feb 2011, 14:54

ob man nun das inuse-feature als nützlich anschauen soll oder nicht, darüber wird es wohl unterschiedliche meinungen geben.insbesondere beim artikel ist die konkrete implementierung alles andere als günstig. einen artikel im editiermodus anschauen und schwupps ist er gesperrt. dann noch browser schliessen ohne logout und dann ist warten angezeigt.

anyway, im medienmanagement ist ja auch was anderes damit gemeint. und hier wäre es ganz klar nützlich. ein ansatz ist ein artikelzentriertes medienmanagement. mit dem artikel können dann auch die entsprechenden medien entfernt werden. das ist freilich auch kein allgemeingültiger ansatz, aber in bezug auf das mangement sehr nützlich.

ansonsten bleibt eigentlich aus meiner sicht bloss der verzicht auf die einbindung mit dem tiny und die nutzung eines modules zur bild- und medienauswahl für die ausgabe. dieses kann dann die geforderte relation abbilden.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung?

Beitrag von rethus » Di 1. Mär 2011, 21:12

DIe Idee finde ich sehr gut.
Einzige in Frage kommende Variante wäre meiner Meinung nach Ansatzpunkt 3. Hauptfrund dafür wäre, dass es sich ohne großen Anpassungsaufwand in das System integrieren lässt.

In einen Cron- oder Pseudo-Cron gepackt könnte dass Nachts durchlaufen und würde demnach nicht mal Stören.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

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

Re: inuse - Ist die Datei in Benutzung?

Beitrag von McHubi » Do 3. Mär 2011, 19:32

Hallo Rethus,

hast Du hier nen Ansatzpunkt? Nach der Theorie hört's bei mir leider Gottes auf... :?
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)

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung?

Beitrag von rethus » Fr 11. Mär 2011, 09:50

Naja, im Grunde hast du es oben ja schon selbst beantwortet.
Des nächtens einfach die DB nach den Dateinamen durchsuchen, und das Ergebnis in eine neue DB-Tabelle (oder XML-File auf der Platte) speichern.
In der Dateiverwaltung wird diese dann beim öffnen einer Datei in den Dateieigenschaften z.B. in einer art Sitemap dargestellt, aus der man ersehen kann in welchen Artikeln das Bild verknüpft ist.
Klickt man auf den Artikel drauf, kommt man direkt dort hin.

Problematisch ist es halt nur, wenn jemand die Datei einfach vom Webspace löscht. Dafür wäre aber die erweiterung des Linkcheckers dann hilfreich, der tote verknüpfungen zu nicht mehr existierenden Dateien automatisch anzeigt.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

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

Re: inuse - Ist die Datei in Benutzung?

Beitrag von McHubi » So 13. Mär 2011, 19:33

Hallo Rethus,
Des nächtens einfach die DB nach den Dateinamen durchsuchen, und das Ergebnis in eine neue DB-Tabelle (oder XML-File auf der Platte) speichern.
Das ist tatsächlich kein Hexenwerk. Allerdings würde ich gerne auch die id-art des jeweiligen Artikels speichern um den Link aufzubauen. ABER wie ich schon im ersten Post unter "Ansatzpunkt 2" geschrieben hab:
Bei der Anzeige der Dateien in der Dateiverwaltung würde die eingangs genannte Suche nach dem Dateinamen in der con_content durchgeführt um die "idcontent" herauszufinden, in denenn der Dateiname vorkommt. Wie kommt man aber von hier aus z. B. an die idart? Die idcontent habe ich in den anderen Tabellen (con_art..., con_cat..., con_content,) nicht wiederfinden können.
In der Dateiverwaltung wird diese dann beim öffnen einer Datei in den Dateieigenschaften z.B. in einer art Sitemap dargestellt, aus der man ersehen kann in welchen Artikeln das Bild verknüpft ist.
Da reicht's bei mir nur zur Theorie. Habe bisher keine Datei finden können, in der ich bei den Dateieigenschaften etwas hinzufügen könnte. Lediglich die /html/contenido/includes/include.upl_files_overview.php kommt meinem Ziel am nächsten. Allerdings könnte ich hier nur in der Gesamtauflistung was unterbringen und ich will die Prüfung ja letztlich nicht bei jedem Aufruf eines Ordners für alle Dateien durchführen sondern nur für eine einzige. In welcher Datei werden die Dateieigenschaften "verhackstückt"?

Kopfkratz...
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)

mfweb
Beiträge: 270
Registriert: Mo 12. Sep 2005, 18:31
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung?

Beitrag von mfweb » Di 15. Mär 2011, 00:25

McHubi hat geschrieben:Habe bisher keine Datei finden können, in der ich bei den Dateieigenschaften etwas hinzufügen könnte.
Ich kenne mich mit den Contenido-Chains leider nicht aus, aber ließe sich nicht mit einer oder mehrere dieser Chains etwas anfangen?
  • Contenido.Upl_edit.Delete
    This chain function is called after a upl-file has been deleted
  • Contenido.Upl_edit.Rows
    This chain is used to process the rows of the upl-details list.
  • Contenido.Upl_edit.RenderRows
    This chain is used to render a single column for a specific article
  • Contenido.Upl_edit.SaveRows
    This chain is called everytime when upl-details is saved
Beim Löschen einer Datei könnte man durch Contenido.Upl_edit.Delete z.B. auch die Artikel anzeigen, die noch einen Verweis auf die Datei enthalten.

Dies wäre natürlich keine richtige Integration in den Contenido-Core, aber damit ließe sich die Funktion vielleicht sogar konfigurierbar machen.
Immer mal ein Blick wert: Contenido Wiki ... auch schreibender Zugriff ist erlaubt!

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

Re: inuse - Ist die Datei in Benutzung?

Beitrag von McHubi » Mo 30. Mai 2011, 23:30

Soooo...

... ein wenig Zeit ist in's Land gegangen und ich hab eine Lösung gefunden. Sieht in der Dateiverwaltung dann so aus:

Bild
Bild

In der Auflistung der im Ordner vorhandenen Dateien wird ein neues Icon eingebunden: Bild (einfach per Rechtsklick speichern und in den Ordner contenido/images/ als "file-in-use.gif" kopieren). Beim Anklicken wird die con_content nach dem Dateinamen durchsucht und alle idarts inkl. Seitentitel und Verlinkung werden tabellarisch aufgelistet. So lässt sich vor dem Löschen schnell prüfen, ob man es nicht besser sein lässt... :mrgreen: Wichtig: Geprüft werden lediglich Dateien, die in der con_content hinterlegt sind - Bilder, die nur z. B. von Modulen genutzt werden (Fotogalerien z. B.) - können von der Prüfung nicht berücksichtigt werden.

Was ist zu tun?

1) Ergänzung der Datei "contenido/includes/include.upl_files_overview.php":

ab Zeile (ca.) 365.:

Code: Alles auswählen

				} else {
				    $tmp_mstr = '<a onmouseover="this.style.cursor=\'pointer\'" href="javascript:conMultiLink(\'%s\', \'%s\', \'%s\', \'%s\')">%s</a>';
	                $mstr = sprintf($tmp_mstr, 'right_bottom',
	                                $sess->url("main.php?area=upl_edit&frame=4&path=$path&file=$data&appendparameters=$appendparameters&startpage=".$_REQUEST['startpage']."&sortby=".$_REQUEST['sortby']."&sortmode=".$_REQUEST['sortmode']."&thumbnailmode=".$_REQUEST['thumbnailmode']),
	                                'right_top',
	                                $sess->url("main.php?area=upl&frame=3&path=$path&file=$data"),
	                                $data);
				}

/******************** begin FILES IN USE? modifications ********************/
$display_inuse_button_true='<a href="includes/include.file_in_use.php?path='.$path.'&file='.$data.'"><img src="images/file-in-use.gif" title="Grafik/ Bild in Benutzung?"/></a>';
$display_inuse_button_false='<span style="width: 20px;">&nbsp;</span>';

//$filetype_list=array('.jpg','.jpeg','.gif','.bmp','.png');
//$filetype = strrchr($mstr, '.');
//if (in_array($filetype,$filetype_list)) 
//   {
   $mstr=$display_inuse_button_true.'&nbsp;'.$mstr;
//   }
//   else
//    {
//    $mstr=$display_inuse_button_false.'&nbsp;'.$mstr;
//    }
/******************** end FILES IN USE? modifications ********************/
                return $mstr;	
		}
2) Erstellen einer neuen Datei "include.file_in_use.php" im Ordner "contenido/includes"
Inhalt:

Code: Alles auswählen

<?php

$domain=$_SERVER['HTTP_HOST'];
$path=$_GET[path];
$file=$_GET[file];

$DatabaseHost = "localhost";
$DatabaseUser = "XXXXXX";
$DatabasePassword = "XXXXXX";
$Database = "XXXXXX";

$filename_filetype = explode(".", $file);
$filename = $filename_filetype[0];
$filetype = $filename_filetype[1];

echo '<div style="font-family: arial, helvetica, sans-serif;font-size: 12px;">';
echo '<table cellspacing="0" cellpadding="2" style="font-size: 12px;">
      <tr bgcolor="#E2E2E2" style="border-color:#B3B3B3; border-style: solid;border-top: 1px;border-bottom: 0px;">
      <td style="border: 1px; border-color: #B3B3B3; border-bottom: 0px; border-style: solid; white-space:nowrap; font-weight: 900;">Pfad</td>
      <td style="border: 1px; border-color: #B3B3B3; border-bottom: 0px; border-left: 0px; border-style: solid; white-space:nowrap; font-weight: 900;">Dateiname</td>
      <td style="border: 1px; border-color: #B3B3B3; border-bottom: 0px; border-left: 0px; border-style: solid; white-space:nowrap; font-weight: 900;">Dateityp</td>
      </tr>';
echo '<tr>
       <td class="text_medium" style="border: 1px; border-top: 0px; border-color: #B3B3B3; border-style: solid; white-space:nowrap;">'.$path.'</td>
       <td class="text_medium" style="border: 0px; border-right: 1px; border-bottom: 1px; border-color: #B3B3B3; border-style: solid; white-space:nowrap;">'.$filename.'</td>
       <td class="text_medium" style="border: 0px; border-right: 1px; border-bottom: 1px; border-color: #B3B3B3; border-style: solid; white-space:nowrap;">'.$filetype.'</td>
       </tr>
       </table><br/>';

mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword) or die ("Keine Verbindung moeglich");
mysql_select_db($Database) or die ("Die Datenbank existiert nicht.");

$search="SELECT idartlang FROM con_content WHERE value LIKE '%$file%'";
$result = mysql_query($search);

echo '<p><strong>Datei wird verwendet von:</strong></p>';
$row = mysql_fetch_object($result);
if ($row->idartlang=="") $in_use="false";

if ($in_use=="false")
    {
    echo '<p>Nicht per wysiwyg eingef&uuml;gt.</p><p style="font-size: 10px;"><u>Wichtig:</u> Die Pr&uuml;fung, ob eine Grafik verwendet wird oder nicht, gilt nur für per wysiwyg eingef&uuml;gte Bilder.<br/>Von Modulen o.&auml;. eingebundene Bilder k&ouml;nnen nicht gepr&uuml;ft werden da deren Einbinden nicht in der Datenbank (Tabelle con_content) hinterlegt wird.</p>';
    }
else
    {
    $idart_list=array();
    $search="SELECT idartlang FROM `con_content` WHERE `value` LIKE'%$file%'";
    $result = mysql_query($search);
    while($row = mysql_fetch_object($result))
          {
          //echo 'idartlang: '.$row->idartlang.'<br/>';
          $localization="SELECT idart FROM con_art_lang WHERE idartlang = $row->idartlang";
          $localization_result = mysql_query($localization);          
          while($localization_row = mysql_fetch_object($localization_result))
                {
                //echo 'idart: '.$localization_row->idart.'<br/>';
                $idart_list[]=$localization_row->idart;
                }
          }

      $idart_list=array_unique($idart_list);
      echo '<table cellspacing="0" cellpadding="2" style="font-size: 12px;">
      <tr bgcolor="#E2E2E2" style="border-color:#B3B3B3; border-style: solid;border-top: 1px;border-bottom: 0px;">
      <td style="border: 1px; border-color: #B3B3B3; border-bottom: 0px; border-style: solid; white-space:nowrap; font-weight: 900;">idart</td>
      <td style="border: 1px; border-color: #B3B3B3; border-bottom: 0px; border-left: 0px; border-style: solid; white-space:nowrap; font-weight: 900;">Seitentitel (Reiter Eigenschaften)</td>
      <td style="border: 1px; border-color: #B3B3B3; border-bottom: 0px; border-left: 0px; border-style: solid; white-space:nowrap; font-weight: 900;">Link</td></tr>';
      foreach ($idart_list as $idart)
         {

          $title_search="SELECT title FROM con_art_lang WHERE idart = $idart";
          $title_search_result = mysql_query($title_search);
          while($title_search_row = mysql_fetch_object($title_search_result))
                {
                //echo 'idart: '.$localization_row->idart.'<br/>';
                $idart_title=$title_search_row->title;
                }
                 
         echo '<tr>
               <td class="text_medium" style="border: 1px; border-top: 0px; border-color: #B3B3B3; border-style: solid; white-space:nowrap;">'.$idart.'</td>
               <td class="text_medium" style="border: 0px; border-right: 1px; border-bottom: 1px; border-color: #B3B3B3; border-style: solid; white-space:nowrap;">'.$idart_title.'</td>
               <td class="text_medium" style="border: 0px; border-right: 1px; border-bottom: 1px; border-color: #B3B3B3; border-style: solid; white-space:nowrap;"><a href="../../cms/front_content.php?idart='.$idart.'" target="_blank" title="Artikel anzeigen"><img src="../images/submit.gif"/></a></td>
               </tr>';
         }
      echo '</table>';
    }

echo '';
echo '<p><a href="javascript:history.back()" title="zur&uuml;ck"><img src="../images/back.gif"/></a></p>';
echo '<p><img src="../../cms/upload/'.$path.$file.'"/></p>';
echo '</div>';
?>
Hier am Anfang die Zugangsdaten für die DB anpassen.

3) neues Icon
wie oben beschrieben

Und jetzt zu den ToDo's
a) Wer sich oben bei der Ergänzung für die "include.upl_files_overview.php" über die vielen Auskommentierungen // gewundert haben sollte: ich hab es um's Verrecken nicht hinbekommen, dass das Prüf-Icon nur bei Grafiken angezeigt wird. Wurscht, ob ich den Filetype über ein Array geprüft habe oder direkt ein paar Mal if($filetype=="jpg" OR $filetype=".gif" OR ...) verwendet habe. Entweder wird das Icon immer oder nie angezeigt.

b) Im nächsten Schritt werde ich dann bei der tabellarischen Auflistung noch aufführen ob der Artikel on- oder offline ist.

c) Der Lösch-Button soll hinzu kommen wenn ein Bild nicht genutzt wird.

d) Feinschliff.

Schöner wäre das Ganze natürlich, wenn die "in-use"-Klamotte über den "Bearbeiten"-Reiter (wo auch die Bildbeschreibung usw. erfasst wird) einbindbar wäre und auch beim Löschen einer Datei eine Prüfung vorgenommen würde. Dafür fehlt mir aber der zündende Gedanke und irgendwo auch noch ein paar Hirnwindungen in puncto chains & Co.

Nichts desto trotz, sollte erst mal brauchbar sein! :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)

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

Re: inuse - Ist die Datei in Benutzung?

Beitrag von Oldperl » Di 31. Mai 2011, 08:05

Hallo Markus,

find ich gut die Idee. Darf ich deine ToDo-Liste etwas erweitern? 8)
  • Nutzung der Contenido Security Klasse zum Absichern der zusätzlichen Datei.
  • Einbinden der Datei ins Contenido Frameset unter Nutzung der main.php.
  • Nutzung von DB_Contenido und Template.
  • Suche im Content nicht nur nach dem filename, sondern in Zusammenhang mit dem Pfad, die Bilddatei kann ja auch mehrfach mit gleichem Namen in verschiedenen (Upload-)Ordnern vorkommen.
  • Caching der Suchabfrageergebnisse (Performance).
  • Auf aktuellen Mandant beschränken (SQL_Query).
  • Lokalisierung und Rechteverwaltung im BE.
  • ...
Soweit erstmal. Hoff das war nun nicht zu viel. :wink:

Einen anderen Ansatz hast du ja schon erwähnt, für diese Funktion könnte man gut die CEC nutzen und hier dann die Infos evtl. sogar direkt in der Übersicht als div-Overlay einbauen. Inwieweit die vorhandenen CEC das zulassen kann ich aus dem stegreif nicht sagen, müßt ich mir auch erstmal anschaun. Als Chain kann man das aber als ganz einfaches Plugin nur in den Pluginordner schmeissen (kopieren) und es würde sofort greifen.

Also ich würde es so nicht unbedingt im produktiven Umfeld einsetzen. Grund hier vor allem die potentiellen Sicherheitslöcher. Da haben wir momentan wieder mal verstärkt ein paar "nette" Scriptkiddies, die Contenido auf Herz und Nieren prüfen. :roll:

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

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: inuse - Ist die Datei in Benutzung?

Beitrag von kummer » Mi 1. Jun 2011, 11:55

nur so ein ganz kleiner tipp am rande. potentiell nicht in verwendung müsste eine datei ja dann sein, wenn sie sehr lange nicht mehr verwendet worden ist. häufig nachgefragte bilder werden noch benötigt. man könnte also, wenn bilder nachgefragt werden, den letzten zugriff speichern. und dann müsste man beim abscannen der dateien nur diejenigen auf verwendung prüfen, die schon lange nicht mehr requested wurden. das raubt allerdings natürlich auch wieder etwas leistung.

der vermutlich günstigste ansatz dürfte sein, die prüfung auf verwendung beim speichern eines artikels vorzunehmen und eine relation zwischen artikel und bild zu etablieren mit löschweitergabe, wenn der artikel gelöscht wird (erfodert allerdings den einsatz von innodb). dadurch ist sichergestellt, dass jedes in verwendung stehende bild eine relation aufweist. alle bilder ohne relation wären dann nicht in verwendung. vorausgesetzt natürlich - und das ist der knackpunkt -, dass die analyse in jedem fall ein vollergebnis liefert. d.h., dass man ausschliessen kann, dass eine bildreferenz dynamisch auf seite des clients erstellt wird. mit zunehmendem einsatz von javascript ist das nicht ohne weiteres auszuschliessen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

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

Re: inuse - Ist die Datei in Benutzung?

Beitrag von McHubi » Do 19. Jan 2012, 22:05

N'Abend zusammen.

Alles auf Anfang, nochmal neu. Eine separate Datei ist jetzt nicht mehr notwendig, die Ergänzungen werden alle in der Datei root->contenido/includes/include.upl_files_overview.php ab ca. Zeile 408 vorgenommen.
Im folgenden Code findet ihr zwei Abschnitte, die einfach reinkopiert werden müssen. Gekennzeichnet durch

/******************** begin FILES IN USE? modifications ********************/
[...]
/******************** end FILES IN USE? modifications ********************/

Code: Alles auswählen

[...]
        					if (is_dbfs($data))
        					{
									$retValue = 
									'<a href="JavaScript:iZoom(\''.$sess->url($cfgClient[$client]["path"]["htmlpath"]."dbfs.php?file=".$data).'\');">
										<img class="hover" name="smallImage"  onMouseOver="correctPosition(this, '.$iWidth.', '.$iHeight.');" onmouseout="if (typeof(previewHideIe6) == \'function\') {previewHideIe6(this)}" src="'.$sCacheThumbnail.'">
										<img class="preview" name="prevImage" src="'.$sCacheThumbnail.'">
									</a>';
									return $retValue; 
        					} else {

/******************** begin FILES IN USE? modifications ********************/
$parts_path_name = explode("/", $data);
$check_data=$parts_path_name= end($parts_path_name);
$check_id=str_replace(".","_",$check_data);
       
$search="SELECT idartlang FROM con_content WHERE value LIKE '%$check_data%'";
$result = mysql_query($search);
$row = mysql_fetch_object($result);
if ($row->idartlang=="") $in_use="false";

echo '<div id="'.$check_id.'" style="background-color: #ffffff; border: 1px solid #999999; border-radius: 5px; box-shadow: 10px 10px 5px #999999; padding: 5px; display: none; position: absolute; top: 10%; left: 10%; width: 50%;">'.$data.'<br/>';
echo '<img class="hover" name="smallImage"  src="'.$sCacheThumbnail.'" alt="Bildvorschau" title="Bildvorschau"><br/>';
echo '<p><strong>Datei wird verwendet von Artikel:</strong></p>';
if ($in_use=="false")
    {
    echo '<p>Nicht per wysiwyg eingef&uuml;gt.</p><p style="font-size: 10px;"><u>Wichtig:</u> Die Pr&uuml;fung, ob eine Grafik verwendet wird oder nicht, gilt nur für per wysiwyg eingef&uuml;gte Bilder.<br/>Von Modulen o.&auml;. eingebundene Bilder k&ouml;nnen nicht gepr&uuml;ft werden da deren Einbinden nicht in der Datenbank (Tabelle con_content) hinterlegt wird.</p>';
    }
    else
    {
    $idart_list=array();
    $search="SELECT idartlang FROM `con_content` WHERE `value` LIKE'%$check_data%'";
    $result = mysql_query($search);
    while($row = mysql_fetch_object($result))
          {
          $localization="SELECT idart FROM con_art_lang WHERE idartlang = $row->idartlang";
          $localization_result = mysql_query($localization);          
          while($localization_row = mysql_fetch_object($localization_result))
                {
                $idart_list[]=$localization_row->idart;
                }
          }

      $idart_list=array_unique($idart_list);
      echo '<table style="font-size: 12px;">';
      foreach ($idart_list as $idart)
         {
         $lang=1; //variable ist hier - im Gegensatz zur Nutzung in Modulen - leer, und muss mit einem Wert versehen werden!
         $article = new Article($idart, $client, $lang);
         $article_title = $article->getField('title');
         echo '<tr>
                 <td>'.$article_title.' (idart: '.$idart.')</td>
                 <td><a href="../../cms/front_content.php?idart='.$idart.'" target="_blank" title="Artikel anzeigen"><img src="images/submit.gif"/></a></td>
               </tr>';
         }
      echo '</table>';
      }
      echo '<a href="#" onClick="javascript:hide_check_id(\''.$check_id.'\');"><img src="images/but_cancel.gif" title="Infofenster schliessen"/></a></div>';
/******************** end FILES IN USE? modifications ********************/

									$retValue = 
										'<a href="JavaScript:iZoom(\''.$cfgClient[$client]["path"]["htmlpath"].$cfgClient[$client]["upload"].$data.'\');">
											<img class="hover" name="smallImage"  onMouseOver="correctPosition(this, '.$iWidth.', '.$iHeight.');" onmouseout="if (typeof(previewHideIe6) == \'function\') {previewHideIe6(this)}" src="'.$sCacheThumbnail.'">
											<img class="preview" name="prevImage" src="'.$sCacheThumbnail.'">
										</a>';

/******************** begin FILES IN USE? modifications ********************/
								  $name_file_in_use=substr(strrchr($data, '/'),1);
									$retValue .= '
									<script type="text/javascript">
                  function hide_check_id(check_id)
                    {
                    document.getElementById(check_id).style.display = \'none\';
                    }
                  function show_check_id(check_id,obj)
                    {
                    document.getElementById(check_id).style.display = \'block\';
                    }
									</script>
									<a href="#" onClick="javascript:show_check_id(\''.$check_id.'\',this);"><img src="images/info.gif" title="Grafik/ Bild in Benutzung?"/></a>
									<a href="JavaScript:iZoom(\''.$cfgClient[$client]["path"]["htmlpath"].$cfgClient[$client]["upload"].$data.'\');"><img class="preview" name="prevImage" src="'.$sCacheThumbnail.'"></a>';
/******************** end FILES IN USE? modifications ********************/

									return $retValue;
        					}

[...]
Was noch zu tun wäre:
1) i18n("...") verwenden statt der hardcodierten deutschen Texte
2) Positionierung des DIVs immer relativ zum Button (Hatte das zwar integriert, allerdings gab es bei den Bildern am Ende der Liste das Problem, dass das DIV immer teilweise außerhalb des Fensters lag. Hab vermutlich in der Hinsicht nen Brett vor der Stirn... :mrgreen: )
3) $lang ist leer und muss manuell mit einem Wert gefüllt werden damit beim Abruf des title per $article = new Article($idart, $client, $lang); ein Ergebnis geliefert wird (siehe Hinweis im Code).

So. Und wer von euch gibt mir zu den drei Punkte noch nen Tipp? :wink:

Grüße,


Markus
Dateianhänge
cp-mod-dateiverwaltung-inuse-001.jpg
(110.79 KiB) Noch nie heruntergeladen
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