MyBB.de Forum

Normale Version: Add User To Threads And Events -> Entwicklungsthread
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Abend allerseits,

habe nun vor kurzem mein erstes Plugin veröffentlicht

-> https://www.mybb.de/forum/thread-21944.html (Download und Informationen)

und möchte es nun nach und nach verbessern.
kommen wir aber zum kleinen bescheidenen haken:
stehe mit meinen programmierkenntnissen noch am anfang, vorallem in verbindung mit mybb.


daher wollte ich die bescheidene frage loswerden...wie kann ich beim erstellen/editieren eines events (im Kalender/Thread) eine einstellungsoption hinzufügen, die der benutzer auswählen kann?
die hooks sind ja schnell gefunden dafür...aber wie genau sieht die umsetzung nun aus in mybb?
kennt ihr da vielleicht plugins, die ohen viel schnick schnack soetwas realisieren?

mfg

Gemil
Das ist relativ aufwendig: Du musst in den Te,plate die Option hinzufügen, bei den Hooks den Wert überprüfen, deinen Code ausführen und ggf. die Option auch mit einem Wert füllen.
Bei meinem Download-System sind das ungefähr 8 Hooks, im Kalender könnten es ein paar weniger sein.
beim calender ist es etwas einfacher Smile
hab bisher nur 2 hooks nutzen müssen dafür (editieren nicht mit eingeschlossen).
arbeite nun noch an der auswertung der einstellungen, und wie ich das genau umsetze

edit:

nochmal eine kleine frage...wie genau muss meine datenbank abfrage aussehen, um von einer fid (kategorie) alle unterforen (fid) zu bekommen?
möchte in einer if abfrage prüfen, ob in diesem forum das eventsystem eingesetzt werden soll.
***Plugin Aktualisiert auf die Version 0.2***

CHANGELOG:

Version 0.2:

+ Kategorie Support (Forumauswahlliste beim erstellen eines Events)
+ Individuell einstellbares Ticketsystem für jedes Event
+ Gruppenticketunterstützung in der Kalender (einzel + tages) Ansicht
+ Formatierung in allen Ansichten verfeinert

Version 0.1:

+ Forum Suppot (Automatisches posten neuer Events)
+ Ticketsystem für automatische Gliederung in Gruppen
+ Anmeldung im Kalender und Thread
+ Anzeige aller angemeldeten Teilnehmer im Thread, Event sowie in der Tagesansicht
Moin,
stehe nun kurz vor dem release der version 0.3
dabei werde ich eine editevent funktion mit einbauen, welche den thread automatisch aktualisiert, wnen sich die beschreibung des events ändert.
dabei habe ich zurzeit ein problem...
das plugin unterstützt ja kategorien-> sodass man ein unterforum einer kategorie auswählen kann beim erstellen eines events. wenn ich nun aber ein event editiere, möchte ich die möglichkeit haben, die foren angehörigkeit zu ändern!
sprich ich möchte den bereits existierenden thread in ein anderes forum verschieben.

das ganze ist bisher mit diesem php code gelöst:

PHP-Code:
//prüfen ob fid sich geändert hat
        
$tmp $db->simple_select("autt""tid, fid""eid = ".$event['eid']."");
        
$tid $db->fetch_field($tmp"tid");
        
$fid $db->fetch_field($tmp"fid");
        if (
$forenid != $fid) {
            
$sqlarray = array(
                
"fid" => $forenid,
            );
            
$db->update_query("threads"$sqlarray"tid='$tid'");
            
$db->update_query("posts"$sqlarray"tid='$tid'");
        } 
dadurch verschiebt er den thread auch...allerdings wird in der forenübersicht der neue thread dann nicht im forum angezeigt -> erst wenn ich den Forenzähler aktualisieren tu.
wie genau kann ich diesen per code in einem plugin aktualisieren? hab zwar schon bischen gestöbert, konnte aber nichts finden
Schau dir mal an, wie es bei der Moderation gemacht wird... Es müssen nämlich noch weitere Daten aktualisiert werden.
meinst du diesen code teil ab zeile 877 in class.moderation.php?

PHP-Code:
            case "move"// plain move thread
                
$arguments = array("tid" => $tid"new_fid" => $new_fid);
                
$plugins->run_hooks("class_moderation_move_simple"$arguments);

                if(
$thread['visible'] == 1)
                {
                    
$num_threads++;
                    
$num_posts $thread['replies']+1;
                }
                else
                {
                    
$num_unapproved_threads++;
                    
// Implied forum unapproved count for unapproved threads
                     
$num_unapproved_posts $thread['replies']+1;
                }
                
                
$num_unapproved_posts $thread['unapprovedposts'];

                
$sqlarray = array(
                    
"fid" => $new_fid,
                );
                
$db->update_query("threads"$sqlarray"tid='$tid'");
                
$db->update_query("posts"$sqlarray"tid='$tid'");
                
                
// If we're moving back to a forum where we left a redirect, delete the rediect
                
$query $db->simple_select("threads""tid""closed LIKE 'moved|".intval($tid)."' AND fid='".intval($new_fid)."'");
                while(
$movedthread $db->fetch_array($query))
                {
                    
$db->delete_query("threads""tid='".intval($movedthread['tid'])."'"1);
                }
                break; 

von dort hab ich die aktualisierungen für die db übernommen, allerdings versteh ich nicht ganz wie nun an zeile 919, bzw 940 fortgefahren wird.
PHP-Code:
        // Do post count changes if changing between countable and non-countable forums
        
$query $db->query("
            SELECT COUNT(p.pid) AS posts, u.uid, p.visible
            FROM "
.TABLE_PREFIX."posts p
            LEFT JOIN "
.TABLE_PREFIX."users u ON (u.uid=p.uid)
            WHERE tid='
$tid'
            GROUP BY u.uid, p.visible
            ORDER BY posts DESC
        "
);
        while(
$posters $db->fetch_array($query))
        {
            if(
$method == "copy" && $newforum['usepostcounts'] != && $posters['visible'] != 0)
            {
                
$pcount "+{$posters['posts']}";
            }
            elseif(
$method != "copy" && ($newforum['usepostcounts'] != && $forum['usepostcounts'] == && $posters['visible'] != 0))
            {
                
$pcount "+{$posters['posts']}";
            }
            elseif(
$method != "copy" && ($newforum['usepostcounts'] == && $forum['usepostcounts'] != && $posters['visible'] != 0))
            {
                
$pcount "-{$posters['posts']}";
            }
            if(!empty(
$pcount))
            {
                
$db->write_query("UPDATE ".TABLE_PREFIX."users SET postnum=postnum{$pcount} WHERE uid='{$posters['uid']}'");
            }
        }

        
// Update forum counts
        
$update_array = array(
            
"threads" => "+{$num_threads}",
            
"unapprovedthreads" => "+{$num_unapproved_threads}",
            
"posts" => "+{$num_posts}",
            
"unapprovedposts" => "+{$num_unapproved_posts}"
        
);
        
update_forum_counters($new_fid$update_array);

        if(
$method != "copy")
        {
            
$update_array = array(
                
"threads" => "-{$num_threads}",
                
"unapprovedthreads" => "-{$num_unapproved_threads}",
                
"posts" => "-{$num_posts}",
                
"unapprovedposts" => "-{$num_unapproved_posts}"
            
);
            
update_forum_counters($fid$update_array);
        }

        if(isset(
$newtid))
        {
            return 
$newtid;
        }
        else
        {
            
// Remove thread subscriptions for the users who no longer have permission to view the thread
            
$this->remove_thread_subscriptions($tidfalse$new_fid);

            return 
$tid;
        } 

dort werden zu erst ja die beitragszähler aktualisiert, udn anschließend die forumzähler. allerdings weiß ich nicht welche dieser variablen ich in einem plugin verwenden kann..., oder viel mehr wie ich es meinen bedürfnissen anpassen muss.
das ganze wird ja am hook do_editevent_end ausgeführt - und dort gibs ja keine direkten variablen vom thread. muss diese mithilfe der threadid die in autt hinterlegt ist mir ja alle selber erzeugen
Gibt es nicht etwas ähnliches, wie dies?

PHP-Code:
require_once MYBB_ROOT."inc/class_moderation.php";
                
$moderation = new Moderation;
                
$moderation->move_threads($tid$fid); 
leider führt dies so nämlich zu keiner aktion...Sad
Doch, so müsste es funktionieren. Bist du sicher, dass die Daten stimmen?
die daten setzt er ja auch korrekt um, wenn ich es direkt änder ein der DB.
hab hier mal als anhang die gesammte funktion aufgeführt, die er aufruft bei do_editevent_end

alles funktioniert bisher, bis auf den teil mit dem verschieben
PHP-Code:
function autt_editthread()
{
    global 
$db$mybb$event$calendar;
    if (
$mybb->settings['autt_cal'] == $calendar['cid']) {
        
// Set up posthandler.
        
require_once MYBB_ROOT."inc/functions_post.php";
        require_once 
MYBB_ROOT."inc/datahandlers/post.php";
        
$posthandler = new PostDataHandler("update");
        
$posthandler->action "post";
        if (
$mybb->input['forenid'] != NULL)
        {
            
$forenid $mybb->input['forenid'];    
        }
        else 
        {
            
$forenid $mybb->settings['autt_id'];
        }
        
// Set the post data that came from the input to the $post array.
        
$tmp $db->query("SELECT firstpost FROM ".TABLE_PREFIX."threads NATURAL JOIN ".TABLE_PREFIX."autt WHERE eid = '".$event['eid']."';");
        
$postid $db->fetch_field($tmp"firstpost");
        
$post = array(
            
"pid" => $postid,
            
"subject" => "[".$event['start_date']['day'].".".$event['start_date']['month'].".".$event['start_date']['year']."] - ".$event['name'],
            
"icon" => $mybb->input['icon'],
            
"uid" => $mybb->user['uid'],
            
"username" => $mybb->user['username'],
            
"edit_uid" => $mybb->user['uid'],
            
"message" => $mybb->input['description'],
        );
    
        
// Set up the post options from the input.
        
$post['options'] = array(
            
"signature" => $mybb->input['postoptions']['signature'],
            
"subscriptionmethod" => $mybb->input['postoptions']['subscriptionmethod'],
            
"disablesmilies" => $mybb->input['postoptions']['disablesmilies']
        );
    
        
$posthandler->set_data($post);
    
        
// Now let the post handler do all the hard work.
        
if($posthandler->validate_post())
        {
            
$postinfo $posthandler->update_post();
            
//prüfen ob fid sich geändert hat
            
$tmp $db->simple_select("autt""tid, fid""eid = ".$event['eid']."");
            
$tid $db->fetch_field($tmp"tid");
            
$fid $db->fetch_field($tmp"fid");
            if (
$forenid != $fid) {
                require_once 
MYBB_ROOT."inc/class_moderation.php";
                
$moderation = new Moderation;
                
$moderation->move_threads($tid$fid);
            }    
            
//Optionen speichern in "autt"
            
$temp = array(
                
"tid"            => $tid,
                
"fid"            => $forenid,
                
"ticket"        => $mybb->input['ticketshow'],
            );
            
$db->update_query("autt"$temp"eid=".$event['eid']."");
            
redirect("showthread.php?tid="$tid);
        }
    }

Ich habe jetzt schon bei einigen Plugins hier gesehen, das diese als MyBB 1.6 Kompatibel beziffert werden.
Wie genau ist da smöglich, obwohl 1.6 nichtmal draußen ist? würde gerne AUtT auch für 1.6 anpassen, wenn das irgendwie möglich ist.
gibt es irgendwo eine beschreibung was man bei 1.6 Plugins beachten muss?
Seiten: 1 2