Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
maximilian

Umfrage zu einem Zeitpunkt beenden

Recommended Posts

Hallo,

freu mich, auch bei euch dabei zu sein.

Zur Frage: Ist es möglich, eine Umfrage mit Zeitlimit zu starten.

Im Klartext: Ich starte eine Umfrage bzgl eines Mitgliedertreffens, Deathline ist heute um

16 Uhr.

Ist es möglich, dass man, ohne um 16 Uhr online zu sein, die Umfrage um 16 Uhr stoppen lässt, sie aber trotzdem noch im Thread bleibt, und man auch das Ergebnis ansehen kann?

Nur voten kann man halt nach 16 Uhr nimmer?

Ist das machbar?

Das mit dem Treffen ist keine Geschichte, das machen wir wirklich so. Weil es so schwer ist, es allen recht zu machen. Das letzte mal hat ein Member nach der Deathline abgestimmt, und es war Gleichstand... uiii, da war was beinander *rofl*.

Vielen Dank schon mal im Voraus, l

maximilian :)

Share this post


Link to post

Ich ändere verdammt ungerne was an dem Poll-System ...

Aber die Idee ist verdammt gut, deswegen probier ich sie mal ganz langsam, Schritt-für-Schritt umzusetzen !

Punkt 1:

Wir brauchen ein neues Datenbankfeld, welches angibt wann ein Poll denn ungültigt wird. Das nennen wir expires, geben ihm die Vorgabe das es einen 10 stelligen Zahlenwert beinhalten kann (Unix-Timestamp, die Zeit in Sekunden seit dem 1.1.1970, ziemlich genau :)). Also, ab in PHPMyAdmin, oder ins ACP, und folgenden Mysql-Befehl ausgeführt:

ALTER TABLE `ibf_polls` ADD `expires` INT( 10 ) DEFAULT '-1' AFTER `poll_question` ;

Punkt 2:

Nun gehen wir in die Skin, beim Poll erstellen, oder Poll editieren soll man nämlich den Wert eintragen können.

Unterpunkt 1:

skin_post.php (in allen Skin-Ordnern verändern !)

Suchen nach:

  <td class='pformright'><input type='text' size='40' maxlength='250' name='pollq' value='{$ibforums->input['pollq']}' class='textinput' /></td>

</tr>

und drunter kommt das:

<tr>

  <td class='pformleft'><strong>{$ibforums->lang['poll_expires']}</strong></td>

  <td class='pformright'>

    <select name='expire_days' class='forminput'>{$expire_days}</select>

  </td>

</tr>

Suchen nach:

function poll_box($data, $extra="")

Daraus machen wir das hier:

function poll_box($data, $expire_days, $extra="") {

Nun die nötige Lang-Datei anpassen:

lang_post.php (in allen nötigen Lang-Dateien verändern)

einfügen, entweder

$lang['poll_expires']          = "In wievielen Tagen läuft die Umfrage aus ?<br>-- für nie";

oder:

poll_expires                    =>  "In wievielen Tagen läuft die Umfrage aus ?<br>-- für nie",

Punkt 3:

Nun müssen wir noch sicher gehen, das in die Felder auch etwas eingefüllt wird:

Also ab in die post_poll.php

Suchen nach:

  $poll_box    = $class->html->poll_box($poll, $extra);

Ändern durch:

//  Poll-Expire MOD

        $expire_days  = "<option value='0'>--</option>";

       

        for ( $i = 1 ; $i < 32 ; $i++ )

        {

            $expire_days .= "<option value='$i'";

           

            $expire_days .= ">$i</option>";

        }

       

//  Ende Poll-Expire MOD

 

  $poll_box    = $class->html->poll_box( $poll, $expire_days, $extra);

Über dieses:

Punkt 4:

Um sicherzugehen das man das auch noch ändern kann, wenn man nachträglich einen Post in ein Theme einfügt, gehen wir jetzt in die post_poll_after.php.

Suchen nach:

  $poll_box    = $class->html->poll_box($poll, $extra);

Ändern durch:

//  Poll-Expire MOD

        $expire_days  = "<option value='0'>--</option>";

       

        for ( $i = 1 ; $i < 32 ; $i++ )

        {

            $expire_days .= "<option value='$i'";

           

            $expire_days .= ">$i</option>";

        }

       

//  Ende Poll-Expire MOD

 

  $poll_box    = $class->html->poll_box( $poll, $expire_days, $extra);

Punkt 5:

Nun sorgen wir dafür, das unsere Werte auch richtig in die Datenbank geschrieben werden. Datei post_poll.php:

Suchen

                                                        'poll_question' => $class->parser->bad_words($ibforums->input['pollq']),

drunter:

                                                        'expires'      => ($ibforums->input['expire_days'] > 0) ? strtotime("+".$ibforums->input['expire_days']." days") : -1,                                 

das gleiche in der post_poll_after.php !

Punkt 6:

Nun soll er noch anzeigen, wann ein Poll ausläuft, also ab in die Topics.php

Suchen nach:

        if (! $poll_data['pid']) {

        return;

        }

drunter:

//  Expire MOD Start

        if ($poll_data["expires"] != -1)

        {

            $expire_text = "<br>".$ibforums->lang['this_poll_expires'].$std->get_date( $

poll_data["

expires"

], 'SHORT' );           

        }

        else

        {

            $expire_text = "";   

        }

//  Expire MOD Ende

Suchen nach:

        $html .= $this->poll_html->ShowPoll_footer();

Ändern durch:

        $html .= $this->poll_html->ShowPoll_footer($expire_text);

Und nicht vergessen die Lang-Datei anzupassen, hier die lang_post.php

$lang['this_poll_expires']      = "Ende der Umfrage: ";

Nun die Skin skin_poll.php

Suchen nach:

function ShowPoll_footer() {

ändern durch:

function ShowPoll_footer($expire_text) {

Suchen nach:

<!--IBF.SHOW--></div>

ersetzen durch:

<!--IBF.SHOW-->$expire_text</div>

So, nun aber die letzte Phase.

Datei lang_error.php hinzufügen von:

poll_expired    => "Diese Umfrage ist schon abgelaufen, es können keine Stimmen mehr hinzugefügt werden !",

(Auf richtiges Format achten !)

Nun die Datei add_poll.php:

Suchen nach:

        $DB->query("SELECT f.allow_pollbump, t.*, p.pid as poll_id,p.choices,p.starter_id,p.votes from ibf_polls p, ibf_topics t, ibf_forums f WHERE t.tid='".$ibforums->input['t']."' and p.tid=t.tid and t.forum_id=f.id");

ändern durch:

        $DB->query("SELECT f.allow_pollbump, t.*, p.pid as poll_id,p.choices,p.starter_id,p.votes,p.expires from ibf_polls p, ibf_topics t, ibf_forums f WHERE t.tid='".$ibforums->input['t']."' and p.tid=t.tid and t.forum_id=f.id");

Suchen nach:

    if ($this->topic['state'] != 'open')

    {

      $std->Error( array( LEVEL => 1, MSG => 'locked_topic') );

    }

drunter bitte:

        if ($this->topic['expires'] != -1 AND time() > $this->topic['expires'])

        {

            $std->Error( array( LEVEL => 1, MSG => 'poll_expired') );

        } 

So, nun sollte alles gehen, sorry ich hab das hier ein bisschen mit der heißen Nadel gestrickt, und wurde oft abgelenkt, aber ich hoffe es passt, wenn nicht dann kriegen wir das hier schon wieder hin, bis jeder Fehler ausgemerzt ist !

BLACK

Edited by Blackman

Share this post


Link to post

Ach ja, noch ein Mini-Update, einfach weil ich der Funktion strtotime von php nicht so unbedingt vertraue ...

In der post_poll.php mal nach

  // Add the poll to the forum_polls table

  // if we are moderating this post

  //-------------------------------------------------

suchen, und drunter das hier einfügen:

$ibforums->input['expire_days'] = intval($ibforums->input['expire_days']);

Damit gehen wir sicher das die Tage die eingegeben werden, auch sicher nur Zahlen sind, und nicht irgendwelche Befehle die unser Programm verwirren würden !

BLACK

Share this post


Link to post

Hab den Mod eingebaut... nur sehen tue ich jetzt von ihm leider nix...

Wenn ich aber eine neue Umfrage aufmache bleibt alles normal nur das jetzt rechts von dem Feld wo man die Antwortein einfügt "12345678910111213141516171819202122232425262728293031" das eingefügt wird.

Unten ein Screenshot davon

Share this post


Link to post

Nee, wenn der zweite 100 pro nicht genutzt wird, nicht ...

Eigentlich scheint die Skin einwandfrei zu passen, schick mir mal bitte per PM nen Probeaccount, dann schau ich's mir online an ...

Ach ja, das da die Zahlen stehen, ist schon richtig so, nur eigentlich sollten sie im Select-Feld stehen, ist das hier

//  Poll-Expire MOD

        $expire_days  = "<option value='0'>--</option>";

     

        for ( $i = 1 ; $i < 32 ; $i++ )

        {

            $expire_days .= "<option value='$i'";

         

            $expire_days .= ">$i</option>";

        }

     

//  Ende Poll-Expire MOD

  $poll_box    = $class->html->poll_box( $poll, $expire_days, $extra);

in der post_poll.php auch richtig ?

BLACK

Share this post


Link to post

Aah, also ich hab deine skin, und dein php datei genommen, und es geht ...

Haben wir vielleicht nen Skin-Resync vergessen ?

Bist du sicher das du alles so, wie du's hier hochgeladen hast, eingebaut und gesynct hast ?

PS: Rechte brauch ich nur welche um nen Poll zu erstellen, wo ist mir wurst :)

BLACK

Share this post


Link to post

An das Skin resinze.. hab ich auch schon gedacht.. aber kann ja eigentlich nicht sein da der Safemode vom hoster abgeschaltet wurde...

er war zwar beim installieren des boardes an ist aber jetzt aus...

pm ist raus..

ich vermute fast das ich irgendwas verplant habe... ich hab nur kein plan was...

Edited by Chaote

Share this post


Link to post

Sicherheitshalber mal doch syncen ...

Die Skin die du mir gegeben hast, hat u.a. die Auswahlmöglichkeit für "offenen Poll" und für "expire Poll" ... aber keines davon ist in der Skin von deinem Forum drin !

Guckst du:

Dein Forum:

<tr>

  <td colspan="2" class="pformstrip">Umfrage Einstellungen</td>

</tr>

<tr>

  <td class="pformleft"><strong>Frage</strong></td>

  <td class="pformright"><input size="40" maxlength="250" name="pollq" value="" class="textinput" type="text"></td>

</tr>

<tr>

  <td class="pformleft"><b>Wahl der Antworten</b><br>Bitte jeweils nur eine Antwort pro Zeile angeben. [ Maximal 10 Antworten ]<br><br>--12345678910111213141516171819202122232425262728293031</td>

  <td class="pformright"><textarea cols="60" rows="12" name="PollAnswers" class="textinput"></textarea><!--TEMPLATE: skin_post, Template Part: poll_options-->

<br><input size="40" value="1" name="allow_disc" class="forminput" type="checkbox">&nbsp;<b>Nur Umfrage erstellen</b><br>(Keine Antworten möglich)

</td>

</tr>

und so sollte es aussehen:

<tr>

  <td colspan="2" class='pformstrip'>{$ibforums->lang['tt_poll_settings']}</td>

</tr>

<tr>

  <td class='pformleft'><strong>{$ibforums->lang['poll_question']}</strong></td>

  <td class='pformright'><input type='text' size='40' maxlength='250' name='pollq' value='{$ibforums->input['pollq']}' class='textinput' /></td>

</tr>

<tr>

  <td class='pformleft'><strong>{$ibforums->lang['poll_expires']}</strong></td>

  <td class='pformright'>

    <select name='expire_days' class='forminput'>{$expire_days}</select>

  </td>

</tr>

<!-- Start Mod Public Poll -->

<tr>

<td class='pformleft'><strong>{$ibforums->lang['options']}</strong></td>

<td class='pformright'><input type='checkbox' size='40' value='1' name='open_poll' class='forminput' /> <b>{$ibforums->lang[mod_public_poll]}</b><br/>{$ibforums->lang[mod_public_poll_info]}

</tr>

<!-- End Mod Public Poll -->

<tr>

  <td class='pformleft'>{$ibforums->lang['poll_choices']}<br /><br />$extra</td>

  <td class='pformright'><textarea cols='60' rows='12' name='PollAnswers' class='textinput'>$data</textarea><!--IBF.POLL_OPTIONS--></td>

</tr>

nicht gleich :)))

Share this post


Link to post

jep den offenen pol wollte ich noch einbauen... das kommt als nächstes...

hatte da schon mal angefangen...

Halt... Kommando zurück...

ich hab gerecynt (<-- oder wie immer das auch heißt)

Nun hauts einwandfrei hin...

Blackman du bist nen Genie... vielen Dank dir...

Edited by Chaote

Share this post


Link to post

Danke, aber ein genie bin ich leider noch nicht, sonst wäre ich nicht arbeitslos :)

Trotzdem Danke, helfe doch gerne !

PS: Den Account kannste löschen, oder pw ändern, ich brauch ihn logischerweise nich mehr :)

BLACK

Share this post


Link to post

Sowas versteh ich nicht... ends der checker und no work...

Nochne Frage zum Tool.. wärs möglich das du das noch so ergänzt das man nicht nur die anzahl Tage sondern auch die Uhrzeit auswählen kann?

Sprich die Umfrage starte ich am 12. Januar um 14 Uhr und sie Soll dann genau am 15. Januar um 19 Uhr ablaufen... geht das?

---

Fehlermeldung entdeckt:

Diese kommt wenn ich ne schon bestehende Umfrage anschaue:

Warning: Missing argument 1 for showpoll_footer() in /srv/www/htdocs/web291/html/forum/sources/functions.php(644) : eval()'d code on line 211
Edited by Chaote

Share this post


Link to post

Erstmal zur Fehlermeldung ...

Da wird eine Skin-Funktion aufgerufen, und es wird ein Argument nicht übergeben...

Fehler sollte in der Topics.php liegen, nicht in der functions.php wie php hier angibt.

Überprüfe ob in der Topics.php erstmal das hier drin steht:

//  Expire MOD Start

        if ($poll_data["expires"] != -1)

        {

            $expire_text = "<br>".$ibforums->lang['this_poll_expires'].$std->get_date( $poll_data["expires"], 'SHORT' );;           

        }

        else

        {

            $expire_text = "";   

        }

//  Expire MOD Ende

und zwar hier drunter:

        if (! $poll_data['pid']) {

        return;

        }

und ob das hier:

        $html .= $this->poll_html->ShowPoll_footer($expire_text);

hier drunter steht:

          $html  .= $this->poll_html->Render_row_form($votes, $id, $choice);

        }

       

        }

Hmmm, zur Frage ob man ne Uhrzeit angeben kann, im Notfall gehts natürlich immer, indem du als Admin den Wert auf Sekunde genau in der Datenbank einträgst ...

Das einzige was ich mir vorstellen kann, wäre das man statt Tagen in denen der Post endet, einfach stunden in denen der Post endet eingibt, das wäre in 2 minuten umgeändert.

da müsste man einfach in der strtotime-function statt "days", "hours" schreiben, dann nimmt er die anzahl die man einträgt als stunden ... oder man gibt "seconds" ein, das wäre natürlich noch genauer.

Nicht zu vergessen in der lang-datei das reinzuschreiben :P

Ich hab mich dagegen entschieden einen genauen Zeitpuntk angeben zu können, denn wie sieht das aus, gib bitte die Endzeit ein:

TAG MONAT JAHR STUNDE MINUTE SEKUNDE ...

Und die Penislänge gleich dazu ...

Ich wollte möglichst nur ein einfaches Eingabefeld haben, um die nicht so erfahrenen User nicht unnötig zu verwirren, am Ende kommen wir noch beim PhpBB an :)

BLACK

Share this post


Link to post

noch gehts... wieder

Fände ich halt praktisch wenn man beim erstellen der Umfrage auswählen könnte wann se genau enden soll...

aber so gehts auch ;)

nochmal danke dir

Edited by Chaote

Share this post


Link to post

Da scheint der Fehler nicht zu sein ...

Meine Fresse, das ärgert mich aber, aber ich schätze ich brauch die Topics.php auch noch, und wenns geht das lang-file dazu lang_post.php auch noch, ich weiß, ich fordere heute viel :P

BLACK

Share this post


Link to post

Auf eins wäre ich mal gekommen

            $expire_text = "<br>".$ibforums->lang['this_poll_expires'].$std->get_date( $poll_data["expires"], 'SHORT' );;           

hier ist ein

;

zuviel !

Share this post


Link to post

Der Mod haut einwandfrei hin...

wenn es dir mal gaaaaannnnnnnzzzzzz langweilig sein sollte könntest ja nen proggi machen wo man dann genau die Start- und die Endzeit auswählen kann.

Aber bis dahin bin ch jetzt mal glücklich....

Thx dir... :)

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×