Seite 1 von 12

[3.3] Final phpbb-ext-f1webtip ( F1 WebTipp ) 1.1.8

Verfasst: 13.05.2014 19:29
von Dr.Death
Hallo zusammen,

ich habe meinen Formel 1 WebTipp MOD für phpBB 3.3.x portiert:

Stand 18.02.2022 ist er fertig für phpBB 3.3.x

Folgende Features sind vorhanden:
  • Installation der Extension im ACP
  • ACP Module der Extension (Es können dediziert Berechtigungen im ACP vergeben werden)
  • Navigations Link auf der Foren Seite
  • Hinweise auf der "Wer ist online" Seite, wenn sich ein Benutzer im F1 WebTip aufhält
  • Darstellung des F1 WebTip Rankings auf der Profilansicht des Benutzers
  • Darstellung des F1 WebTip Rankings im View Topic Bereich des Benutzers
  • Der F1 WebTipp kann für Gäste sichtbar geschaltet werden, kann nur von registrierten Benutzern genutzt werden oder wird auf eine bestimmte Benutzergruppe beschränkt
  • Es können automatisch Erinnerungsmails per Mail versendet werden (nur wenn der F1 WebTipp auf eine Benutzergruppe beschränkt worden ist)
  • Moderatoren können Qualifying und Rennergebnisse eintragen
  • Dank Unimatrix_0 werden bereits gesetzte Fahrer aus den übrigen DropDown Boxen inaktiv, damit kein Fahrer versehentlich mehrfach getippt werden kann.
  • Es wird ein Countdown bis zum Tipp Ende angezeigt, danach ist keine Tipp Abgabe mehr möglich. (Zeit bis zur Deadline ist im ACP frei einstellbar)
  • Der F1 WebTipp unterstützt auch das Responsive Style, d.h. auf mobilen Endgeräten wird eine angepasste Darstellung aktiviert.
  • Version Check im ACP.
  • Vergabe von doppelter Punktzahl
  • Regel Anpassung für 2019: Extra Punkt für schnellste Runde
  • PHP 7.1, PHP 7.2, PHP 7.3, PHP 7.4, PHP 8.0, PHP 8.1 und PHP 8.2 ready
  • Im ACP können die eigenen Bilder nun bequem per Dropdown Box ausgewählt werden.
  • Download (und Screenshots) der Mod: http://drdeath.github.io/phpbb-ext-f1webtip/
  • Installation: Entpacke die heruntergeladene ZIP Datei. Du wirst einen neuen Ordner finden. Kopiere den Inhalt des neuen Ordners in Dein Forumsverzeichnis unter ext/drdeath/f1webtip/ und danach im Administrations-Bereich unter Anpassen --> Erweiterungen verwalten --> F1 Webtip aktivieren --> fertig
  • Es sind KEINE Veränderungen an irgendwelchen Dateien notwendig!

Anmerkungen von euch oder weitere Infos von mir, gibt es hier im Thema.

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 18.05.2014 13:35
von Dr.Death
Update:
  • WebTip Frontend für die F1 WebTipp User und F1 WebTipp Moderatoren ist fertig
  • Darstellung der Tipp Punkte auf der User Profil Seite
  • Darstellung der Tipp Punkte im View Topic User Bereich.
Der WebTipp ist also im jetzigen Zustand schon komplett "spielbar".

Es fehlen momentan nur noch das "nice to have" Feature:
- Versenden von Erinnerungs-Mails 2 bis 3 Tage vor Rennbeginn

Allerdings beiße ich mir genau daran die Zähne aus.... die User Funktionen $user->format_date() und das versenden von Mails wollen einfach nicht klappen innerhalb des Cronjobs..... vielleicht sollte ich das einfach mal aussitzen, bis jemand anderes einen Geistesblitz hat :roll:

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 20.05.2014 10:27
von Dr.Death
Ich komme tatsächlich nicht weiter..... vielleicht findet sich aber jemand, der mir auf die Sprünge hilt....

Ladet Euch die jetzige Extension herunter und tauscht noch folgende Dateien aus:

config / services.yml

Code: Alles auswählen

imports:
    - { resource: tables.yml }

services:
    drdeath.f1webtip.controller:
        class: drdeath\f1webtip\controller\main
        arguments:
            - @config
            - @controller.helper
            - @template
            - @user
    drdeath.f1webtip.listener:
        class: drdeath\f1webtip\event\main_listener
        arguments:
            - @controller.helper
            - @template
        tags:
            - { name: event.listener }
    cron.task.core.email_reminder:
        class: drdeath\f1webtip\cron\task\core\email_reminder
        arguments:
            - @config
            - @controller.helper
            - @template
            - @user
        calls:
            - [set_name, [cron.task.core.email_reminder]]
        tags:
            - { name: cron.task }
cron / task / core / email_reminder.php

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - DrDeath F1WebTip
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace drdeath\f1webtip\cron\task\core;

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

class email_reminder extends \phpbb\cron\task\base
{
    /* @var \phpbb\config\config */
    protected $config;

    /* @var \phpbb\controller\helper */
    protected $helper;

    /* @var \phpbb\template\template */
    protected $template;

    /* @var \phpbb\user */
    protected $user;

    /**
    * Constructor
    *
    * @param \phpbb\config\config        $config
    * @param \phpbb\controller\helper    $helper
    * @param \phpbb\template\template    $template
    * @param \phpbb\user                $user
    */
    public function __construct(\phpbb\config\config $config, \phpbb\controller\helper $helper, \phpbb\template\template $template, \phpbb\user $user)
    {
        $this->config = $config;
        $this->helper = $helper;
        $this->template = $template;
        $this->user = $user;
    }

    /**
    * Runs this cron task.
    *
    * @return null
    */
    public function run()
    {
        global $db, $user, $auth, $template, $cache, $request;
        global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
        global $phpbb_container, $phpbb_extension_manager, $phpbb_path_helper, $phpbb_log, $datetime, $lang;

        // Update the last run timestamp to today (i.e. 6192013 --> 06.19.2013)
        $check_time = (int) gmdate('mdY',time());
        $this->config->set('drdeath_f1webtip_reminder_last_run', $check_time, true);


        
        //Debug: Reset cron lock 
        $config->set('cron_lock', '0');
        $config->set('drdeath_f1webtip_reminder_last_run', '1', true);
        
        $race_time        = time();

        $event_stop        = date($race_time - $config['drdeath_f1webtip_deadline_offset']);
            
        echo "<br/>Var event_stop = $event_stop <br/>";

        echo "<pre>";print_r($user);echo "</pre>";
        
        $b_day            = $this->user->format_date($event_stop, 'd');
            


        

        // Log the cronjob run
        add_log('admin', 'LOG_FORMEL_CRON');
        
        return;
    }

    /**
    * Returns whether this cron task can run, given current board configuration.
    *
    * @return bool
    */
    public function is_runnable()
    {
        return true;
        // return (bool) $this->config['drdeath_f1webtip_reminder_enabled'];
    }

    /**
    * Returns whether this cron task should run now, because enough time
    * has passed since it was last run.
    *
    * @return bool
    */
    public function should_run()
    {
        //$check_time = (int) gmdate('mdY',time());
        //return $this->config['drdeath_f1webtip_reminder_last_run'] != $check_time;
        return true;
    }
}

?>
Dann aktiviert ihr die Extension im ACP und setzt folgende Option in
ACP / General / Server settings / Run periodic tasks from system cron: YES

Aktiviert in der config.php noch die DEBUG Ausgabe.


Wenn man jetzt sein lokales Forum mit
http:// localhost / dein_forum / cron.php
aufruft, erscheinen alle Cronjobs, die gerade verfügbar sind.

Beispielausgabe:
[phpBB cron] Running task 'cron.task.core.prune_all_forums' [phpBB cron] Running task 'cron.task.core.email_reminder'
Allerdings scheitere ich beim Versuch eines simplen Befehls:

Code: Alles auswählen

$b_day            = $this->user->format_date($event_stop, 'd');
$event_stop beinhaltet einen normalen Timestamp, mehr nicht

Fehlermeldung sind:
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/user.php on line 712: DateTime::setTimezone() expects parameter 1 to be DateTimeZone, null given
[phpBB Debug] PHP Notice: in file [ROOT]/phpbb/datetime.php on line 148: Undefined index: datetime
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/datetime.php on line 148: array_filter() expects parameter 1 to be array, null given
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/datetime.php on line 112: strtr(): The second argument is not an array
Anscheinen wird das $user array nicht komplett gefüllt (von mir aus nehme ich auch den User ANONYMOUS....)

Teile vom $user array sehen zu diesem Zeitpunkt so aus:

Code: Alles auswählen

phpbb\user Object
(
    [lang] => Array
        (
        )

    [help] => Array
        (
        )

    [style] => Array
        (
        )

    [date_format] => 
    [timezone] => 
    [lang_name] => 
    [lang_id] => 
    [lang_path] => ./language/
    [img_lang] => 
Was habe ich vergessen?
Ich sehe momentan den Wald vor lauter Bäumen nicht ;-(

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 20.05.2014 13:38
von nickvergessen
Könnte daran liegen wenn das Sprachpaket nicht ganz aktuell ist.
Wenn es das nicht ist, werd ich nochmal nachsehen.

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 20.05.2014 14:16
von Dr.Death
Hm,

für mich sieht es auch so aus, als wenn zum Zeitpunkt des Cron Aufrufs keinerlei Sprachpaket angezogen wurde..... das $user array ist zu diesem Zeitpunkt nicht komplett gefüllt, daher dann auch die "Folgefehler" mit dem $user->format_date()

Ziel ist es durch einen Cron Task, einmal täglich zu prüfen, ob ein Rennen in den nächsten 3 Tagen vorliegt.
Wenn ja, dann sollen alle User einer bestimmten Gruppe per Mail darüber informierten werden.
Anschliessend wird das betroffene Rennen "markiert", damit am nächsten Tag keine erneute Erinnerungsmail versendet wird.


Aber schon mal Danke für das Betrachten des Fehlers......


UPDATE:
  • Deutsches Sprachpaket für den F1 WebTipp hinzugefügt.
  • Viewonline Status auf der Seite "Wer ist online" hinzugefügt


Re: [DEV] phpbb-ext-f1webtip

Verfasst: 22.05.2014 16:58
von Dr.Death
Anscheinend habe ich das Problem mit dem leeren $user Objekt gefunden.

Zum Zeitpunkt des Cron Task ist das Objekt tatsächlich leer, da es noch nicht mit:

Code: Alles auswählen

        $user->setup();
gefüllt wurde!

Nach einfügen des Codes sollte der Rest auch klappen....

Edit:

Zu früh gefreut.... nun hänge ich am initiieren der Messenger Klasse fest :-(

Datei
cron / task / core / email_reminder.php

sieht zum Testen wie folgt aus:

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - DrDeath F1WebTip
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace drdeath\f1webtip\cron\task\core;

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

class email_reminder extends \phpbb\cron\task\base
{
    /* @var \phpbb\config\config */
    protected $config;

    /* @var \phpbb\controller\helper */
    protected $helper;

    /* @var \phpbb\template\template */
    protected $template;

    /* @var \phpbb\user */
    protected $user;

    /**
    * Constructor
    *
    * @param \phpbb\config\config        $config
    * @param \phpbb\controller\helper    $helper
    * @param \phpbb\template\template    $template
    * @param \phpbb\user                $user
    */
    public function __construct(\phpbb\config\config $config, \phpbb\controller\helper $helper, \phpbb\template\template $template, \phpbb\user $user)
    {
        $this->config = $config;
        $this->helper = $helper;
        $this->template = $template;
        $this->user = $user;
    }

    /**
    * Runs this cron task.
    *
    * @return null
    */
    public function run()
    {
        global $db, $user, $auth, $template, $cache, $request;
        global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
        global $phpbb_container, $phpbb_extension_manager, $phpbb_path_helper, $phpbb_log, $datetime, $lang;

        // Update the last run timestamp to today (i.e. 6192013 --> 06.19.2013)
        $check_time = (int) gmdate('mdY',time());
        $this->config->set('drdeath_f1webtip_reminder_last_run', $check_time, true);


        
        // Debug Start: Reset cron lock 
        $config->set('cron_lock', '0');
        $config->set('drdeath_f1webtip_reminder_last_run', '1', true);
        // Debug Ende
        
        $race_time        = time();

        $event_stop        = date($race_time - $config['drdeath_f1webtip_deadline_offset']);
                    
        $b_day            = $this->user->format_date($event_stop, 'd');
            

        //Mail Settings
        $use_queue         = false;
        $used_method     = NOTIFY_EMAIL;
        $priority         = MAIL_NORMAL_PRIORITY;
        
        include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
        include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
        $messenger = new messenger($use_queue);
        
        // hier ist das Script schon gestorben //

        // Log the cronjob run
        add_log('admin', 'LOG_FORMEL_CRON');
        
        return;
    }

    /**
    * Returns whether this cron task can run, given current board configuration.
    *
    * @return bool
    */
    public function is_runnable()
    {
        return true;
        // return (bool) $this->config['drdeath_f1webtip_reminder_enabled'];
    }

    /**
    * Returns whether this cron task should run now, because enough time
    * has passed since it was last run.
    *
    * @return bool
    */
    public function should_run()
    {
        //$check_time = (int) gmdate('mdY',time());
        //return $this->config['drdeath_f1webtip_reminder_last_run'] != $check_time;
        return true;
    }
}

?>
Fehlermeldung lautet:
Fatal error: Class 'drdeath\f1webtip\cron\task\core\messenger' not found in /..../phpbb31/ext/drdeath/f1webtip/cron/task/core/email_reminder.php
Nur warum findet er die Klasse nicht? Die Datei includes/functions_messenger.php wurde ja erfolgreich geladen..... irgendwie hab ich mittlerweile ein Brett vorm Kopf...oder ich werde alt ;-)

Habe dazu mal ein neuen Branch auf github angelegt:
https://github.com/DrDeath/phpbb-ext-f1 ... n_reminder

Um den Fehler zu sehen einfach in der Datei cron / task / core / email_reminder.php
Zeile 144 von:
// $messenger = new messenger($use_queue);
in
$messenger = new messenger($use_queue);

ändern und die cron.php aufrufen.....

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 23.05.2014 00:04
von nickvergessen
Du musst \messenger benutzen (mit Backslash am Anfang) um den Namespace zubeheben

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 23.05.2014 08:08
von Dr.Death
whaaaaaa........ :o :oops: 8) :D


Danke !!!eins!!!111!!elf!!!!! :roll: :wink: :cookie:

Das ist die Rätsels Lösung!

Vielen Dank! Der letzte Stein ist beseitigt.....

Re: [DEV] phpbb-ext-f1webtip

Verfasst: 23.05.2014 20:19
von Dr.Death
Update:

Die phpBB Extension F1 WebTip ist nun mit allen alten, bekannten Features "phpBB 3.1 beta 3" ready !

Alles was Ihr vom momentan aktuellen phpBB 3 F1 WebTipp kennt ist nun auf phpBB 3.1 beta 3 portiert worden.


Bitte beachtet: phpBB 3.1 ist noch nicht für den produktiven Betrieb gedacht !

Sobald der erste Release Candidat von phpBB 3.1 verfügbar ist, werde ich die momentane Version 0.1.0 entfernen und eine neue 1.0.0 Version veröffentlichen.

Download der phpBB 3.1 beta 3 Extension phpbb-ext-f1webtip findet Ihr hier:
https://github.com/DrDeath/phpbb-ext-f1webtip


Nochmals Danke an alle, die mir in den letzten Tagen wertvolle Tipps und Hinweise gegeben haben.....

Re: [DEV] phpbb-ext-f1webtip ( F1 WebTipp )

Verfasst: 30.05.2014 17:47
von Dr.Death
Update: Siehe erster Beitrag

Die Extension ist nun phpBB 3.1 Beta 4 fertig.

Wer bisher die Version "0.1.0" installiert hatte, sollte bitte vor Installation der "1.0.0-dev" Version die Extension entfernen:
1. Deaktiviere die Erweiterung
2. Lösche die Daten der Erweiterung
3. Lösche die Dateien der Erweiterung aus dem Dateisystem
Erst danach bite die Version 1.0.0-dev installieren.
Die nachfolgenden Version werden einfach aktualisiert....