Webylon 3.1 API Docs
  • Package
  • Class
  • Tree
  • Deprecated
  • Download
Version: current
  • 3.2
  • 3.1

Packages

  • auth
  • Booking
  • cart
    • shipping
    • steppedcheckout
  • Catalog
  • cms
    • assets
    • batchaction
    • batchactions
    • bulkloading
    • comments
    • content
    • core
    • export
    • newsletter
    • publishers
    • reports
    • security
    • tasks
  • Dashboard
  • DataObjectManager
  • event
  • faq
  • forms
    • actions
    • core
    • fields-basic
    • fields-dataless
    • fields-datetime
    • fields-files
    • fields-formatted
    • fields-formattedinput
    • fields-relational
    • fields-structural
    • transformations
    • validators
  • googlesitemaps
  • guestbook
  • installer
  • newsletter
  • None
  • photo
    • gallery
  • PHP
  • polls
  • recaptcha
  • sapphire
    • api
    • bulkloading
    • control
    • core
    • cron
    • dev
    • email
    • fields-formattedinput
    • filesystem
    • formatters
    • forms
    • i18n
    • integration
    • misc
    • model
    • parsers
    • search
    • security
    • tasks
    • testing
    • tools
    • validation
    • view
    • widgets
  • seo
    • open
      • graph
  • sfDateTimePlugin
  • spamprotection
  • stealth
    • captha
  • subsites
  • userform
    • pagetypes
  • userforms
  • webylon
  • widgets

Classes

  • Poll
  • PollAnswer
  • PollPage
  • ShowPoll
  1 <?php
  2 /**
  3  * DataObject Poll.
  4  *
  5  * @package polls
  6  */
  7 class Poll extends DataObject {
  8 
  9     static $db = array(
 10             'PollTitle' => 'Text',
 11             'IsActive' => 'Boolean',
 12             'Subsite' => 'Int',
 13             'DiscussionLink' => 'Varchar(255)',
 14             'AnswerType' => 'Int'
 15     );
 16 
 17     static $has_many = array(
 18             'PollAnswers' => 'PollAnswer'
 19     );
 20 
 21     static $searchable_fields = array(
 22             'PollTitle'
 23     );
 24 
 25     static $summary_fields=array (
 26             'PollTitle',
 27             'ActiveText'
 28     );
 29     static $defaults = array(
 30             'AnswerType' => 1,
 31             'Subsite' => 0,
 32     );
 33 
 34     static $log_cookie = true;
 35     static $result_graphing = false;
 36     static $cookie_timeout_time = 1;
 37     static $graph_type = "p3";
 38     static $graph_size = "200x100";
 39 
 40     static $extraGraphParams = "&amp;chf=bg,s,E0D2E6";
 41 
 42     function getCMSFields(){
 43         $fields = parent::getCMSFields();
 44         $fAnswerType = new OptionsetField('AnswerType',$this->fieldLabel('AnswerType'), array(
 45                         1 => _t('Poll.TYPE_ONE',"One"),
 46                         2 => _t('Poll.TYPE_MANY',"Many"),
 47         ));
 48         $fields->replaceField('AnswerType', $fAnswerType);
 49         // Subsite Vote
 50         if(singleton('SiteTree')->hasExtension('SiteTreeSubsites')){
 51             $subsiteField = new SubsiteDropdownField('Subsite', _t('Poll.Subsite','Subsite'), $this->Subsite);
 52             $fields->replaceField('Subsite', $subsiteField);
 53         }else{
 54             $fields->removeByName('Subsite');
 55         }
 56         return $fields;
 57     }
 58     
 59     function fieldLabels() {
 60         $labels = parent::fieldLabels();
 61         $labels['ActiveText'] = $labels['IsActive'];
 62         return $labels;
 63     }
 64 
 65     /**
 66      * Work out the total votes from all the answers still attached to this
 67      * poll
 68      *
 69      * @return int total count
 70      */
 71     function getTotalVotes() {
 72         $total = 0;
 73         if($this->PollAnswers()->exists()) {
 74             foreach($this->PollAnswers() as $answer) {
 75                 $total += $answer->Votes;
 76             }
 77         }
 78         return $total;
 79     }
 80 
 81     /**
 82      * Returns the String for the title in the Generic DataAdmin
 83      * @return String
 84      */
 85     function ActiveText() {
 86         ($this->IsActive) ? $title = _t('Poll.Active') : $title = _t('Poll.NotActive');
 87         return $title;
 88     }
 89 
 90     function questionFields() {
 91         $answers = array();
 92         foreach($this->PollAnswers() as $answer)
 93             $answers[$answer->ID]=$answer->Answer;
 94         switch ($this->AnswerType) {
 95             case 1:
 96                 $fields = new FieldSet(
 97                         new OptionsetField('PollAnswer', $this->PollTitle, $answers),
 98                         new HiddenField('ID', '', $this->ID)
 99                 );
100                 break;
101 
102             case 2:
103                 $fields = new FieldSet(
104                         new CheckboxSetField('PollAnswer', $this->PollTitle, $answers),
105                         new HiddenField('ID', '', $this->ID)
106                 );
107                 break;
108 
109             default:
110                 break;
111         }
112 
113 
114         return $fields;
115     }
116     /**
117      * Print out the answers as a graph
118      * @param String Google Chart data
119      * @see http://code.google.com/apis/chart/
120      * @return String
121      */
122     static function generateChart($mapdetails) {
123         return "http://chart.apis.google.com/chart?$mapdetails";
124     }
125     /**
126      * The Answers that are available for that post
127      * @return Array
128      */
129     function answerFields() {
130         $total_votes = $this->TotalVotes;
131         $percentage = 100;
132         $graphInfo = array();
133         $fields = array();
134         $fields[] = new LiteralField('Poll_Title',"<h6 class=\"pollTitle\">".$this->PollTitle."</h6>");
135         foreach($this->PollAnswers() as $this_answer) {
136             if($total_votes > 0) {
137                 $percentage=floor(((int)$this_answer->Votes/$total_votes)*100);
138             }
139             // save this percentage in an array for later graphing
140             // show text based solution
141             if(!Poll::$result_graphing) {
142                 $fields[] = new LiteralField('Answer_' . $this_answer->ID, "<div class=\"poll_answer_caption\">" . $this_answer->Answer ." (". $percentage . "%)</div><div class=\"poll_answer_result\"><span style=\"width: " . $percentage . "%\">&nbsp;</span></div>");
143             }
144         }
145         /**
146          * @TODO Modularise and tidy this area
147          */
148         if(Poll::$result_graphing == true) {
149             $output = "chs=". Poll::$graph_size ."&amp;cht=".Poll::$graph_type;
150             $values = "&amp;chd=t:";
151             $labels = "&amp;chl=";
152             foreach($this->PollAnswers() as $result) {
153                 if($total_votes > 0) {
154                     $percentage=floor(((int)$result->Votes/$total_votes)*100);
155                 }
156                 $values .= $result->Votes.".0,";
157                 $labels .= $result->Answer ." ". $percentage ."% |";
158             }
159             $values = substr($values, 0, -1);
160             $labels = substr($labels, 0, -1);
161             $output .= $values.$labels.Poll::$extraGraphParams;
162             $chart = $this->generateChart($output);
163             $fields[] = new LiteralField("AnswerGraph", "<img src='$chart' alt='chart' />");
164         }
165         // Add the discussion link
166         if($this->DiscussionLink) {
167             $fields[] = new LiteralField("DiscussionLink", "<p class='discussionLink'>Tell Us More on the <a href='$this->DiscussionLink'>Discussion Boards</a></p>");
168         }
169         return $fields;
170     }
171 }
172 
173 ?>
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -
Webylon 3.1 API Docs API documentation generated by ApiGen 2.8.0