Overview

Packages

  • alpha::controller
  • alpha::controller::front
  • alpha::exceptions
  • alpha::model
  • alpha::model::types
  • alpha::tasks
  • alpha::tests
  • alpha::util
  • alpha::util::cache
  • alpha::util::codehighlight
  • alpha::util::convertors
  • alpha::util::feeds
  • alpha::util::filters
  • alpha::util::graphs
  • alpha::util::helpers
  • alpha::util::metrics
  • alpha::util::search
  • alpha::view
  • alpha::view::renderers
  • alpha::view::widgets

Classes

  • AlphaView
  • ArticleCommentView
  • ArticleView
  • DEnumView
  • PersonView
  • SequenceView
  • ViewState
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: 
  3: /**
  4:  *
  5:  * The rendering class for the ArticleObject class
  6:  *
  7:  * @package alpha::view
  8:  * @since 1.0
  9:  * @author John Collins <dev@alphaframework.org>
 10:  * @version $Id: ArticleView.inc 1752 2014-03-30 22:26:22Z alphadevx $
 11:  * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
 12:  * @copyright Copyright (c) 2012, John Collins (founder of Alpha Framework).
 13:  * All rights reserved.
 14:  *
 15:  * <pre>
 16:  * Redistribution and use in source and binary forms, with or
 17:  * without modification, are permitted provided that the
 18:  * following conditions are met:
 19:  *
 20:  * * Redistributions of source code must retain the above
 21:  *   copyright notice, this list of conditions and the
 22:  *   following disclaimer.
 23:  * * Redistributions in binary form must reproduce the above
 24:  *   copyright notice, this list of conditions and the
 25:  *   following disclaimer in the documentation and/or other
 26:  *   materials provided with the distribution.
 27:  * * Neither the name of the Alpha Framework nor the names
 28:  *   of its contributors may be used to endorse or promote
 29:  *   products derived from this software without specific
 30:  *   prior written permission.
 31:  *
 32:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 33:  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 34:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 35:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 36:  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 37:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 38:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 39:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 40:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 41:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 42:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 43:  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 44:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 45:  * </pre>
 46:  *
 47:  */
 48: class ArticleView extends AlphaView {
 49:     /**
 50:      * Method to generate the markdown HTML render of the article content
 51:      *
 52:      * @param array $fields Hash array of HTML fields to pass to the template.
 53:      * @since 1.0
 54:      */
 55:     public function markdownView($fields=array()) {
 56:         global $config;
 57: 
 58:         $markdown = new MarkdownFacade($this->BO);
 59: 
 60:         $fields['markdownContent'] = $markdown->getContent();
 61: 
 62:         $this->loadTemplate($this->BO, 'markdown', $fields);
 63:     }
 64: 
 65:     /**
 66:      * Adds a note to the create article screen
 67:      *
 68:      * @since 1.0
 69:      */
 70:     protected function after_createView_callback() {
 71:         echo '<p><strong>Please note</strong> that you will only be able to attach files to the article once it has been created.</p><br>';
 72:     }
 73: 
 74:     /**
 75:      * Renders the list view (adds the dateAdded field for the list template)
 76:      *
 77:      * @param array $fields hash array of HTML fields to pass to the template
 78:      * @since 1.0
 79:      */
 80:     public function listView($fields=array()) {
 81:         $fields['dateAdded'] = $this->BO->getCreateTS()->getDate();
 82:         parent::listView($fields);
 83:     }
 84: 
 85:     /**
 86:      * Renders a form to enable article editing with attachments options
 87:      *
 88:      * @param array $fields hash array of HTML fields to pass to the template
 89:      * @since 1.0
 90:      */
 91:     public function editView($fields=array()) {
 92:         if(method_exists($this, 'before_editView_callback'))
 93:             $this->before_editView_callback();
 94: 
 95:         global $config;
 96: 
 97:         // the form action
 98:         $fields['formAction'] = $_SERVER['REQUEST_URI'];
 99: 
100:         // the form ID
101:         $fields['formID'] = get_class($this->BO).'_'.$this->BO->getID();
102: 
103:         // buffer form fields to $formFields
104:         $fields['formFields'] = $this->renderAllFields('edit');
105: 
106:         // buffer HTML output for Create and Cancel buttons
107:         $button = new Button('submit', 'Save', 'saveBut');
108:         $fields['saveButton'] = $button->render();
109: 
110:         $js = "if(window.jQuery) {
111:                     BootstrapDialog.show({
112:                         title: 'Confirmation',
113:                         message: 'Are you sure you wish to delete this item?',
114:                         buttons: [
115:                             {
116:                                 icon: 'glyphicon glyphicon-remove',
117:                                 label: 'Cancel',
118:                                 cssClass: 'btn btn-default btn-xs',
119:                                 action: function(dialogItself){
120:                                     dialogItself.close();
121:                                 }
122:                             },
123:                             {
124:                                 icon: 'glyphicon glyphicon-ok',
125:                                 label: 'Okay',
126:                                 cssClass: 'btn btn-default btn-xs',
127:                                 action: function(dialogItself) {
128:                                     $('[id=\"".($config->get('security.encrypt.http.fieldnames') ? base64_encode(AlphaSecurityUtils::encrypt('deleteOID')) : 'deleteOID')."\"]').attr('value', '".$this->BO->getOID()."');
129:                                     $('#deleteForm').submit();
130:                                     dialogItself.close();
131:                                 }
132:                             }
133:                         ]
134:                     });
135:                 }";
136: 
137:         $button = new Button($js, "Delete", "deleteBut");
138:         $fields['deleteButton'] = $button->render();
139: 
140:         $button = new Button("document.location = '".FrontController::generateSecureURL('act=ListAll&bo='.get_class($this->BO))."'", "Back to List", "cancelBut");
141:         $fields['cancelButton'] = $button->render();
142: 
143:         $tags = array();
144: 
145:         if(is_object($this->BO->getPropObject('tags')))
146:             $tags = $this->BO->getPropObject('tags')->getRelatedObjects();
147: 
148:         if(count($tags) > 0) {
149:             $button = new Button("document.location = '".FrontController::generateSecureURL('act=EditTags&bo='.get_class($this->BO).'&oid='.$this->BO->getOID())."'", "Edit Tags", "tagsBut");
150:             $fields['tagsButton'] = $button->render();
151:         }
152: 
153:         // buffer security fields to $formSecurityFields variable
154:         $fields['formSecurityFields'] = $this->renderSecurityFields();
155: 
156:         // OID will need to be posted for optimistic lock checking
157:         $fields['version_num'] = $this->BO->getVersionNumber();
158: 
159:         // file attachments section
160:         $fields['fileAttachments'] = $this->renderFileUploadSection();
161: 
162:         $this->loadTemplate($this->BO, 'edit', $fields);
163: 
164:         if(method_exists($this, 'after_editView_callback'))
165:             $this->after_editView_callback();
166:     }
167: 
168:     /**
169:      * Renders the HTML for the file upload section
170:      *
171:      * @return string
172:      * @since 1.0
173:      */
174:     protected function renderFileUploadSection() {
175:         global $config;
176: 
177:         $html = '<div class="form-group">';
178:         $html .= '  <h3>File Attachments:</h3>';
179: 
180:         if (is_dir($this->BO->getAttachmentsLocation())) {
181:             $handle = opendir($this->BO->getAttachmentsLocation());
182: 
183:             $fileCount = 0;
184: 
185:             $html .= '<table class="table table-bordered">';
186: 
187:             // loop over the attachments directory
188:             while (false !== ($file = readdir($handle))) {
189:                 if($file != '.' && $file != '..') {
190:                     $fileCount++;
191: 
192:                     $html .= '<tr>';
193: 
194:                     $html .= '<td>'.$file.' <em>('.number_format(filesize($this->BO->getAttachmentsLocation().'/'.$file)/1024).' KB)</em></td>';
195: 
196:                     $js = "if(window.jQuery) {
197:                             BootstrapDialog.show({
198:                                 title: 'Confirmation',
199:                                 message: 'Are you sure you wish to delete this item?',
200:                                 buttons: [
201:                                     {
202:                                         icon: 'glyphicon glyphicon-remove',
203:                                         label: 'Cancel',
204:                                         cssClass: 'btn btn-default btn-xs',
205:                                         action: function(dialogItself){
206:                                             dialogItself.close();
207:                                         }
208:                                     },
209:                                     {
210:                                         icon: 'glyphicon glyphicon-ok',
211:                                         label: 'Okay',
212:                                         cssClass: 'btn btn-default btn-xs',
213:                                         action: function(dialogItself) {
214:                                             $('[id=\"".($config->get('security.encrypt.http.fieldnames') ? base64_encode(AlphaSecurityUtils::encrypt('file_to_delete')) : 'file_to_delete')."\"]').attr('value', '".$file."');
215:                                     $('#".get_class($this->BO).'_'.$this->BO->getID()."').submit();
216:                                             dialogItself.close();
217:                                         }
218:                                     }
219:                                 ]
220:                             });
221:                         }";
222:                     $button = new Button($js, "Delete", "delete".$fileCount."But");
223:                     $html .= '<td>'.$button->render().'</td>';
224:                     $html .= '</tr>';
225:                 }
226:             }
227: 
228:             $html .= '</table>';
229: 
230:         }else{
231:             // we will take this opportunity to create the attachments folder is it does
232:             // not already exist.
233:             $this->BO->createAttachmentsFolder();
234:         }
235: 
236:         $html .= '<span class="btn btn-default btn-file">';
237:         $html .= '<input name="userfile" type="file" value="Browse..."/>';
238:         $html .= '</span>';
239: 
240:         $temp = new Button('submit', 'Upload', 'uploadBut');
241:         $html .= $temp->render();
242: 
243:         $fieldname = ($config->get('security.encrypt.http.fieldnames') ? base64_encode(AlphaSecurityUtils::encrypt('file_to_delete')) : 'file_to_delete');
244:         $html .= '<input type="hidden" name="'.$fieldname.'" id="'.$fieldname.'" value=""/>';
245: 
246:         $html .= '</div>';
247: 
248:         return $html;
249:     }
250: }
251: 
252: ?>
Alpha Framework 1.2.4 API Documentation API documentation generated by ApiGen 2.8.0