[dev] Inschrijven activiteit

Zelf bezig aan een extensie? Wij kijken graag mee..
Plaats reactie
Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

[dev] Inschrijven activiteit

Bericht door Zunflappie » 24 feb 2015, 10:16

Op het oude phpBB 3.0-forum had ik in een bepaald forum (f=24) de mogelijkheid dat mensen zich konden 'inschrijven' voor een activiteit.
Met daarnaast de mogelijkheid brommer of motor (en eventueel gasten).

Nu ga ik dat terugbrengen, maar wel iets 'algemener' door alleen maar een "Deelnemen"-knop te maken.
Die ook weer "niet meer deelnemen"-knop wordt als je bent ingeschreven.

Iemand tips?
Het wordt uiteraard een extensie, maar wel met PHP (opslaan in database).

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 25 feb 2015, 17:25

Het is inmiddels af: download de bestanden op http://www.zunflappie.nl/phphulp/deelnemen.zip
Pak ze uit en zet de mappen in je /root/
Let op: de map wordt dus uiteindelijk ext/erkelens/deelnemen/
Let op dat je dit niet wijzigt: er is hardcoded naar verwezen in de PHP!

En maak deze tabel aan, via phpMyAdmin oid

Code: Selecteer alles

CREATE TABLE IF NOT EXISTS `deelnemen` (
  `user_id` int(16) NOT NULL,
  `topic_id` int(16) NOT NULL,
  `actief` int(11) NOT NULL DEFAULT '1',
  `post_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
1) Open en bewerk ext/erkelens/deelnemen/styles/template/all/events/viewtopic_buttons_top_before.html
Verander daar je forum-id naar de juiste. Je kan ook meerdere fora aangeven:
<!-- IF S_FORUM_ID == 4 or S_FORUM_ID == 5 --> voor 4 en 5
<!-- IF S_FORUM_ID == 4 or S_FORUM_ID == 6 or S_FORUM_ID == 8--> voor 4, 6 en 8.
Dus kunnen geen overkoepelende fora zijn!

Log in op je Admin-paneel en schakel de extensie in.


Vragen tot nu toe?
1) Kan ik die database niet laten aanmaken bij de installatie? En verwijderen bij 'uitschakelen/verwijderen'?
2) Veiligheid: sql.php is natuurlijk niet fraai, maar phpBB staat geen database toe in je templates en ook geen $user en/of $db etc. Vandaar de rare omwegen. Er zit wel beveiliging in (op IP-adres).
3) Is het zo 'klaar'?

Gebruikersavatar
Paul
Beheerder
Beheerder
Berichten: 20297
Lid geworden op: 23 okt 2003, 11:38
Locatie: Utrecht
Contacteer:

Re: [dev] Inschrijven activiteit

Bericht door Paul » 26 feb 2015, 07:38

Pas op, je script is gevoelig voor SQL injection:

Code: Selecteer alles

	$sql = "DELETE FROM deelnemen 
			WHERE user_id = " . $user_id . " 
			AND topic_id = " . $topic_id;
Aangezien zowel $user_id als $topic_id via request_var (Wat $_GET/$_POST is) opgevraagd wordt, en je een string als type hebt, zorgt dit voor SQL injectie. Om dit op te lossen moet je als tweede parameter van request_var een int opgeven.

In je INSERT query gebeurd hetzelfde. Ook horen daar integers niet in single quotes.

PHP hoort niet in je templates, dit hoort in de PHP files. Om template variable te assigenen kan je een event listener gebruiken om dit te doen.
Front end files hoor je via een controller af te handelen, niet met een front facing file in je root.

Mocht je de extensie ooit willen submitten naar de extensie database op phpBB.com, raad ik je aan je nog eens te verdiepen in extensies. De huidige versie voldoet bij lange na niet aan de standaarden waarop wij valideren.

Gebruikersavatar
dmzx
Berichten: 46
Lid geworden op: 25 jan 2015, 07:58
Locatie: Zuid-Holland
Contacteer:

Re: [dev] Inschrijven activiteit

Bericht door dmzx » 26 feb 2015, 07:43

Afbeelding

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 26 feb 2015, 07:52

@ Paul:
Over de validatie: goed punt. Pas ik gelijk even aan.
Over de template-events: op deze plek is 1 (slecht geplaatst) event. Die gebruik ik voor de include.
Dit kan ook prima, de ACP geeft er zelf mogelijkheid toe.

Via een controller: ik heb er mee geprobeerd te werken, maar kreeg het niet werkend. En dit werkt zo ook.
Ik heb ook geen behoefte aan dat dit echt een extensie moet worden. Ik wilde het gewoon even delen met de rest.

@dmzx: voorheen in 3.0 was dit ook op nagenoeg dezelfde manier gedaan, alleen was phpBB toen niet zo streng op het gebruik van $db en $user.

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 27 feb 2015, 10:07

Ik ben toch maar even gaan kijken naar de php-events of php-hooks
Ik heb nu dit:

Code: Selecteer alles

<?php

    use Symfony\Component\EventDispatcher\EventSubscriberInterface;

    class phpbb_ext_erkelens_deelnemen_event_formulier implements EventSubscriberInterface
    {
        static public function getSubscribedEvents()
        {
            return array('core.posting_modify_submit_post_after' => 'sla_deelname_informatie_op', );
        }


        public function sla_deelname_informatie_op($event)
        {
            global $user;
            global $db;
            die("Dit werkt?");
            $sql = "DELETE FROM deelnemen_info WHERE topic_id = ".$topic_id;
            $result = $db->sql_query($sql);
            
            
            $sql = "INSERT INTO deelnemen_info 
                        (topic_id, datum, locatie, inschrijven_tot) 
                    VALUES 
                        ('1234', '2015-02-27 14:30:29', 'Thuis', '2015-03-11 08:22:40');
                        
                        ";
            $result = $db->sql_query($sql);            


            // voorbeeld-code
            /*
            if($event['row']['user_id'] != ANONYMOUS)
            {
                // Load the karma language file
                //$user->add_lang_ext('phpbb/karma', 'karma');

                $post_row = $event['post_row'];
                $post_row['POSTER_KARMA_SCORE'] = $event['user_poster_data']['karma_score'];
                
                $event['post_row'] = $post_row;
            }
             * 
             */
        }

    }
 
Dit staat in /ext/erkelens/deelnemen/events/formulier.php

Maar, hij doet het niet. Hij moet 'sterven' (makkelijke test), maar dat doe hij niet.
Bedoel is dat er een extra formulier (wat ik in posting.php toon, bij nieuwe topics in forum_id=14) wordt opgeslagen in een aparte tabel in de database.
Dit omvat datum, locatie, inschrijven_tot (datum)

Waarom werkt dit niet? Via https://wiki.phpbb.com/Add_Listeners heb ik exact gedaan wat er staat.
Iemand een beetje hulp?

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 09 mar 2015, 13:50

Iemand die wat meer kan helpen?

Gebruikersavatar
John P
Berichten: 163
Lid geworden op: 29 sep 2012, 13:48
Contacteer:

Re: [dev] Inschrijven activiteit

Bericht door John P » 29 mar 2015, 19:55

Tabelletje aanmaken bij enable van je extensie

Code: Selecteer alles

namespace erkelens\deelnemen\migrations\v10x;

/**
* Migration stage 1: Initial schema changes to the database
*/
class m1_initial_schema extends \phpbb\db\migration\migration
{
    /**
    * Add the table.
    *
    * @return array Array of table schema
    * @access public
    */
    public function update_schema()
    {
        return array(
            'add_tables'    => array(
            $this->table_prefix . 'deelnemen' => array(
                'COLUMNS'        => array(
                    'user_id'    => array('UINT:11', 0),
                    'topic_id'    => array('UINT:11', 0),
                    'active'    => array('BOOL', 1),
                    'post_time' => array('UINT:11', 0),
                ),
                'KEYS'            => array(
                    'id'        => array('UNIQUE', array('user_id', 'topic_id')))
                )
            )
        );
    }

    /**
    * Drop the table.
    *
    * @return array Array of table schema
    * @access public
    */
    public function revert_schema()
    {
        return array(
            'drop_tables' => array(
                $this->table_prefix . 'deelnemen')
        );
    }
}
 
Neem op in de map migrations in je extensie (bijv. m1_initial_schema.php
Afbeelding
Webhosting, Custom MODs, Technical management, MOD installation and Webdesign

Gebruikersavatar
John P
Berichten: 163
Lid geworden op: 29 sep 2012, 13:48
Contacteer:

Re: [dev] Inschrijven activiteit

Bericht door John P » 31 mar 2015, 14:11

Sterk dat gisteren de harmonie met dezelfde wens kwam.
Ik deel hem dan ook hier, https://github.com/ForumHulp/participate
Afbeelding
Webhosting, Custom MODs, Technical management, MOD installation and Webdesign

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 09 apr 2015, 20:02

Nog iemand wat hulp?

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 19 apr 2015, 14:15

Het is nogal een kick, maar ik wil hier eigenlijk wel verder mee gaan.
Zodat er ook een agenda kan komen.
Vraagstelling is nog hetzelfde: viewtopic.php?f=95&t=59922#p456992

Zunflappie
Berichten: 54
Lid geworden op: 21 jan 2005, 20:42

Re: [dev] Inschrijven activiteit

Bericht door Zunflappie » 25 apr 2015, 07:49

Een week verder nog een kick.


Ik heb inmiddels mijn verwachtingen bijgesteld, want echt 'makkelijk' is het niet.

Hoe voer ik PHP-code uit op de plek in posting.php :

Code: Selecteer alles

<?php
extract($phpbb_dispatcher->trigger_event('core.posting_modify_submission_errors', compact($vars)));
?>
Dus ik wil gewoon op die plek PHP-code uitvoeren.
Nu kan ik posting.php zelf aanpassen, maar dat hoeft toch niet?


Vraag is: hoe krijg ik dit via een extensie aan de praat?

Gebruikersavatar
John P
Berichten: 163
Lid geworden op: 29 sep 2012, 13:48
Contacteer:

Re: [dev] Inschrijven activiteit

Bericht door John P » 25 apr 2015, 08:48

Ik zou zeggen bestudeer het voorbeeld 3 berichten hierboven dan moet het wel duidelijk worden.
Afbeelding
Webhosting, Custom MODs, Technical management, MOD installation and Webdesign

Plaats reactie