FrontendUser Plugin (Bild hochladen)

Gesperrt
_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

FrontendUser Plugin (Bild hochladen)

Beitrag von _wiewo_ » Do 25. Feb 2010, 09:46

Guten Morgen Community,

ich habe schon einige FrontendUser Plugins geschrieben wo man dann den Nachnamen, Vornamen etc eintragen kann, ist ja auch keine große Hürde.

Nun möchte ich ein FrontendUser Plugin schreiben wo man ein Logo hochladen kann.
Das Feld "durchsuchen" bekomme ich hin, nun möchte ich das aber nun auch speichern nachdem ich auf den grünen Pfeil gedrückt habe.
Hier haperts bei mir

Code: Alles auswählen

function frontendusers_logo_display()
{
    global $feuser;

    $oLogo = new cHTMLUpload('logo', 40);
    return $oLogo->render();
}

function frontendusers_logo_store($aVariables)
{
    global $feuser;

    if (!array_key_exists('logo', $aVariables))
    {
        return false;
    }
    else
    {
        $feuser->setProperty('stammdaten', 'logo', $aVariables['logo']);
        return true;
    }
}
wie mache ich nur die "frontendusers_logo_store"?

Möchte gerne das die Datei welche ausgewählt wurde in der Dateiverwaltung auftaucht.

Ordnerstruktur => Logos -> (frontenduserid) -> logo.(dateiendung)

den ordner anlegen, okay, machbar, aber... das bild, da steh ich irgendwie echt aufem schlauch.

kann mir da bitte jemand nen tipp geben?

conradius
Beiträge: 168
Registriert: Di 19. Jul 2005, 11:52
Wohnort: Wabern (Bern/CH)
Kontaktdaten:

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von conradius » Do 25. Feb 2010, 10:45

Hm.., vielleicht nicht ganz der gleiche Ansatz vielleicht, aber probier's mal so:

Code: Alles auswählen

// upload new photo to profile
if (isset($_FILES['photo'])) {
	if (in_array(strtolower($_FILES['photo']['type']), $aAllowedFileExtensions) && $_FILES['photo']['size'] <= $iMaxUplFileSize) {
		// check and create friendly filename using the CAPI-function
		cInclude("includes", "functions.upl.php");
		$sFriendlyFileName = uplCreateFriendlyName(basename($_FILES['photo']['name']));					
		$sTargetPath = $sFEUserPhotoDir.$sFriendlyFileName;					
		if (move_uploaded_file($_FILES['photo']['tmp_name'], $sTargetPath)) {
			$sRelativeDestImagePath = str_replace($cfgClient[$client]['upl']['path'], '', $sTargetPath);
			$oFEUser->setProperty("photo", "address", $sRelativeDestImagePath);
			$_REQUEST['photo'] = $sRelativeDestImagePath;
			$aMessages['success'][] = str_replace('{FILENAME}', '<strong>'.$sFriendlyFileName.'</strong>', mi18n("The file {FILENAME} has been saved as your new profile-photo."));
		} else {
			$aMessages['error'][] = mi18n("There was an error uploading the photo. Please check its filesize and filetype and try again.");
		}
	}
}
Ich meine damit: liegt es evtl. nur am Upload- und Kopiervorgang? Aber ich muss gestehen, dass ich sehr selten die Contenido-Api verwende und weiss gerade nicht, ohne zu schauen, was cHTMLUpload bereits alles macht.
Möchte gerne, dass die Datei, welche ausgewählt wurde, in der Dateiverwaltung auftaucht.
Meinst du, ohne dass man die Dateiverwaltung aufrufen muss, die Datei aber trotzdem in con_upl kommt? Hierzu müsstest du vermutlich die contenido/includes/functions.upl.php und daraus die Funktion uplSyncDirectory() benutzen. Schätze ich mal.

Gruss
Conradius

xmurrix
Beiträge: 3149
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von xmurrix » Do 25. Feb 2010, 10:46

Morgen,

an die hochgeladenen Dateien kommst du über die Superglobale $_FILES ran, schau dir mal die contenido/includes/include.upl_files_overview.php ab Zeile 95 an. Die Logik darin kannst du ansatzweise übernehmen. Das Formular sollte das Attribut enctype="multipart/form-data" haben.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von _wiewo_ » Do 25. Feb 2010, 10:47

das Formular sollte... jaha

ich befinde mich im Backend :) Frontend -> User auswählen -> Benutzernamen etc sehen :)

Im Frontend ein Logo hochladen, das ist kein Ding, aber das Backend, wie bekomme ich das dazu? :)

conradius
Beiträge: 168
Registriert: Di 19. Jul 2005, 11:52
Wohnort: Wabern (Bern/CH)
Kontaktdaten:

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von conradius » Do 25. Feb 2010, 11:41

klingt spannend.., kannst du noch etwas mehr beschreiben, wo du anstehst?

_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von _wiewo_ » Do 25. Feb 2010, 12:31

Hab mal nen Screenshot gemacht

das Plugin :

Code: Alles auswählen

<?php
function frontendusers_logo_getTitle()
{
    return i18n('Logo', 'frontendusers_logo');
}

function frontendusers_logo_display()
{
    global $feuser;

    $oLogo = new cHTMLUpload('logo', 40);
    return $oLogo->render();
}

function frontendusers_logo_wantedVariables()
{
    return (array('logo'));
}

function frontendusers_logo_canonicalVariables()
{
    return array('logo' => i18n('Logo', 'frontendusers_logo'));
}

function frontendusers_logo_getvalue($sField)
{
    global $feuser;

    if ($sField === 'logo')
    {
        return $feuser->getProperty('stammdaten', 'logo');
    }
}

function frontendusers_logo_store($aVariables)
{
    global $feuser;

    if (!array_key_exists('logo', $aVariables))
    {
        return false;
    }
    else
    {
        $feuser->setProperty('stammdaten', 'logo', $aVariables['logo']);
        return true;
    }
}
?>
hier weiß ich nicht so wirklich wie ich den "frontendusers_logo_store" bereich entwickeln muss (hab da noch nix angepackt, ist so wie wenn ich text speicher)
will soviel boardmittel wie möglich nutzen

das hauptproblem liegt denke ich mal an dem "multipart/form-data",
muss ich hier das form suchen im core und abändern?

in nem frontend hochladen krieg ich ohne probleme hin
Dateianhänge
picture_upload.png
picture_upload.png (25.39 KiB) 6498 mal betrachtet

_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von _wiewo_ » Do 25. Feb 2010, 12:32

huuch, ups, das form steht ja auf "multipart/form-data"

*wand*

ja ich werd mal basteln, man bin ich doof ><

_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von _wiewo_ » Do 25. Feb 2010, 16:29

so habe die Speicherung nun fertig

Code: Alles auswählen

function frontendusers_logo_store($aVariables)
{
    global $feuser;
    
    if (!array_key_exists('logo', $aVariables))
    {
        return false;
    }
    else
    {
        $sUploadDir = '../' . $cfg['path']['frontend'] . '/cms/upload/Logos/';
        $sFile = $feuser->getField('idfrontenduser') . '_' . $_FILES['logo']['name'];
        $sUploadFile = $sUploadDir . $sFile;
        
        move_uploaded_file($_FILES['logo']['tmp_name'], $sUploadFile);
        $oUmask = umask(0);
        chmod($sUploadFile, 0777);
        umask($oUmask);
        
        $feuser->setProperty('stammdaten', 'logo', $sFile);
        return true;
    }
}
habe nun das Problem, das ich das Bild nicht öffnen kann "404 Not Found" (daher hab ich die Rechte mal testweise auf 777 gestellt)

in der dateiverwaltung wird sie aufgelistet, aber die vorschau geht nicht,
zieh ich mir die datei per ftp kann ich sie ohne probleme öffnen, jemand ne idee?

conradius
Beiträge: 168
Registriert: Di 19. Jul 2005, 11:52
Wohnort: Wabern (Bern/CH)
Kontaktdaten:

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von conradius » Do 25. Feb 2010, 17:31

Also du hast die Datei mit dem PHP-Skript hochgeladen/geschrieben, PHP kann sie aber nicht auslesen?
Mit dem FTP-Benutzer kannst du die Datei aber lesen...

Klingt irgendwie nicht nach einem Problem bei der Gruppenzugehörigkeit und auf 777 hast du die Datei schon. hm...

Ist es ein Problem mit dem Dateinamen (Sonderzeichen)?

_wiewo_
Beiträge: 358
Registriert: Mo 8. Sep 2008, 11:12

Re: FrontendUser Plugin (Bild hochladen)

Beitrag von _wiewo_ » Do 25. Feb 2010, 17:34

heißt logo.png :)

per ftp ziehen geht ja, ist heile
und liegt mit 777 aufem server

vom server aus kein draufkommen

Gesperrt