Medienname auslesen in 4.8.8, die x-te

Gesperrt
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Medienname auslesen in 4.8.8, die x-te

Beitrag von homtata »

hallo, ich komme hier an meine grenzen, nachdem ich über stunden allerlei codeschnipsel aus foren hier verwendet habe.

nach dem update auf 4.8.8 wird der medianname anders abgespeichert als zuvor, und ich kriege es in meinem downloadlistenmodul nicht hin, den passenden mediennamen für neu hochgeladene dateien auszulesen.

kann mir jemand helfen?

hier der originalcode, der bis 4.8.7 lief:
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Download List
* Author(s) : Stefan Seifarth <info@polycoder.de>
* Copyright : www.polycoder.de / www.htcm.de
* Created : 2006-01-07
* Modified : 2006-11-07
************************************************/

cInclude ("classes", "class.upload.php");
cInclude ("classes", "class.properties.php");
cInclude ("classes", "class.htmlelements.php");
cInclude ("includes", "functions.upl.php");


// template defined vars
$dllist_path = "CMS_VALUE[110]";
$dllist_extensions = trim("CMS_VALUE[111]");
$dllist_idart = trim("CMS_VALUE[112]");
$dllist_filenamefilter = trim("CMS_VALUE[113]");

$cms_sort_direction = "CMS_VALUE[16]";
if ($cms_sort_direction == 'desc') {
$cms_sort_direction = 'DESC';
} else { $cms_sort_direction = 'ASC'; }


if ($dllist_path == "none") {
$nonregmsg = "<p>".mi18n('')."</p>";
} else {

if ($auth->auth["uid"] != "nobody")
{

// add filetype condition
$str_where_filetype = "";
if ( strlen ($dllist_extensions) > 0) {
$arr_extensions = explode (",",$dllist_extensions);

$arr_where = array();
foreach ($arr_extensions as $str_extension) {
$arr_where[] = "filetype ='" . trim($str_extension) . "'";
}

$str_where_filetype = ' ( ' . implode( " OR ", $arr_where ) . ' ) AND ';
}

// add filename filter condition
$str_where_filenamefilter = "";
if ( strlen ($dllist_filenamefilter) > 0) {

$arr_filenamefilter = explode(";", $dllist_filenamefilter);
$arr_where = array();

foreach ($arr_filenamefilter as $str_filenamefilter) {
$str_filenamefilter = trim($str_filenamefilter);
// replace special chars for wildcards
$str_filenamefilter = str_replace("%","\%", $str_filenamefilter);
$str_filenamefilter = str_replace("_","\_", $str_filenamefilter);
$str_filenamefilter = str_replace("*","%", $str_filenamefilter);
$str_filenamefilter = str_replace("?","_", $str_filenamefilter);
$arr_where[] = ' filename LIKE "' . mysql_escape_string($str_filenamefilter) . '"';
}
$str_where_filenamefilter = ' ( ' . implode( " OR ", $arr_where ) . ' ) AND ';
}

// get list of all files
$dllist_collection = new UploadCollection ();
$dllist_collection->select($str_where_filenamefilter . $str_where_filetype . " dirname = '" . $dllist_path .

"'","","filename ".$cms_sort_direction);

// initialize needed objects
$obj_file_properties = new PropertyCollection();
$obj_icon = new cHTMLImage();
$obj_description = new cHTMLDIV();

// reset template
$tpl = new Template();
$tpl->reset();

// add head description
$tpl->set("s","HEAD_NAME", mi18n("Dateiname") );
$tpl->set("s","HEAD_FILETYPE", mi18n("Dateityp") );
$tpl->set("s","HEAD_FILESIZE", mi18n("Größe") );
$tpl->set("s","HEAD_COUNTER", mi18n("Downloads") );

// run file list
$image_id = 0;
while ($dllist_item = $dllist_collection->next() ) {
$image_id++;

// icon for file
$obj_icon->setSrc( uplGetFileIcon($dllist_item->get("filename")) );
//$obj_icon->setID("dlIco".$image_id);
$obj_icon->setID("iconDownload");


$str_file_description = "";
if (strlen($dllist_item->get("description"))> 0) {
$str_file_description = $dllist_item->get("description");
} else {
$str_file_description = mi18n("Linkbeschreibung fehlt");
}


// filename
$str_file_name = $dllist_item->get("filename");
$str_file_name_property = $obj_file_properties->getValue("upload",

$dllist_item->get("dirname").$dllist_item->get("filename"), "file", "medianame");
if (strlen($str_file_name_property) > 0) {
$str_file_name = $str_file_name_property;
}

// filecounter
$str_file_counter = "0";
$str_file_counter_property = $obj_file_properties->getValue("upload",

$dllist_item->get("dirname").$dllist_item->get("filename"), "file", "counter");

if ( strlen ($str_file_counter_property) > 0 ) {
$str_file_counter = $str_file_counter_property;
}

// file url
$str_file_url = $cfgClient[$client]["upl"]["htmlpath"] . $dllist_item->get("dirname") .

$dllist_item->get("filename");
if ( isset($dllist_idart) && !empty($dllist_idart) && (int)$dllist_idart > 0 ) {
$str_file_url = $sess->url("front_content.php?idart=" . $dllist_idart . "&changelang=" . $lang .

"&client=" . $client . "&sse_idupl=" . $dllist_item->get("idupl") );
}

// fill template
$tpl->set("d", "FILE_ICON", $obj_icon->toHTML());
$tpl->set("d", "FILE_NAME", $str_file_name );
$tpl->set("d", "FILE_TYPE", $dllist_item->get("filetype") );
$tpl->set("d", "FILE_SIZE", human_readable_size($dllist_item->get("size")) );
$tpl->set("d", "FILE_COUNTER", $str_file_counter );
$tpl->set("d", "FILE_DESCRIPTION", $str_file_description );
$tpl->set("d", "FILE_URL", $str_file_url );

$tpl->next();
}

// set template
$str_template_name = "download_listreg.html";
if ( isset($dllist_idart) && !empty($dllist_idart) && (int)$dllist_idart > 0 ) {
$str_template_name = "download_listreg.html";
}

// print template
print $tpl->generate($cfgClient[$client]["tpl"]["path"] . $str_template_name, 1, 0);

} else {
$nonregmsg = "<p>".mi18n("Hinweis: Weitere Dokumente stehen Ihnen nach erfolgtem Login zur Verfügung.")."</p>";
if ( $warnnextmodulue == true ) {
$nonregmsg = "<p>".mi18n("Hinweis: Die Dokumente stehen Ihnen nach erfolgtem Login zur Verfügung.")."</p>";
}
}


}
print $nonregmsg;
?>
wenn jemand helfen könnte, wäre das super. merci!
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Beitrag von homtata »

so, mit etwas überlegung habe ich jetzt zumindest für diese version eine erste lösung hinbekommen. dabei wird sowohl der mögliche alte medienname wie auch der neue evtl. in upl_meta gespeicherte medienname berücksichtigt. Die Description wird scheinbar weiterhin korrekt angezeigt; ich lese zwar den Wert aus der upl_meta, setze ihn aber bisher nicht ein. Hier der Code [beta]:
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Download List
* Author(s) : Stefan Seifarth <info@polycoder.de>
* Copyright : www.polycoder.de / www.htcm.de
* Created : 2006-01-07
* Modified : 2006-11-07
************************************************/
cInclude ("classes", "class.upload.php");
cInclude ("classes", "class.properties.php");
cInclude ("classes", "class.htmlelements.php");
cInclude ("includes", "functions.upl.php");


// template defined vars
$dllist_path = "CMS_VALUE[110]";
$dllist_extensions = trim("CMS_VALUE[111]");
$dllist_idart = trim("CMS_VALUE[112]");
$dllist_filenamefilter = trim("CMS_VALUE[113]");

$cms_sort_direction = "CMS_VALUE[16]";
if ($cms_sort_direction == 'desc') {
$cms_sort_direction = 'DESC';
} else { $cms_sort_direction = 'ASC'; }


if ( $dllist_path == "none") {

$warnnextmodulue = true;

} else

{

// add filetype condition
$str_where_filetype = "";
if ( strlen ($dllist_extensions) > 0) {
$arr_extensions = explode (",",$dllist_extensions);

$arr_where = array();
foreach ($arr_extensions as $str_extension) {
$arr_where[] = "filetype ='" . trim($str_extension) . "'";
}

$str_where_filetype = ' ( ' . implode( " OR ", $arr_where ) . ' ) AND ';
}

// add filename filter condition
$str_where_filenamefilter = "";
if ( strlen ($dllist_filenamefilter) > 0) {

$arr_filenamefilter = explode(";", $dllist_filenamefilter);
$arr_where = array();

foreach ($arr_filenamefilter as $str_filenamefilter) {
$str_filenamefilter = trim($str_filenamefilter);
// replace special chars for wildcards
$str_filenamefilter = str_replace("%","\%", $str_filenamefilter);
$str_filenamefilter = str_replace("_","\_", $str_filenamefilter);
$str_filenamefilter = str_replace("*","%", $str_filenamefilter);
$str_filenamefilter = str_replace("?","_", $str_filenamefilter);
$arr_where[] = ' filename LIKE "' . mysql_escape_string($str_filenamefilter) . '"';
}
$str_where_filenamefilter = ' ( ' . implode( " OR ", $arr_where ) . ' ) AND ';
}

// get list of all files
$dllist_collection = new UploadCollection ();
$dllist_collection->select($str_where_filenamefilter . $str_where_filetype . " dirname = '" . $dllist_path . "'","","filename ".$cms_sort_direction);

// initialize needed objects
$obj_file_properties = new PropertyCollection();
$obj_icon = new cHTMLImage();
$obj_description = new cHTMLDIV();

// reset template
$tpl = new Template();
$tpl->reset();

// add head description
$tpl->set("s","HEAD_NAME", mi18n("Dateiname") );
$tpl->set("s","HEAD_FILETYPE", mi18n("Dateityp") );
$tpl->set("s","HEAD_FILESIZE", mi18n("Größe") );
$tpl->set("s","HEAD_COUNTER", mi18n("Downloads") );

// run file list
$image_id = 0;
while ($dllist_item = $dllist_collection->next() ) {
$image_id++;

// icon for file
$obj_icon->setSrc( uplGetFileIcon($dllist_item->get("filename")) );
//$obj_icon->setID("dlIco".$image_id);
$obj_icon->setID("iconDownload");

// filename
$str_file_name = $dllist_item->get("filename");
//$str_file_name_property = $obj_file_properties->getValue("upload", $dllist_item->get("dirname").$dllist_item->get("filename"), "file", "medianame");

// VL Medienname auslesen ab 4.8.8
$query= "SELECT medianame,description FROM " . $cfg["tab"]["upl_meta"] . " WHERE idupl = " . $dllist_item->get("idupl");
$result = mysql_query($query);

$medianame = "";
if ($row= mysql_fetch_array($result)) {
$medianame = $row['medianame'];
$file_description = $row['description'];
}
if (strlen($medianame) > 0) {
$str_file_name = htmlspecialchars(urldecode($medianame));
}

$medianame_old = "";
$medianame_old = $obj_file_properties->getValue("upload", $dllist_item->get("dirname").$dllist_item->get("filename"), "file", "medianame");
if (strlen($medianame_old) > 0) {
$str_file_name = $medianame_old;
}


// New File Description VL
$str_file_description = "";
if (strlen($dllist_item->get("description"))> 0) {
$str_file_description = $dllist_item->get("description");
} else {
//$str_file_description = mi18n("Linkbeschreibung fehlt");
}

// filecounter
$str_file_counter = "0";
$str_file_counter_property = $obj_file_properties->getValue("upload", $dllist_item->get("dirname").$dllist_item->get("filename"), "file", "counter");
if ( strlen ($str_file_counter_property) > 0 ) {
$str_file_counter = $str_file_counter_property;
}

// file url
$str_file_url = $cfgClient[$client]["upl"]["htmlpath"] . $dllist_item->get("dirname") . $dllist_item->get("filename");
if ( isset($dllist_idart) && !empty($dllist_idart) && (int)$dllist_idart > 0 ) {
$str_file_url = $sess->url("front_content.php?idart=" . $dllist_idart . "&changelang=" . $lang . "&client=" . $client . "&sse_idupl=" . $dllist_item->get("idupl") );
}

// fill template
$tpl->set("d", "FILE_ICON", $obj_icon->toHTML());
$tpl->set("d", "FILE_NAME", $str_file_name );
$tpl->set("d", "FILE_TYPE", $dllist_item->get("filetype") );
$tpl->set("d", "FILE_SIZE", human_readable_size($dllist_item->get("size")) );
$tpl->set("d", "FILE_COUNTER", $str_file_counter );
$tpl->set("d", "FILE_DESCRIPTION", $str_file_description );
$tpl->set("d", "FILE_URL", $str_file_url );

$tpl->next();
}

// set template
$str_template_name = "download_list.html";
if ( isset($dllist_idart) && !empty($dllist_idart) && (int)$dllist_idart > 0 ) {
$str_template_name = "download_list.html";
}

// print template
print $tpl->generate($cfgClient[$client]["tpl"]["path"] . $str_template_name, 1, 0);
}

?>
GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Beitrag von GaMbIt_ »

Ich hab die Funktion aus den Bildergalerien mal angepasst...

Code: Alles auswählen

/* Funktion zum Auslesen des Mediennamens */

function pl_getImageDescription($idupl) {

    global $cfg, $cfgClient, $db, $client, $lang;

    $cApiClient= new cApiClient($client);
    $language_separator= $cApiClient->getProperty('language', 'separator');
    if ($language_separator == "") {
        //Sanity, if module used in client without set client setting
        $language_separator= "§§§";
        $cApiClient->setProperty('language', 'separator', $language_separator);
    }
    if (is_numeric($idupl)) {
        //ID is a number 
        $query= "SELECT description FROM " . $cfg["tab"]["upl"] . " WHERE idupl = " . $idupl;
    } else {
        //ID is a string
        $path_parts= pathinfo($idupl);
        $upload= $cfgClient[$client]['upl']['frontendpath'];
        $len= strlen($upload);
        $pos= strpos($idupl, $upload);
        $dirname= substr($path_parts['dirname'], $pos + $len) . '/';
        $query = "SELECT u.description, m.medianame
        FROM " . $cfg["tab"]["upl"] . " u INNER JOIN " . $cfg["tab"]["upl_meta"] . " m
        ON u.idupl = m.idupl
        WHERE (u.dirname = '" . $dirname . "') AND (u.filename='" . $path_parts['basename'] . "') AND (u.filetype='" . $path_parts['extension'] . "')";

    }
    $db->query($query);
    if ($db->next_record()) {
#        return htmlspecialchars(urldecode($db->f("description")));
#        return array("desc"  => htmlspecialchars(urldecode($db->f("description"))),
#                     "media" => htmlspecialchars(urldecode($db->f("medianame")))
#                     );
        return array("desc"  => urldecode($db->f("description")),
                     "media" => htmlspecialchars(urldecode($db->f("medianame")))
                     );
    } else {
        return '';
    }
}
Ich hab aber aus Modulgründen bei der Description das htmlspecialchars() rausgenommen... der ausdokumentierte Code ist aber noch vorhanden...
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Medienname auslesen in 4.8.8, die x-te

Beitrag von homtata »

hallo und danke für deine antwort! etwas spät noch ein kommentar:
ich hatte das problem, dass das modul bei mir nicht korrekt sprachabhängige bildbeschreibungen ausgibt, obwohl diese in der dateiverwaltung entsprechend angelegt waren.
mit folgenden modifikationen klappt das nun:

Code: Alles auswählen

function ig_getImageDescription($idupl) {

    global $cfg, $cfgClient, $db, $client, $lang;

    $cApiClient= new cApiClient($client);
    $language_separator= $cApiClient->getProperty('language', 'separator');
    if ($language_separator == "") {
        //Sanity, if module used in client without set client setting
        $language_separator= "§§§";
        $cApiClient->setProperty('language', 'separator', $language_separator);
    }
    if (is_numeric($idupl)) {
        //ID is a number
        $query= "SELECT description FROM " . $cfg["tab"]["upl"] . " WHERE idupl = " . $idupl . " AND idlang = " . $lang;
    } else {
        //ID is a string
        $path_parts= pathinfo($idupl);
        $upload= $cfgClient[$client]['upl']['frontendpath'];
        $len= strlen($upload);
        $pos= strpos($idupl, $upload);
        $dirname= substr($path_parts['dirname'], $pos + $len) . '/';
        $query = "SELECT m.description, m.medianame
        FROM " . $cfg["tab"]["upl"] . " u INNER JOIN " . $cfg["tab"]["upl_meta"] . " m
        ON u.idupl = m.idupl AND m.idlang = " . $lang . "
        WHERE (u.dirname = '" . $dirname . "') AND (u.filename='" . $path_parts['basename'] . "') AND (u.filetype='" . $path_parts['extension'] . "')";

    }
    $db->query($query);
    if ($db->next_record()) {
#        return htmlspecialchars(urldecode($db->f("description")));
#        return array("desc"  => htmlspecialchars(urldecode($db->f("description"))),
#                     "media" => htmlspecialchars(urldecode($db->f("medianame")))
#                     );
        return array("desc"  => urldecode($db->f("description")),
                     "media" => htmlspecialchars(urldecode($db->f("medianame")))
                     );
    } else {
        return '';
    }
}
im illustrator-modul wird die funktion wie folgt aufgerufen:

Code: Alles auswählen

$description = ig_getImageDescription($img_path);
und die variablen für bildbeschreibung und medienname finden sich dann in

Code: Alles auswählen

$description['desc']
$description['media']
Gesperrt