Seite 4 von 5

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 11:56
von Shorty1968
Hallo Miriam,
Ich habe mir den Snippet eben mal eingebaut und leider geht er nicht so wie er soll,ich konnte als Admin ohne ein posting zu erstellen eine Abstimmung machen und als ich mich dann mit anderen TestUser angemeldet habe,war es so das diese die Umfrage so angezeigt bekommen haben,als hätten sie schon abgestimmt.
Ich möchte es hier noch mal ansprechen,weil es mal wider so aussieht als hätte ich das Problem alleine,das Post hier bezieht sich nur auf diesen Code:
Miriam hat geschrieben: finde in der viewtopic.php

Code: Alles auswählen

    // Can not vote at all if no vote permission
    $s_can_vote = ($auth->acl_get('f_vote', $forum_id) &&
        (($topic_data['poll_length'] != 0 && $topic_data['poll_start'] + $topic_data['poll_length'] > time()) || $topic_data['poll_length'] == 0) &&
        $topic_data['topic_status'] != ITEM_LOCKED &&
        $topic_data['forum_status'] != ITEM_LOCKED &&
        (!sizeof($cur_voted_id) ||
        ($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']))) ? true : false;
tausche aus gegen:

Code: Alles auswählen

    //did user vote yet?
    if ($user->data['is_registered'])
    {
        $sql = 'SELECT count(post_id) AS posted
            FROM ' . POSTS_TABLE . '
            WHERE topic_id = ' . $topic_id . '
                AND poster_id = ' . $user->data['user_id'] . '
                AND post_approved = 1';
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        $s_did_post = (bool) $row['posted'];
        $db->sql_freeresult($result);
    }
    // Can not vote at all if no vote permission
    $s_can_vote = ($auth->acl_get('f_vote', $forum_id) &&
        (($topic_data['poll_length'] != 0 && $topic_data['poll_start'] + $topic_data['poll_length'] > time()) || $topic_data['poll_length'] == 0) &&
        $topic_data['topic_status'] != ITEM_LOCKED &&
        $topic_data['forum_status'] != ITEM_LOCKED &&
        $s_did_post &&
        (!sizeof($cur_voted_id) ||
        ($auth->acl_get('f_votechg', $forum_id) && $topic_data['poll_vote_change']))) ? true : false;

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 14:32
von Miriam
Danke für den Hinweis, Shorty.

Alles nochmal auf Null.

Die Umsetzung sieht dann folgendermaßen aus:
Finde in der viewtopic.php

Code: Alles auswählen

    // Can not vote at all if no vote permission    
davor setze ein:

Code: Alles auswählen

    // did user vote yet?
    if ($user->data['is_registered'])
    {
        $sql = 'SELECT count(post_id) AS posted
            FROM ' . POSTS_TABLE . '
            WHERE topic_id = ' . $topic_id . '
                AND poster_id = ' . $user->data['user_id'] . '
                AND post_approved = 1';
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        $s_did_post = (bool) $row['posted'];
        $db->sql_freeresult($result);
    }
finde:

Code: Alles auswählen

        'S_DISPLAY_RESULTS'    => $s_display_results,
danach füge ein:

Code: Alles auswählen

        'S_DID_POST'        => $s_did_post,
In allen language/<sprache>/viewtiopic.php finde

Code: Alles auswählen

    'POLL_ENDED_AT'            => 'Umfrage endete am %s',
danach füge ein:

Code: Alles auswählen

    'POLL_INFO'                => 'Beitragserstellung in diesem Thema berechtigt zur Abstimmung',
In allen styles/<deine_styles>/template/viewtopic_body.html finde:

Code: Alles auswählen

            <!-- IF S_CAN_VOTE -->
                <dl style="border-top: none;">
                    <dt>&nbsp;</dt>
                    <dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
                </dl>
            <!-- ENDIF -->
tausche aus gegen:

Code: Alles auswählen

            <!-- IF S_CAN_VOTE -->
                <dl style="border-top: none;">
                    <dt>&nbsp;</dt>
                    <!-- IF not S_DID_POST -->
                    <dd class="resultbar"><a href="{U_POST_REPLY_TOPIC}" class="button1" />{L_POLL_INFO}</a></dd>
                    <!-- ELSE -->
                    <dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
                    <!-- ENDIF -->
                </dl>
            <!-- ENDIF -->
Leere den Cache und beachte auch: KB:tippstyles sowie KB:utf8bom.

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 17:20
von Shorty1968
Danke Miriam nun scheint es zu Funktionieren,dann gebe ich auch noch eine Erweiterung zum besten. :wink:

*EDIT*
Musste meine Portal erweiterung zurück ziehen,den im Portal wurde nur der Info Text angezeigt und nicht der Abstimmungs Button,obwohl ein Beitrag durch den themen Start erstellt wurde und ich weiss noch nicht woran es liegt.

*EDIT2*
Ich bekomme es nicht in der Portal Box,kann mir dabei bitte jemand helfen.

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 20:13
von Miriam
Du solltest auch dazu sagen, dass es sich um die Board3portal Mod handelt.

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 20:25
von Shorty1968
Ja sorry hast recht,aber leider bekomme ich es nicht hin.

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 20:58
von Miriam
Wo klemmt's denn, Shorty?

Pack mal auf den Tisch, was Du schon hast.

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 21:52
von Shorty1968
OPTIONAL Board3 Portal Version 2.0.0b1,2.0.0 und 2.0.1

Öffne styles/prosilver/template/portal/modules/poll_center.html suche:

Code: Alles auswählen

<!-- IF poll.S_CAN_VOTE -->
						<dl style="border-top: none;">
							<dt>&nbsp;</dt>
							<dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
						</dl>
					<!-- ENDIF -->
Ersetze es mit:

Code: Alles auswählen

<!-- IF poll.S_CAN_VOTE -->
                    <dl style="border-top: none;">
                    <dt>&nbsp;</dt>
                    <!-- IF not S_DID_POST -->
                    <dd class="resultbar"><a href="{U_POST_REPLY_TOPIC}" class="button1" />{L_POLL_INFO_PORTAL}</a></dd>
                    <!-- ELSE -->
                    <dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
                    <!-- ENDIF -->
                    </dl>
                    <!-- ENDIF -->
Öffne portal/modules/portal_poll.php und suche:

Code: Alles auswählen

$s_can_vote = (((!sizeof($cur_voted_id) && $auth->acl_get('f_vote', $forum_id)) ||
                            ($auth->acl_get('f_votechg', $forum_id) && $data['poll_vote_change'])) &&
                            (($data['poll_length'] != 0 && $data['poll_start'] + $data['poll_length'] > time()) || $data['poll_length'] == 0) &&
                            $data['topic_status'] != ITEM_LOCKED &&
                            $data['forum_status'] != ITEM_LOCKED) ? true : false; 
Füge darüber ein:

Code: Alles auswählen

// did user vote yet?
    if ($user->data['is_registered'])
    {
        $sql = 'SELECT count(post_id) AS posted
            FROM ' . POSTS_TABLE . '
            WHERE topic_id = ' . $topic_id . '
                AND poster_id = ' . $user->data['user_id'] . '
                AND post_approved = 1';
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        $s_did_post = (bool) $row['posted'];
        $db->sql_freeresult($result);
    } 
In allen language/<sprache>/viewtiopic.php finde:

Code: Alles auswählen

'POLL_INFO'                => 'Beitragserstellung in diesem Thema berechtigt zur Abstimmung', 
Füge darunter ein:

Code: Alles auswählen

'POLL_INFO_PORTAL'      => 'Beitrag in diesem Thema berechtigt zur Abstimmung', 
Und klemmen denke ich tut es hier an diesem Code:

Code: Alles auswählen

// did user vote yet?
    if ($user->data['is_registered'])
    {
        $sql = 'SELECT count(post_id) AS posted
            FROM ' . POSTS_TABLE . '
            WHERE topic_id = ' . $topic_id . '
                AND poster_id = ' . $user->data['user_id'] . '
                AND post_approved = 1';
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        $s_did_post = (bool) $row['posted'];
        $db->sql_freeresult($result);
    } 
Es ist endweder an der Falschen stelle oder Passt nicht?

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 22:00
von Miriam
Hast Du vergessen, die Template Variable S_DID_POST zu definieren? Jedenfalls verwendest Du sie; sie ist aber nirgends in irgendeiner Weise mit einem Wert belegt worden.

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 22:03
von Shorty1968
Jetzt wo du es sagst,nein habe ich nicht versuche es gleich mal melde mich dann wider danke.

*EDIT*
Ich habe die Variable nun Definiert aber es ist immer noch so das der Info Text zu sehen ist und nicht der Abstimmungs Button.

Variable wurde wie Folgt definiert:
Öffne portal/modules/portal_poll.php finde:

Code: Alles auswählen

'S_POLL_ACTION'            => $portalvote_url, 
Füge darunter ein:

Code: Alles auswählen

'S_DID_POST'            => $s_did_post, 

Re: Bei neuer Abstimmung in einer Umfrage Thread als ungeles

Verfasst: 15.12.2012 22:50
von Miriam
Ich möchte Dein Augenmerk auf ein Detail lenken, das Dir evtl. entgangen ist:
<!-- IF poll.S_CAN_VOTE -->

Also wird S_CAN_VOTE in einer "Template-Schleife" aufgerufen / verarbeitet (diese heißt hier poll). Das sollte dann also auch mit S_DID_POST passieren.

Zum Bsp. so:
Finde in /portal/modules/portal_poll.php

Code: Alles auswählen

                    $template->assign_block_vars('poll', array(
                        'S_POLL_HAS_OPTIONS'    => $poll_has_options,
                        'POLL_QUESTION'            => $data['poll_title'],
                        'U_POLL_TOPIC'            => append_sid($phpbb_root_path . 'viewtopic.' . $phpEx . '?t=' . $topic_id . '&f=' . $forum_id),
                        'POLL_LENGTH'            => $data['poll_length'],
                        'TOPIC_ID'                => $topic_id,
                        'TOTAL_VOTES'            => $poll_total_votes,
                        'L_MAX_VOTES'            => ($data['poll_max_options'] == 1) ? $user->lang['MAX_OPTION_SELECT'] : sprintf($user->lang['MAX_OPTIONS_SELECT'], $data['poll_max_options']),
                        'L_POLL_LENGTH'            => ($data['poll_length']) ? sprintf($user->lang[($poll_end > time()) ? 'POLL_RUN_TILL' : 'POLL_ENDED_AT'], $user->format_date($poll_end)) : '',
                        'S_CAN_VOTE'            => $s_can_vote,
davor füge ein:

Code: Alles auswählen

                    // did user vote yet?
                    if ($user->data['is_registered'])
                    {
                        $sql = 'SELECT count(post_id) AS posted
                            FROM ' . POSTS_TABLE . '
                            WHERE topic_id = ' . $topic_id . '
                                AND poster_id = ' . $user->data['user_id'] . '
                                AND post_approved = 1';
                        $result = $db->sql_query($sql);
                        $row = $db->sql_fetchrow($result);
                        $s_did_post = (bool) $row['posted'];
                        $db->sql_freeresult($result);
                    }
danach füge ein:

Code: Alles auswählen

                        'S_DID_POST'            => $s_did_post,
                        'U_POST_REPLY_TOPIC'     => ($auth->acl_get('f_reply', $forum_id) || $user->data['user_id'] == ANONYMOUS) ? append_sid("{$phpbb_root_path}posting.$phpEx", "mode=reply&f=$forum_id&t=$topic_id") : '',
(Ich habe mich mal hier nicht an die alphabetische Anordung gehalten; das solltest Du aber tun.)

In der styles/<deine styles/template/portal/modules/poll_center.html finde:

Code: Alles auswählen

                    <!-- IF poll.S_CAN_VOTE -->
                        <dl style="border-top: none;">
                            <dt>&nbsp;</dt>
                            <dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
                        </dl>
                    <!-- ENDIF -->
tausche aus gegen:

Code: Alles auswählen

                    <!-- IF poll.S_CAN_VOTE -->
                        <dl style="border-top: none;">
                        <dt>&nbsp;</dt>
                        <!-- IF not poll.S_DID_POST -->
                        <dd class="resultbar"><a href="{poll.U_POST_REPLY_TOPIC}" class="button1" />{L_POLL_INFO}</a></dd>
                        <!-- ELSE -->
                        <dd class="resultbar"><input type="submit" name="update" value="{L_SUBMIT_VOTE}" class="button1" /></dd>
                        <!-- ENDIF -->
                        </dl>
                    <!-- ENDIF -->

Diese Vorgehensweise funktioniert nur für das "Mittelmodul" des Portals. Für das "Side-Modul" mußt Du es noch etwas weiter "aufbohren".

Cache leeren, Template auffrischen... Naja, weißt Du ja alles schon. 8)