Dann wirst die PDF wohl als Attachment speichern müssen...
WCF 2 Programmier-Tutorials - Übersicht
-
Christopher Walz -
11. September 2013 um 11:52 -
Geschlossen
-
-
Gibts in dem ganzen JS-Gewuschtel eigentlich irgendetwas zum Arbeiten mit Cookies?
-
- Offizieller Beitrag
Gibts in dem ganzen JS-Gewuschtel eigentlich irgendetwas zum Arbeiten mit Cookies?
Nein, die ganzen Cookies sind sowieso alle httpOnly; und daher für dich nicht erreichbar. Jetzt kommt meine übliche Frage: Was willst du /wirklich/ machen?
-
Cookies speichern und auslesen :p
-
Dann will ich ein unechtes
Am liebsten wäre mir das PDF als Anhang an der Mail. Anschließend soll es aber auch zum Download zur Verfügung stehen (für den Benutzer, dem ich das schicke)Also doch einen "echten" Anhang? Hier etwas Code aus meinem Paket. Ich hoffe es hilft dir
XML: objectType.xml<type> <name>NAME</name> <definitionname>com.woltlab.wcf.attachment.objectType</definitionname> <classname>KLASSE</classname> </type>
PHP: KLASSE
Alles anzeigenclass KLASSE extends AbstractAttachmentObjectType { /** * @see wcf\system\attachment\IAttachmentObjectType::canDownload() */ public function canDownload($objectID) { // z.B.: return WCF::getSession()->getPermission('permission'); } /** * @see wcf\system\attachment\IAttachmentObjectType::canUpload() */ public function canUpload($objectID, $parentObjectID = 0) { // wenn du nur serverseitig "hochladen" willst return false; } /** * @see wcf\system\attachment\IAttachmentObjectType::canDelete() */ public function canDelete($objectID) { // z.B.: return WCF::getSession()->getPermission('permission'); } /** * @see wcf\system\attachment\IAttachmentObjectType::getAllowedExtensions() */ public function getAllowedExtensions() { return array('pdf'); } }
PHP: PHP-Code zum "hochladen" einer Datei
Alles anzeigenprotected function uploadFile($tmpFilename, $fileExtension, $fileType = null) { // create attachment $attachment = AttachmentEditor::create(array( 'objectTypeID' => BillingHandler::getInstance()->objectType->objectTypeID, 'objectID' => $this->billing->billingID, 'filename' => $this->billing->getLocalizedDate().'.'.$fileExtension, 'filesize' => filesize($tmpFilename), 'fileType' => 'application/'.($fileType === null ? $fileExtension : $fileType), 'fileHash' => sha1_file($tmpFilename), 'uploadTime' => TIME_NOW )); // check if attachment directory exists $dir = dirname($attachment->getLocation()); if (!@file_exists($dir)) { @mkdir($dir, 0777); } rename($tmpFilename, $attachment->getLocation()); return $attachment; }
-
Wie ich Dich verstehe, ist das ein Upload-Beispiel für "systemseitige-Uploads", richtig?
Jetzt fehlt mir nur noch mein normaler Upload, wie hier im Thread. Da steig ich aber nicht durch bei der Analyse der sämtlichen Files -
Könntet ihr mir mal bitte kurz helfen?
Ich stehe vor einem Fehler, den ich nicht finde..MySql-Datei (install.sql)
SQL
Alles anzeigen-- installation-file -- (c) 2013 LTB-Labs -- author: Dominik Auracher -- drop existing tables DROP TABLE IF EXISTS sbm1_mail; DROP TABLE IF EXISTS sbm1_customer; -- create sbm1_customer CREATE TABLE sbm1_customer ( customerID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, customerFirstName VARCHAR(100) NOT NULL, customerLastName VARCHAR(100) NOT NULL, customerGender SMALLINT NOT NULL, customerStreetAndHouseNo VARCHAR(100) NOT NULL, customerPostCode VARCHAR(5) NOT NULL, customerCity VARCHAR(100) NOT NULL, customerWcfUser INT, customerEmail VARCHAR(100) DEFAULT '', customerTelephone VARCHAR(50) DEFAULT '', customerMobilephone VARCHAR(50) DEFAULT '', customerBirthday INT DEFAULT 0 ); ALTER TABLE sbm1_customer ADD FOREIGN KEY (customerWcfUser) REFERENCES wcf1_user (userID) ON DELETE SET NULL; ALTER TABLE sbm1_customer ADD INDEX customerFirstName (customerFirstName); ALTER TABLE sbm1_customer ADD INDEX customerLastName (customerLastName); -- /create sbm1_customer -- create sbm1_mail CREATE TABLE sbm1_mail ( mailID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, mailCustomer INT NOT NULL, mailEmail VARCHAR(100) NOT NULL, mailSubject VARCHAR(100) NOT NULL, mailMessage VARCHAR(1000) NOT NULL, mailSentUser INT NOT NULL, mailSentDate INT NOT NULL ); ALTER TABLE sbm1_mail ADD FOREIGN KEY (mailCustomer) REFERENCES sbm1_customer (customerID) ON DELETE SET NULL; ALTER TABLE sbm1_mail ADD FOREIGN KEY (mailSentUser) REFERENCES wcf1_user (userID) ON DELETE SET NULL; -- /create sbm1_mail -- add column to user-table ALTER TABLE wcf1_user ADD COLUMN customerID INT; -- /add column to user-table
Ich bekomme immer, wenn die SQL-Datei ausgeführt wird, einen Fehler:
Meine Datenbank heißt wcf2_test. Wenn ich dieser jetzt das SQL über den PHP-My-Admin reinjubel, beschwert sich niemand.
Das nervige ist halt, dass man nach jeder fehlgeschlagenen Datenbank-Installation das komplette WBB/WCF neu installieren muss ..Die Installation schlägt übrigens erst seit dem Anlegen der zweiten Tabelle fehl.
Gib mal statt INT eine konkrete Definition an, etwa INT(10). Wenn ich mich recht entsinne, hat INT standardmäßig eine Länge von 11, da wcf1_user.userID aber als INT(10) definiert ist, kann der Fremdschlüssel nicht angelegt werden. Die Bedingung für FOREIGN KEYs ist, dass beide Spalten identisch sind.
Jetzt hab ich das mal so gemacht, leider auch ohne Erfolg:
Neue SQL
SQL
Alles anzeigen-- installation-file -- (c) 2013 LTB-Labs -- author: Dominik Auracher -- drop existing tables DROP TABLE IF EXISTS sbm1_mail; DROP TABLE IF EXISTS sbm1_customer; -- create sbm1_customer CREATE TABLE sbm1_customer ( customerID INT(15) NOT NULL AUTO_INCREMENT PRIMARY KEY, customerFirstName VARCHAR(100) NOT NULL, customerLastName VARCHAR(100) NOT NULL, customerGender SMALLINT NOT NULL, customerStreetAndHouseNo VARCHAR(100) NOT NULL, customerPostCode VARCHAR(5) NOT NULL, customerCity VARCHAR(100) NOT NULL, customerWcfUser INT(10), customerEmail VARCHAR(100) DEFAULT '', customerTelephone VARCHAR(50) DEFAULT '', customerMobilephone VARCHAR(50) DEFAULT '', customerBirthday INT DEFAULT 0 ); ALTER TABLE sbm1_customer ADD FOREIGN KEY (customerWcfUser) REFERENCES wcf1_user (userID) ON DELETE SET NULL; ALTER TABLE sbm1_customer ADD INDEX customerFirstName (customerFirstName); ALTER TABLE sbm1_customer ADD INDEX customerLastName (customerLastName); -- /create sbm1_customer -- create sbm1_mail CREATE TABLE sbm1_mail ( mailID INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY, mailCustomer INT(15) NOT NULL, mailEmail VARCHAR(100) NOT NULL, mailSubject VARCHAR(100) NOT NULL, mailMessage VARCHAR(1000) NOT NULL, mailSentUser INT(10) NOT NULL, mailSentDate INT NOT NULL ); ALTER TABLE sbm1_mail ADD FOREIGN KEY (mailCustomer) REFERENCES sbm1_customer (customerID) ON DELETE SET NULL; ALTER TABLE sbm1_mail ADD FOREIGN KEY (mailSentUser) REFERENCES wcf1_user (userID) ON DELETE SET NULL; -- /create sbm1_mail -- add column to user-table ALTER TABLE wcf1_user ADD COLUMN customerID INT(15); -- ALTER TABLE wcf1_user ADD FOREIGN KEY (customerID) REFERENCES sbm1_customer (customerID) ON DELETE SET NULL; -- /add column to user-table
Was ich komisch finde, ist der Tabellenname, der in der Fehlermeldung genannt wird.
-
Ich würde gern im ACP eine Option erstellen, bei der man eine Benutzergruppe auswählen kann. Mit <optiontype>userGroup</optiontype> kann man leider mehrere auswählen. Jemand ne Idee?
-
Mach mal das NOT NULL bei sbm1_mail.mailCustomer und sbm1_mail.mailSentUser weg dann sollte es gehen.
-
Danke - hab ich übersehen
-
Ich schau´s mir später an und werde dann sicher noch Fragen haben.
So ganz schlau werde ich immer noch nicht draus. Konkret geht es um folgendes:Ich habe ein zusätzliches Gruppenrecht "Kann Inhalte disliken" erstellt. Bei nicht gegebener Permission werden per TL auf das footer-Template die Dislikebuttons global per JS entfernt. Für diesen Vorgang gibt es keinerlei von mir erstellte Klassendateien, sondern lediglich das Gruppenrecht, die Sprachvariable und das Template mit dem JS.
Nun möchte ich versuchsweise eine aclOption hinzufügen, die dann nur in einzelnen Foren bei entsprechender Einstellung der Zugriffsrechte diesen Effekt bewirkt.
Reicht es in diesem Fall aus, in meinem Template die aclOption (wie auch immer, darüber mache ich mir dann Gedanken, wenn es tatsächlich so funktionieren soll) auszulesen, oder habe ich etwas übersehen oder geht das gar in dieser Konstellation überhaupt nicht?
Gruß norse
-
- Offizieller Beitrag
Eine Idee am Rande, wenn du von einem Gruppenrecht sprichst, dann erstelle es doch als userGroupOption, dann hast du die ACLs nicht an der Backe
-
Scheinbar habe ich mich missverständlich ausgedrückt. Das Gruppenrecht wurde selbstverständlich als userGroupOption erstellt (ich wüsste auch nicht, wie das anders ginge). Nun möchte ich mich einfach dran versuchen, den installationsweit wirksamen Effekt zusätzlich in einzelnen Foren gezielt zu steuern. Dafür brauche ich dann doch die aclOption, oder etwa nicht?
Gruß norse
-
Ich würde gern im ACP eine Option erstellen, bei der man eine Benutzergruppe auswählen kann. Mit <optiontype>userGroup</optiontype> kann man leider mehrere auswählen. Jemand ne Idee?
Bevors untergeht lieber nochmal pushen
-
- Offizieller Beitrag
Nun möchte ich mich einfach dran versuchen, den installationsweit wirksamen Effekt zusätzlich in einzelnen Foren gezielt zu steuern.
Ach so, ich habe dich missverstanden. Okay, dann brauchst du nur eine ACL anzulegen die den selben Namen wie deine UserGroupOption hat. Dadurch wird bei der Erzeugung der Board-Permissions die ACL das Gruppenrecht überschreiben sobald gesetzt.Beispiel:
- userGroupOption.xml: <option name="user.board.canDoStuff">…</option>
- aclOption.xml: <option name="canDoStuff">…</option>
Abfragen kannst du die Berechtigung dann über {if $board->getPermission('canDoStuff')}…{/if}.
-
Das klingt gut, danke. So in der Art hätte ich es mir intuitiv eigentlich auch vorgestellt. Habe mich wohl nur davon irritieren lassen, dass unterschiedliche Texte für die Gruppenoptionen und Forenrechte existieren und so die eigentlichen Namen der Berechtigungen nicht mehr kontrolliert.
Kann ich die gezeigte Abfrage direkt im vorhandenen TL auf das footer-Template verwenden oder steht die Variable $board nicht überall zur Verfügung, so dass ich noch einen TL auf threadPostList hinzufügen muss, damit es auf anderen Seiten nicht zu einer Fehlermeldung kommt?
Gruß norse
-
- Offizieller Beitrag
$board ist natürlich nicht immer verfügbar, du musst also gezielt diese Seiten ansprechen.
-
Ist euch das auch schon einmal unter gekommen?
Chrome meldet mir ganz oft bei meinen eigenen Plugins Uncaught SyntaxError: Unexpected token ILLEGAL, wenn ich mit Templatelistenern arbeite bzw. JS einfügen will. In diesem Fall sogar nur ein Template einbinden, welches den Javascript-Code enthält.
Nervt mich.
-
Hast du mal in der Konsole nachgesehen, woren er sich da aufhängt?
Wahrscheinlich ist in deinem template irgendwo noch ein zeichen - z.B. nen zero-width whitespace zu viel (passiert leicht beim kopieren von jsfiddle).
-
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!