Abstimmung wordpress
siehe auch DEKRA Direkt Blog Der Blog DEKRA Direkt wird als interner Konzernblog verwendet und soll als Kontaktmittel der Mitarbeiter zur Vorstandsebene dienen. Dazu gibt es unter anderem die DEKRA Direkt Mitarbeiter Umfrage.
Quickstart
Ablauf 2017
- Poll anlegen (alten kopieren)
- Blocking by Cookie
- Testbeitrag anlegen
- Kategorie Test
- Später Kategorie ändern
Todo
- Backendanzeige der Votes ist Buggy
- Besser zum Testen wäre es wenn die Umfrage zunächst in eine Kategorie Test geht die auf der Startseite nicht dargestellt wird. - OK ist über Plugin realisiert.
Wordpress Extension Yop Poll - verwendet bei Mascha im Blog intern:
yop poll Anpassungen
yop poll Tabellen
------------ ----------------- --------------
yop_polls yop_poll_answers yop_poll_logs
------------ ----------------- --------------
id --------------| id --------------| id
name |-poll_id | pn
question answer | poll_id
total_votes votes | vote_id
total_answers ... |- answer_id
... --------------
------------ -----------------
---------------------- ----------------------------
yop_poll_custom_fields yop_poll_votes_custom_fields
---------------------- ----------------------------
id id
poll_id poll_id
custom_field vote_id
... custom_field_id
---------------------- user_id
custom_field_value
----------------------------
Da bei einem custom text field bei der fragesstellung nur einzeiliger text möglich war, musst die datei
/wp-content/plugins/yop-poll/inc/yop_poll_model.php
In der datenbank die Tabelle:
kas_wp_yop_poll_votes_custom_fields
Feld: custom_field_value
von varchar (255) auf Text geändert.
SQL-Abfragen für Antworten mit Kommentar
SQL nur Ergebnisse
SELECT `id` , `poll_id` , `answer_id` , `ip` , `http_referer` , `vote_date` , `pn` FROM `kas_wp_yop_poll_logs` WHERE `poll_id` =38 ORDER BY `answer_id` ASC LIMIT 0 , 500
SQL Abfrage mit Kommentaren
Alte Abfrage
SELECT * FROM `kas_wp_yop_poll_logs` LEFT OUTER JOIN `kas_wp_yop_poll_votes_custom_fields` ON `kas_wp_yop_poll_logs`.`vote_id` = `kas_wp_yop_poll_votes_custom_fields`.`vote_id` WHERE `kas_wp_yop_poll_logs`.`poll_id` =13
Weitere Abfragen
Welche Custom Fields gehören zu welchen Umfrage (Pivot Version)
Dynamische Version (funktioniert noch nicht aber die Richtung dürfte stimmen)
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when custom_field = ''',
custom_field,
''' then custom_field end) AS ',
custom_field
)
) INTO @sql
FROM kas_wp_yop_poll_custom_fields;
SET @sql = CONCAT('SELECT poll_id, ', @sql, '
FROM kas_wp_yop_poll_custom_fields
GROUP BY poll_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Neue Umfrage für DEKRA Connect durchführen
Allgemein
Läuft 2 Wochen ab ca. Mitte des Monats. Danach Auswertung und Grafikerstellung.
Updates
2015-10 - Umfrage nur mit Cookie check -> Mascha möchte keine Userunterbrechung. Später werden die Ergebnisse manuell gereinigt
Infos zum Cookie Check
Wenn man mit Cookies kontrolliert, wie wir das im Moment machen, dann testet das Plugin immer ob für eine bestimmte Umfrage schon abgestimmt wurde. Egal ob die Umfrage neu gestartet wurde.
Technisch wird dazu ein Cookie mit der ID der Umfrage hinterlegt. Dieses hat eine Gültigkeitsdauer (kann man einstellen z.B. 14 Tage). Solange das Cookie gültig ist kann man dann nicht mehr abstimmen.
Das bedeutet alle Browser die noch nicht abgestimmt haben können auch abstimmen !
Wenn du nochmal testen willst mußt du die Cookies löschen oder 14 Tage warten.
Nochmal zur Info Vor und Nachteile der anderen Lösungen
- Kontrolle über IP: Vorteil recht zuverlässig schwer zu umgehen. Nachteil: wenn Benutzer mit der gleichen IP ankommen kann es sein dass einer nicht abstimmen kann.
- Über die Personalnummer Vorteil: Sehr Zuverlässig. Nachteil: Schlechte User Experience
Technischer Ablauf
Stand 2017
- Block by Cookie
Stand März 2015 (obsolete)
- Das Umfrage Plugin im WP ist auf block by Personal Number gestellt. -> Ab 2016 nur noch by Cookie(siehe oben)
- obsolete -> Ein User kann nur Voten wenn eine id=12345 (Personalnummer) angehängt ist. Ansonsten wird zunächst auf das DEKRA Intranet weiter geleitet (über alert).
- Dort wird die Personalnummer als id=12345 an den Link angehängt und auf intern-blog.dekra.de/category/dekra-direkt/?id=12345 geleitet Nur wenn eine solche id vorhanden ist kann gevoted werden. Ist nicht supersicher weil die Nummer willkürlich geändert werden kann, nachträgliche Prüfung wäre mit Personalnummern Liste möglich. Verbesserungspotential wäre POST übermittlung, Gültigkeitsprüfung durch PN-Index oder Formel.
- Hat die id schon gevotet wird nur das Ergebnis angezeigt.
- Im DEKRA Intranet werden Links an die eine id angehängt werden soll mit dem Parameter ?id=public Veröffentlicht. public wird dann automatisch durch die Personalnummer des Mitarbeiters ersetzt, bevor weitergeleitet wird.
Umfrage erstellen
- Achtung manchmal kollidiert die Abfrage mit alten Cookies der letzten Umfrage. Genau ist das noch nicht geklärt. Hilfe bringt:
- dafür sorgen, daß die alte Umfrage nicht mit angezeigt wird
- Logs löschen
- Wenn nichts hilft die Stats Reseten (kann sein daß dies nicht nötig ist.)
- 1 oder mehrere (Mascha will meist 3) Umfragen-Dummies erstellen (z.B. eine alte klonen - Vorsicht: Einstellungen für Datum, Template und Blocking werden nicht übernommen)
- Template: DEKRA Umfrage mit Kommentar
- Mit dem Template DEKRA Umfrage mit dynamischem Kommentar kann man zusätzlich noch JavaScript Popups öffnen und auf die gewählte Antwort reagieren (siehe JS im Template)
- Das Template Umfrage mit mehr Antworten erlaubt mehr als zwei Antwortmöglichkeiten. Die Kommentare werden dann untereinander dargestellt. Das ist zugleich auch das sicherste Template, was die Darstellung angeht.
- Blocking by auf Personal Number - dadurch wird die Abfrage des id Parameters gestartet. Zum Testen auf don't Block stellen. Achtung IE hat manchmal Caching Probleme.
- Start und Enddatum setzen
- Abstimmung in einen Beitrag in Kategorie Dekra Direkt einpflegen (evtl. erst nach dem Testen) -> Startseite sichtbar
- Am Ende Umfrage auf nur Antwort !
- Geo-bit erstellt die Fragen, diese werden von Mascha angepasst und von Ihr in einem Beitrag veröffentlicht.
- Start der Umfrage durch setzen der Kategorie (todo ob das klappt)
Test der Umfrage
- Vorige Tests sind sinnvoll. Ein Test von Geo-bit (einfach id anhängen). Ein Test von Dekra
Ende der Umfrage und Auswertung
Für die Auswertung benötigt Mascha eine Excel-Tabelle in der nach Antworten und sortiert ist. Ebenso die dazugehörigen Kommentare. Doppelte IPs rausschmeißen. Wenn Personalnummerliste vorhanden könnte man hier nach Gültigkeit prüfen.
- Umfrage mit Datum beenden oder auf Maschas Hinweis, Umfrage auf don't block, damit die Umleitung auf Dekra nicht mehr aktiv ist, außerdem Enddatum setzen und auf Ergebnis anzeigen nach Enddatum. Endzeit etwas zurücksetzen, da manchmal die Serverzeit um ein paar Stunden differiert.
- SQL Abfrage (siehe Statement), Export als ods oder csv
- Doppelte überprüfen
- Umwandeln in Excel
- Schaubild aus Numbers
Löschen unerwünschter Kommentare
In
Admin -> Yop poll -> All polls -> meineUmfrage -> votes
hier auswählen und löschen
Problem: die Kommentare werden nicht mehr angezeigt. TODO
Anpassungen am Plugin Yop poll
yop-poll => inc => admin.php
Hier die DB mit prefix versehen. "kas_"
yop-poll => inc => yop_poll_model.php yop-poll => inc => db_schema.php yop-poll => js => yop_poll_public.js
Kommentare
MUSS überarbeitet werden
yop_poll_modell.php
return_poll_html ->
dort wird der Template Block
[ANSWER_RESULT_CONTAINER] [/ANSWER_RESULT_CONTAINER]
mit pregreplace über eine Callback Funktion ersetzt
answer_result_callback(m$)
darin wiederum wird
get_poll_comments($poll_id)
aufgerufen, dieses gibt ein array zurück das dann in HTML umgesetzt wird. Diese Ausgabe erfolbt über die Abfrage von
$this->is_view_poll_results()
Das bedeutet die Ausgabe erfolgt wenn im Backend die Bedingung für die Ausgabe der Results gesetzt ist (z.B. Results after End Date) Gute erweiterung wäre ein eigener Block für die Comments
Im Template muß der Block natürlich auch gesetzt sein. (beim entsprechenden Template)
Problem: Die Ausgabe erfolgt nur wenn die Logs der Umfrage nicht gelöscht sind. Ausgabe der Kommentare bisher
SELECT yp.id,yp.name,yp.question,ypa.answer,ypvcf.custom_field_value,ypcf.custom_field,ypl.vote_id FROM kas_wp_yop_polls yp
JOIN kas_wp_yop_poll_custom_fields ypcf ON (yp.id=ypcf.poll_id)
JOIN kas_wp_yop_poll_votes_custom_fields ypvcf ON (ypcf.id = ypvcf.custom_field_id)
JOIN kas_wp_yop_poll_logs ypl ON (ypvcf.vote_id = ypl.vote_id)
JOIN kas_wp_yop_poll_answers ypa ON (ypl.answer_id = ypa.id)
WHERE yp.id=[pollID] AND ypl.answer_id=[answerID];
Die Abfrage wird für jede Antwort (answer_id) ausgeführt. Aus den Logs wird die answer_id geholt. Wenn diese im Log fehlt wird nichts zurückgegeben. Wie kann man die Zuordnung Kommentar - answer_id noch herstellen? answer_id und vote_id stehen auch in yop_poll_voters, vote_id steht auch in yop_poll_votes_custom_fields Also statt mit wp_yop_poll_logs joint man mit yop_poll_voters.
Beispiel
SELECT yp.id, yp.name, yp.question, ypa.answer, ypvcf.custom_field_value, ypcf.custom_field, ypv.vote_id
FROM kas_wp_yop_polls yp
JOIN kas_wp_yop_poll_custom_fields ypcf ON ( yp.id = ypcf.poll_id )
JOIN kas_wp_yop_poll_votes_custom_fields ypvcf ON ( ypcf.id = ypvcf.custom_field_id )
JOIN kas_wp_yop_poll_voters ypv ON ( ypvcf.vote_id = ypv.vote_id )
JOIN kas_wp_yop_poll_answers ypa ON ( ypv.answer_id = ypa.id )
WHERE yp.id =50
AND ypv.answer_id =113
Yop Poll Templates
Todo - Anpassen um ungenutzte Features zu nutzen (z.B. after End Date schöne Anzeige der Ergebnisse)
DEKRA Umfrage mit Kommentar
Vor Umfrage:
<div id="yop-poll-name-%POLL-ID%" class="yop-poll-name">%POLL-NAME%</div>
<div id="yop-poll-question-%POLL-ID%" class="yop-poll-question" style="display:table-cell;height:130px;vertical-align:middle;">%POLL-QUESTION%</div>
<div id="yop-poll-answers-%POLL-ID%" class="yop-poll-answers">
<ul>
[ANSWER_CONTAINER]
<li class="yop-poll-li-answer-%POLL-ID%">
%POLL-ANSWER-CHECK-INPUT%
%POLL-ANSWER-LABEL%
<span class="yop-poll-results-text-%POLL-ID%">%POLL-ANSWER-RESULT-LABEL%</span>
%POLL-ANSWER-RESULT-BAR%
</li>
[/ANSWER_CONTAINER]
[OTHER_ANSWER_CONTAINER]
<li class="yop-poll-li-answer-%POLL-ID%">
%POLL-OTHER-ANSWER-CHECK-INPUT%
%POLL-OTHER-ANSWER-LABEL%
<span class="yop-poll-results-text-%POLL-ID%">%POLL-ANSWER-RESULT-LABEL%</span>
%POLL-OTHER-ANSWER-TEXT-INPUT%
%POLL-ANSWER-RESULT-BAR%
</li>
[/OTHER_ANSWER_CONTAINER]
</ul>
</div>
<div id="yop-poll-custom-%POLL-ID%">
<ul>
[CUSTOM_FIELD_CONTAINER]
<li>%POLL-CUSTOM-FIELD-LABEL% %POLL-CUSTOM-FIELD-TEXT-INPUT%</li>
[/CUSTOM_FIELD_CONTAINER]
</ul>
</div>
[CAPTCHA_CONTAINER]
<div id="yop-poll-captcha-%POLL-ID%">
<div class="yop-poll-captcha-image-div" id="yop-poll-captcha-image-div-%POLL-ID%">
%CAPTCHA-IMAGE%
<div class="yop-poll-captcha-helpers-div" id="yop-poll-captcha-helpers-div-%POLL-ID%">%RELOAD-CAPTCHA-IMAGE% </div>
<div class="yop_poll_clear"></div>
</div>
%CAPTCHA-LABEL%
<div class="yop-poll-captcha-input-div" id="yop-poll-captcha-input-div-%POLL-ID%">%CAPTCHA-INPUT%</div>
</div>
[/CAPTCHA_CONTAINER]
<div id="yop-poll-vote-%POLL-ID%" class="yop-poll-footer">
<div>%POLL-VOTE-BUTTON%</div>
<div id="yop-poll-results-%POLL-ID%">%POLL-VIEW-RESULT-LINK%</div>
<div>%POLL-TOTAL-ANSWERS%</div>
<div>%POLL-TOTAL-VOTES%</div>
</div>
Nach Umfrage
<div id="yop-poll-name-%POLL-ID%" class="yop-poll-name">%POLL-NAME%</div>
<div id="yop-poll-question-%POLL-ID%" class="yop-poll-question" style="display:table-cell;height:130px;vertical-align:middle;">%POLL-QUESTION%</div>
<div id="yop-poll-answers-%POLL-ID%" class="yop-poll-answers">
</li><div id="gb_cust">VORLÄUFIGES·ERGEBNIS·DER·ABSTIMMUNG</div>
<ul>
[ANSWER_RESULT_CONTAINER]
<li class="yop-poll-li-result-%POLL-ID%">
<label class="pds-feedback-label-%POLL-ID%">
<span class="pds-answer-text-%POLL-ID%">%POLL-ANSWER-LABEL%</span>
<span class="pds-feedback-result-%POLL-ID%">
<span class="pds-feedback-per-%POLL-ID%"> %POLL-ANSWER-RESULT-LABEL%</span>
</span>
</label>
<div>
%POLL-ANSWER-RESULT-BAR%
</div>
[/ANSWER_RESULT_CONTAINER]
</ul>
</div>
<div id="yop-poll-vote-%POLL-ID%" class="yop-poll-footer">
<div>%POLL-TOTAL-ANSWERS%</div>
<div>%POLL-TOTAL-VOTES%</div>
<div id="yop-poll-back-%POLL-ID%">%POLL-BACK-TO-VOTE-LINK%</div>
</div>
Before Start Date
This poll is about to <br> start at %POLL-START-DATE%<br> and finish at %POLL-END-DATE%<br>
After End Date
<div id="yop-poll-name-%POLL-ID%" class="yop-poll-name">%POLL-NAME%</div> <div id="yop-poll-question-%POLL-ID%" class="yop-poll-question">%POLL-QUESTION%</div> <div id="yop-poll-answers-%POLL-ID%" class="yop-poll-answers"> </div> <div id="gb_end">Die Abstimmung ist beendet.</div> <ul class="afterVote"> [ANSWER_RESULT_CONTAINER] [/ANSWER_RESULT_CONTAINER] </ul>
CSS
#yop-poll-container-%POLL-ID% {
background-image: url("http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_poll_1.png");
/* border: 5px solid #3F8B43;*/
background-repeat:no-repeat;
color: #555555;
font-size: 12px;
overflow: hidden;
padding: 10px;
width: 632px;
/* height: 300px;*/
}
#yop-poll-name-%POLL-ID% {
font-size:14px;
font-weight:bold;
}
#yop-poll-question-%POLL-ID% {
color: #000000;
font-size: 14pt;
font-weight: 500;
height: 80px;
line-height: 26px;
margin: 0 50px 0 0;
padding-left: 215px;
padding-top: 40px;
text-align: center;
width: 300px;
margin-bottom: 100px;
}
#yop-poll-answers-%POLL-ID% {
}
#yop-poll-answers-%POLL-ID% ul {
list-style: none outside none;
margin: 0;
position: relative;
top: 20px;
left: 270px;
}
#yop-poll-answers-%POLL-ID% ul li {
font-style:normal;
margin-bottom:10px;
padding:0px;
font-size:12px;
width: 190px !important;
}
#yop-poll-answers-%POLL-ID% ul li input {
margin:0px;
float:none;
}
#yop-poll-answers-%POLL-ID% ul li label {
margin:0px;
font-style:normal;
font-weight:bold;
font-size:16px;
float:none;
z-index: 10;
}
.yop-poll-results-%POLL-ID% {
font-size: 12px;
font-style: italic;
font-weight: normal;
margin-left: 15px;
}
#yop-poll-custom-%POLL-ID% { }
#yop-poll-custom-%POLL-ID% ul {
font-size: 14px;
font-weight: 500;
left: 270px;
list-style: none outside none;
margin: 0;
padding: 0;
position: relative;
top: 20px;
float: left;
width: 375px;
}
#yop-poll-custom-%POLL-ID% ul li {
padding:0px;
margin:0px;
font-size:14px;
}
#yop-poll-container-%POLL-ID% input[type='text'] {
font-size: 12px;
margin: 10px 0;
padding: 2%;
text-indent: 2%;
width: 92%;
border: 1px solid #B9B8B8;
}
#yop-poll-container-%POLL-ID% textarea {
font-size: 12px;
margin: 10px 0;
padding: 2%;
text-indent: 2%;
width: 92%;
font-family: Verdana;
color: #666;
border: 1px solid #B9B8B8;
}
#yop-poll-captcha-input-div-%POLL-ID% {
margin-top:5px;
}
#yop-poll-captcha-helpers-div-%POLL-ID% {
width:30px;
float:left;
margin-left:5px;
height:0px;
}
#yop-poll-captcha-helpers-div-%POLL-ID% img {
margin-bottom:2px;
}
#yop-poll-captcha-image-div-%POLL-ID% {
margin-bottom:5px;
}
#yop_poll_captcha_image_%POLL-ID% {
float:left;
}
.yop_poll_clear {
clear:both;
}
#yop-poll-vote-%POLL-ID% {
float:left;
/*width:100%; */
padding-left: 270px;
margin-top: 20px;
margin-bottom: 100px;
}
li.yop-poll-li-result-%POLL-ID% {
/* margin-top: 50px;*/
}
.yop-poll-results-bar-%POLL-ID% { background:#f5f5f5; height:10px; }
.yop-poll-results-bar-%POLL-ID% div { background:#555; height:10px; }
#yop-poll-vote-%POLL-ID% div#yop-poll-vote-%POLL-ID% button { float:left; }
#yop-poll-vote-%POLL-ID% div#yop-poll-results-%POLL-ID% {
float: right;
margin-bottom: 20px;
margin-top: -20px;
width: auto;
}
#yop-poll-vote-%POLL-ID% div#yop-poll-results-%POLL-ID% a { color:#3F8B43; text-decoration:underline; font-size:12px;}
#yop-poll-vote-%POLL-ID% div#yop-poll-back-%POLL-ID% a { color:#3F8B43; text-decoration:underline; font-size:12px;}
#yop-poll-vote-%POLL-ID% div { float:left; width:100%; }
#yop-poll-container-error-%POLL-ID% {
font-size:12px;
font-style:italic;
color:red;
left: 290px;
position: relative;
top: 270px;
}
.gb-btn {
background-image: url("http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png");
border: medium none;
border-radius: 10px 10px 10px 10px;
color: #FFFFFF;
cursor: pointer;
font-size: 1.9em;
font-weight: bold;
height: 40px;
text-transform: uppercase;
width: 130px;
}
#gb_cust {
color: #999999;
font-size: 1.4em;
font-weight: bold;
padding-left: 0px;
padding-top: 40px;
background-color: transparent;
}
.yop-poll-results-bar-%POLL-ID% div{
background-image: url("http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png");
height: 30px;
margin-top: 0px;
}
.yop-poll-results-bar-%POLL-ID% {
height: 30px;
width:99%;
}
.pds-answer-text-%POLL-ID% {
font-size: 0.85em;
font-weight: bold;
color: #999;
/* margin-top: -10px;*/
}
.pds-feedback-per-%POLL-ID% {
color: #999999;
font-size: 1em;
margin-left: 5px;
margin-top: -25px;
font-weight: bold;
}
.yop_poll_vote_button{
background-image: url("http://intern-blog.dekra.de/wp-content/uploads/2013/02/bg_button.png");
border: medium none;
border-radius: 10px 10px 10px 10px;
color: #FFFFFF;
cursor: pointer;
font-size: 1.9em;
font-weight: bold;
height: 40px;
width: 250px;
}
#gb_end {
color: #999999;
font-size: 1.4em;
font-weight: bold;
padding-bottom: 100px;
padding-left: 250px;
padding-top: 130px;
background-color: transparent;
}
#yop-poll-container-%POLL-ID% textarea {
#max-width: 350px !important;
}
#yop-poll-container-success-%POLL-ID% {
font-size:12px;
font-style:italic;
color:green;
}
JS
function stripBorder_%POLL-ID%(object) {
object.each(function() {
if( parseInt(jQuery(this).width() ) > 0) {
jQuery(this).width( parseInt( jQuery(this).width() ) - parseInt(jQuery(this).css("border-left-width")) - parseInt(jQuery(this).css("border-right-width")) );
}
else {
jQuery(this).css("border-left-width", '0px');
jQuery(this).css("border-right-width", '0px');
}
});
}
function stripPadding_%POLL-ID%(object) {
object.each(function() {
jQuery(this).width( parseInt( jQuery(this).width() ) - parseInt(jQuery(this).css("padding-left")) - parseInt(jQuery(this).css("padding-left")) );
});
}
function strip_results_%POLL-ID%() {
stripPadding_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop_poll_li_result-%POLL-ID%") );
stripBorder_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-result-bar-%POLL-ID%"));
}
jQuery(document).ready(function(e) {
if(typeof window.strip_results_%POLL-ID% == 'function')
strip_results_%POLL-ID%();
if(typeof window.tabulate_answers_%POLL-ID% == 'function')
tabulate_answers_%POLL-ID%();
if(typeof window.tabulate_results_%POLL-ID% == 'function')
tabulate_results_%POLL-ID%();
});
function equalWidth_%POLL-ID%(obj, cols, findWidest ) {
findWidest = typeof findWidest !== 'undefined' ? findWidest : false;
if ( findWidest ) {
obj.each(function() {
var thisWidth = jQuery(this).width();
width = parseInt(thisWidth / cols);
jQuery(this).width(width);
jQuery(this).css('float', 'left');
});
}
else {
var widest = 0;
obj.each(function() {
var thisWidth = jQuery(this).width();
if(thisWidth > widest) {
widest = thisWidth;
}
});
width = parseInt( widest / cols);
obj.width(width);
obj.css('float', 'left');
}
}
function tabulate_answers_%POLL-ID%() {
equalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID%"), %ANSWERS-TABULATED-COLS% );
//equalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div "), %ANSWERS-TABULATED-COLS%, true );
}
function tabulate_results_%POLL-ID%() {
equalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID%"), %RESULTS-TABULATED-COLS% );
//equalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div "), %RESULTS-TABULATED-COLS%, true );
}
jQuery(document).ready(function(){
runOnPollStateChange_%POLL-ID%();
});
function runOnPollStateChange_%POLL-ID%() {};
Dekra Poll Template für ID 2 (altes Template)
Vor Umfrage
<div id="yop-poll-name-%POLL-ID%" class="yop-poll-name">%POLL-NAME%</div>
<div id="yop-poll-question-%POLL-ID%" class="yop-poll-question">%POLL-QUESTION%</div>
<div id="yop-poll-answers-%POLL-ID%" class="yop-poll-answers">
<div id="gb_cust">STIMMEN SIE JETZT AB !</div>
<ul>
[ANSWER_CONTAINER]
<li class="gb-ac yop-poll-li-answer-%POLL-ID%">
%POLL-ANSWER-CHECK-INPUT%
%POLL-ANSWER-LABEL%
<span class="yop-poll-results-text-%POLL-ID%">
%POLL-ANSWER-RESULT-LABEL%
</span>
%POLL-ANSWER-RESULT-BAR%
</li>
[/ANSWER_CONTAINER]
[OTHER_ANSWER_CONTAINER]
<li class="gb-oac yop-poll-li-answer-%POLL-ID%">
%POLL-OTHER-ANSWER-CHECK-INPUT%
%POLL-OTHER-ANSWER-LABEL%
<span class="yop-poll-results-text-%POLL-ID%">
%POLL-ANSWER-RESULT-LABEL%
</span>
%POLL-OTHER-ANSWER-TEXT-INPUT%
%POLL-ANSWER-RESULT-BAR%
</li>
[/OTHER_ANSWER_CONTAINER]
</ul>
</div>
[CUSTOM_FIELD_CONTAINER]
<li>%POLL-CUSTOM-FIELD-LABEL% %POLL-CUSTOM-FIELD-TEXT-INPUT%</li>
[/CUSTOM_FIELD_CONTAINER]
[CAPTCHA_CONTAINER]
<div id="yop-poll-captcha-%POLL-ID%">
<div class="yop-poll-captcha-image-div" id="yop-poll-captcha-image-div-%POLL-ID%">
%CAPTCHA-IMAGE%
<div class="yop-poll-captcha-helpers-div" id="yop-poll-captcha-helpers-div-%POLL-ID%">%RELOAD-CAPTCHA-IMAGE% </div>
<div class="yop_poll_clear"></div>
</div>
%CAPTCHA-LABEL%
<div class="yop-poll-captcha-input-div" id="yop-poll-captcha-input-div-%POLL-ID%">%CAPTCHA-INPUT%</div>
</div>
[/CAPTCHA_CONTAINER]
<div id="yop-poll-vote-%POLL-ID%" class="yop-poll-footer">
<div class="poll-vote-button">%POLL-VOTE-BUTTON%</div>
<div>%POLL-TOTAL-ANSWERS%</div>
<div>%POLL-TOTAL-VOTES%</div>
</div>
<div class="gb-storage" gb-poll-id="%POLL-ID%"></div>
<script type="text/javascript">
// Load check from Dean Edwards/Matthias Miller/John Resig
function init() {
if (arguments.callee.done) return;
arguments.callee.done = true;
if (_timer) clearInterval(_timer);
jQuery(document).ready(function() {
// remove vote button
jQuery('.poll-vote-button').html('');
// add Buttons
jQuery('.gb-ac').each(function(index,domEle){
var answer_id;
var label;
var content;
answer_id = jQuery(this).find('input:first').val();
label = jQuery(this).find('label:first').html();
content = '<button class="gb-btn" value="' + answer_id + '" type="button">' + label + '</button>';
//jQuery(this).append(content);
jQuery(this).html(content);
//add click handler
jQuery(this).find('button:first').click(function(){
answer_id = jQuery(this).val();
poll_id = jQuery('.gb-storage:first').attr('gb-poll-id');
hidden_field = '<input id="yop-poll-answer-' +answer_id + '" type="hidden" name="yop_poll_answer" value="' + answer_id + '">'
jQuery(this).after(hidden_field);
yop_poll_do_vote(poll_id);
return false;
});
});
});
};
/* for Mozilla/Opera9 */
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", init, false);
}
/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
if (this.readyState == "complete") {
init(); // call the onload handler
}
};
/*@end @*/
/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
var _timer = setInterval(function() {
if (/loaded|complete/.test(document.readyState)) {
init(); // call the onload handler
}
}, 10);
}
/* for other browsers */
window.onload = init;
</script>
Nach Umfrage
<div id="yop-poll-name-%POLL-ID%" class="yop-poll-name">%POLL-NAME%</div>
<div id="yop-poll-question-%POLL-ID%" class="yop-poll-question">%POLL-QUESTION%</div>
<div id="yop-poll-answers-%POLL-ID%" class="yop-poll-answers">
<div id="gb_cust">VORLÄUFIGES ERGEBNIS DER ABSTIMMUNG</div>
<ul>
[ANSWER_RESULT_CONTAINER]
<li class="yop-poll-li-result-%POLL-ID%">
<label class="pds-feedback-label-%POLL-ID%">
<div class="pds-answer-text-%POLL-ID%">%POLL-ANSWER-LABEL%</div>
<div class="pds-feedback-result-%POLL-ID%">
</div>
</label>
<div>
%POLL-ANSWER-RESULT-BAR%
</div><div class="pds-feedback-per-%POLL-ID%"> %POLL-ANSWER-RESULT-LABEL%</div>
</li>
[/ANSWER_RESULT_CONTAINER]
</ul>
</div>
<div id="yop-poll-vote-%POLL-ID%" class="yop-poll-footer">
<div>%POLL-TOTAL-ANSWERS%</div>
<div>%POLL-TOTAL-VOTES%</div>
<!--<div id="yop-poll-back-%POLL-ID%">%POLL-BACK-TO-VOTE-LINK%</div>-->
</div>
Before Start Date
This poll is about to <br> start at %POLL-START-DATE%<br> and finish at %POLL-END-DATE%<br>
After End Date
This poll is closed! Poll activity: <br> start_date %POLL-START-DATE%<br> end_date %POLL-END-DATE%<br> Poll Results: <div id="yop-poll-question-%POLL-ID%" class="yop-poll-question">%POLL-QUESTION%</div> <div id="yop-poll-answers-1" class="yop-poll-answers"> <ul> [ANSWER_RESULT_CONTAINER] <li class="yop-poll-li-result-%POLL-ID%"> <label class="pds-feedback-label"> <span class="pds-answer-text">%POLL-ANSWER-LABEL%</span> <span class="pds-feedback-result"> <span class="pds-feedback-per"> %POLL-ANSWER-RESULT-LABEL%</span> </span> </label> <span class="pds-clear" style="display: block;clear: both;height:1px;line-height:1px;"> </span> %POLL-ANSWER-RESULT-BAR% </li> [/ANSWER_RESULT_CONTAINER] </ul> </div> %POLL-VOTE-BUTTON%
Probleme lösen
Generelle Prüfungen
- Custom Text Fields müssen für die Modifizierungen genau Custom Text Field 1 Kommentarund Custom Text Field 2 Name lauten (Mascha verändert das manchmal)
Kommentare werden am Ende der Umfrage nicht angezeigt
- In der Umfrage muß bei Show results after Poll End Date oder zur Not auch Before Vote gewählt werden
- Im Template müssen die entsprechenden Felder im Bereich "Template after Poll End" vorhanden sein.
Change Log
Anpassungen für Admin Kommentare
2016-07
Datenbanktabelle:
--
-- Tabellenstruktur für Tabelle `kas_wp_yop_poll_admin_comments`
--
CREATE TABLE IF NOT EXISTS `kas_wp_yop_poll_admin_comments` (
`id` int(10) unsigned NOT NULL,
`vote_id` varchar(128) COLLATE latin1_general_ci NOT NULL,
`comment` text COLLATE latin1_general_ci NOT NULL,
`poll_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;
db_schema.php Tabelle hinzufügen admin.php Tabelle hinzufügen yop_poll.php Tabelle hinzufügen answer_result_replace_callback -> get_poll_comments -> admin kommentare dazufügen 2016-06 Problem: Wenn Logs gelöscht sind werden keine Kommentare mehr angezeigt Lösungsansatz. Leeres Ergebnis, weil ein Join über die vote_id zu den Logs geht. 8.8.13 Hallo Mascha und Clemens, folgende Funktionalität ist jetzt implementiert: - Zu einem Hauptbeitrag (Sozusagen 1.Ebene - entspricht dem Post in Wordpress) kann ein normaler Benutzer eine Frage stellen. - Zu den Fragen (das wäre dann die 2. Ebene) kann jeder Benutzer beliebig viele Beiträge machen - Benutzer ab Level 7 (Redakteure und Admins) können beliebig viele Fragen stellen. - Labels sind jetzt: "Hinterlasse einen Beitrag" und "Beitrag abschicken" Grüße, Stephan
11
10/2014
- Kommentare in Spalten sortieren, je nach Antwort
- CSS Overflow auf auto setzen, damit bei langen Kommentaren ein Scrollbalken kommt. Dafür maximale Höhe für Kommentarausgabe, damit die Felder optisch nicht zu groß werden
2016 - 04
- Neues Template für mehr Antwortoptionen. Kommentare werden untereinander (nicht in Spalten) dargestellt
- Einträge bei denen der User die nur den Namen ausfüllen aber nichts im Kommentarfeld schreiben werden nicht mehr angezeigt