Overview

Namespaces

  • None
  • Quform
    • Traduttore_Registry

Classes

  • Quform
  • Quform_Admin_InsertForm
  • Quform_Admin_Page
  • Quform_Admin_Page_Controller
  • Quform_Admin_Page_Dashboard
  • Quform_Admin_Page_Entries
  • Quform_Admin_Page_Entries_Edit
  • Quform_Admin_Page_Entries_List
  • Quform_Admin_Page_Entries_View
  • Quform_Admin_Page_Factory
  • Quform_Admin_Page_Forms_Add
  • Quform_Admin_Page_Forms_Edit
  • Quform_Admin_Page_Forms_List
  • Quform_Admin_Page_Help
  • Quform_Admin_Page_Preview
  • Quform_Admin_Page_Settings
  • Quform_Admin_Page_Tools
  • Quform_Admin_Page_Tools_ExportEntries
  • Quform_Admin_Page_Tools_ExportForm
  • Quform_Admin_Page_Tools_Home
  • Quform_Admin_Page_Tools_ImportForm
  • Quform_Admin_Page_Tools_Migrate
  • Quform_Admin_Page_Tools_Uninstall
  • Quform_Api
  • Quform_Block
  • Quform_Builder
  • Quform_Captcha
  • Quform_ClassLoader
  • Quform_Confirmation
  • Quform_Container
  • Quform_Dashboard_Widget
  • Quform_Dispatcher
  • Quform_Element
  • Quform_Element_Captcha
  • Quform_Element_Checkbox
  • Quform_Element_Column
  • Quform_Element_Container
  • Quform_Element_Container_Iterator
  • Quform_Element_Date
  • Quform_Element_Email
  • Quform_Element_Factory
  • Quform_Element_Field
  • Quform_Element_File
  • Quform_Element_Group
  • Quform_Element_Hidden
  • Quform_Element_Honeypot
  • Quform_Element_Html
  • Quform_Element_Multi
  • Quform_Element_Multiselect
  • Quform_Element_Name
  • Quform_Element_Page
  • Quform_Element_Password
  • Quform_Element_Radio
  • Quform_Element_Recaptcha
  • Quform_Element_Row
  • Quform_Element_Select
  • Quform_Element_Submit
  • Quform_Element_Text
  • Quform_Element_Textarea
  • Quform_Element_Time
  • Quform_Entry_Controller
  • Quform_Entry_Exporter
  • Quform_Entry_List_Settings
  • Quform_Entry_List_Table
  • Quform_Entry_Processor
  • Quform_Entry_UserSearcher
  • Quform_Filter_Abstract
  • Quform_Filter_Alpha
  • Quform_Filter_AlphaNumeric
  • Quform_Filter_Digits
  • Quform_Filter_Regex
  • Quform_Filter_Static
  • Quform_Filter_StripTags
  • Quform_Filter_Trim
  • Quform_Form
  • Quform_Form_Controller
  • Quform_Form_Exporter
  • Quform_Form_Factory
  • Quform_Form_Importer
  • Quform_Form_Iterator
  • Quform_Form_List_Settings
  • Quform_Form_List_Table
  • Quform_Form_Processor
  • Quform_License
  • Quform_Migrator
  • Quform_NonceRefresher
  • Quform_Notification
  • Quform_Notification_Resender
  • Quform_Options
  • Quform_Permissions
  • Quform_Repository
  • Quform_ScriptLoader
  • Quform_Session
  • Quform_Settings
  • Quform_Shortcode
  • Quform_Themes
  • Quform_TokenReplacer
  • Quform_Toolbar
  • Quform_Translations
  • Quform_Updater
  • Quform_Upgrader
  • Quform_Uploader
  • Quform_Validator_Abstract
  • Quform_Validator_Alpha
  • Quform_Validator_AlphaNumeric
  • Quform_Validator_Array
  • Quform_Validator_Captcha
  • Quform_Validator_Date
  • Quform_Validator_Digits
  • Quform_Validator_Duplicate
  • Quform_Validator_Email
  • Quform_Validator_FileUpload
  • Quform_Validator_GreaterThan
  • Quform_Validator_Honeypot
  • Quform_Validator_Identical
  • Quform_Validator_InArray
  • Quform_Validator_Length
  • Quform_Validator_LessThan
  • Quform_Validator_Recaptcha
  • Quform_Validator_Regex
  • Quform_Validator_Required
  • Quform_Validator_Static
  • Quform_Validator_Time
  • Quform_View
  • Quform_ViewFactory
  • Quform_Widget_Form
  • Quform_Widget_Popup

Interfaces

  • Quform_Attachable
  • Quform_Element_Editable
  • Quform_Filter_Interface
  • Quform_Validator_Interface

Constants

  • Quform\Traduttore_Registry\TRANSIENT_KEY_PLUGIN
  • Quform\Traduttore_Registry\TRANSIENT_KEY_THEME

Functions

  • Quform\Traduttore_Registry\add_project
  • Quform\Traduttore_Registry\clean_translations_cache
  • Quform\Traduttore_Registry\get_available_locales
  • Quform\Traduttore_Registry\get_installed_translations
  • Quform\Traduttore_Registry\get_translations
  • Quform\Traduttore_Registry\register_clean_translations_cache
  • Quform\Traduttore_Registry\sanitize_date
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: /**
  4:  * @copyright Copyright (c) 2009-2022 ThemeCatcher (https://www.themecatcher.net)
  5:  */
  6: abstract class Quform_Admin_Page
  7: {
  8:     const BAD_REQUEST = 1;
  9: 
 10:     const NO_PERMISSION = 2;
 11: 
 12:     const NONCE_CHECK_FAILED = 3;
 13: 
 14:     /**
 15:      * The path to the view template
 16:      *
 17:      * @var string
 18:      */
 19:     protected $template;
 20: 
 21:     /**
 22:      * The view instance for this page
 23:      *
 24:      * @var Quform_View
 25:      */
 26:     protected $view;
 27: 
 28:     /**
 29:      * @var Quform_ViewFactory
 30:      */
 31:     protected $viewFactory;
 32: 
 33:     /**
 34:      * Notification messages to be displayed
 35:      *
 36:      * @var array
 37:      */
 38:     protected $messages = array();
 39: 
 40:     /**
 41:      * @var Quform_Repository
 42:      */
 43:     protected $repository;
 44: 
 45:     /**
 46:      * @param Quform_ViewFactory $viewFactory
 47:      * @param Quform_Repository  $repository
 48:      */
 49:     public function __construct(Quform_ViewFactory $viewFactory, Quform_Repository $repository)
 50:     {
 51:         $this->viewFactory = $viewFactory;
 52:         $this->repository = $repository;
 53:     }
 54: 
 55:     /**
 56:      * Sets up the page and view
 57:      *
 58:      * @return  $this
 59:      */
 60:     public function bootstrap()
 61:     {
 62:         $this->init();
 63: 
 64:         $this->view = $this->viewFactory->create($this->template, array('page' => $this));
 65: 
 66:         return $this;
 67:     }
 68: 
 69:     /**
 70:      * Initialize this page
 71:      *
 72:      * Subclasses can override this method to add their own bootstrap functionality.
 73:      */
 74:     public function init()
 75:     {
 76:         // Override in subclass to run on instantiation
 77:     }
 78: 
 79:     /**
 80:      * Enqueue the page assets
 81:      */
 82:     public function enqueueAssets()
 83:     {
 84:         $this->enqueueStyles();
 85:         $this->enqueueScripts();
 86:     }
 87: 
 88:     /**
 89:      * Enqueue the page styles
 90:      */
 91:     protected function enqueueStyles()
 92:     {
 93:         wp_enqueue_style('qfb-fontello', Quform::url('fonts/fontello/css/qfb-icons.css'), array(), QUFORM_VERSION);
 94: 
 95:         $loadLegacyIcons = false;
 96: 
 97:         if (defined('QUFORM_MAILCHIMP_VERSION') && version_compare(QUFORM_MAILCHIMP_VERSION, '1.2.0', '<=')) {
 98:             $loadLegacyIcons = true;
 99:         }
100: 
101:         if (defined('QUFORM_ZAPIER_VERSION') && version_compare(QUFORM_ZAPIER_VERSION, '1.0.3', '<=')) {
102:             $loadLegacyIcons = true;
103:         }
104: 
105:         if (apply_filters('quform_load_legacy_icons', $loadLegacyIcons)) {
106:             wp_enqueue_style('material-icons-legacy-quform', Quform::adminUrl('fonts/material-icons.legacy.min.css'), array(), QUFORM_VERSION);
107:         }
108: 
109:         wp_enqueue_style('material-icons-quform', Quform::adminUrl('fonts/material-icons.min.css'), array(), QUFORM_VERSION);
110:         wp_enqueue_style('quform-admin', Quform::adminUrl('css/admin.min.css'), array(), QUFORM_VERSION);
111: 
112:         if (is_rtl()) {
113:             wp_enqueue_style('quform-rtl', Quform::adminUrl('css/rtl.min.css'), array(), QUFORM_VERSION);
114:         }
115:     }
116: 
117:     /**
118:      * Enqueue the page scripts
119:      */
120:     protected function enqueueScripts()
121:     {
122:         wp_enqueue_script('jquery-scroll-to', Quform::url('js/jquery.scrollTo.min.js'), array('jquery'), '2.1.2', true);
123:         wp_enqueue_script('quform-core', Quform::adminUrl('js/core.min.js'), array('jquery'), QUFORM_VERSION, true);
124: 
125:         wp_localize_script('quform-core', 'quformCoreL10n', array(
126:             'ajaxUrl' => admin_url('admin-ajax.php'),
127:             'pluginUrl' => Quform::url(),
128:             'adminImagesUrl' => Quform::adminUrl('images/'),
129:             'ajaxError' => __('Ajax error', 'quform'),
130:             'thisFieldIsRequired' => __('This field is required', 'quform'),
131:             'invalidEmailAddress' => __('Invalid email address', 'quform'),
132:             'selectImage' => __('Select Image', 'quform'),
133:             'select' => __('Select', 'quform'),
134:             'noResultsFound' => __('No results found.', 'quform'),
135:             'searchingDots' => __('Searching...', 'quform'),
136:             'errorLoading' => __('The results could not be loaded.', 'quform'),
137:             /* translators: %s: the minimum number of characters */
138:             'inputTooShort' => __('Please enter %s or more characters.', 'quform'),
139:             'removeAllItems' => __('Remove all items', 'quform')
140:         ));
141:     }
142: 
143:     /**
144:      * Process this page
145:      *
146:      * Subclasses can override this method to add their own process functionality.
147:      */
148:     public function process()
149:     {
150:         // Override in subclass to run on process
151:     }
152: 
153:     /**
154:      * Subclasses can override this method to set a custom page title
155:      *
156:      * @return string
157:      */
158:     protected function getAdminTitle()
159:     {
160:         return '';
161:     }
162: 
163:     /**
164:      * Override the page title if the current page has a custom title
165:      *
166:      * @param   string  $adminTitle  The current admin title
167:      * @return  string               The new admin title
168:      */
169:     public function setAdminTitle($adminTitle)
170:     {
171:         $title = $this->getAdminTitle();
172: 
173:         if (Quform::isNonEmptyString($title)) {
174:             /* translators: %1$s: the page title, %2$s the site name */
175:             $adminTitle = sprintf(__('%1$s &lsaquo; %2$s &#8212; WordPress', 'quform'), esc_html($title), esc_html(get_bloginfo('name')));
176:         }
177: 
178:         return $adminTitle;
179:     }
180: 
181:     /**
182:      * Renders this page's view
183:      *
184:      * @return string
185:      */
186:     public function display()
187:     {
188:         return $this->view->render();
189:     }
190: 
191:     /**
192:      * Add a notification message
193:      *
194:      * @param   string|array  $type     Type of message e.g. 'error' or 'success'
195:      * @param   string        $message  The message content
196:      * @return  $this
197:      */
198:     public function addMessage($type, $message = '')
199:     {
200:         if (is_array($type)) {
201:             return $this->addMessage($type['type'], $type['message']);
202:         } else {
203:             $message = array('type' => $type, 'message' => $message);
204:             $this->messages[] = $message;
205:         }
206: 
207:         return $this;
208:     }
209: 
210:     /**
211:      * Get the notification messages for this page
212:      *
213:      * @return array
214:      */
215:     public function getMessages()
216:     {
217:         return $this->messages;
218:     }
219: 
220:     /**
221:      * Get the HTML for the page messages
222:      *
223:      * @return string
224:      */
225:     public function getMessagesHtml()
226:     {
227:         $output = '';
228: 
229:         if (count($this->getMessages())) {
230:             $output .= '<div id="qfb-page-messages" class="qfb-page-messages">';
231: 
232:             foreach ($this->getMessages() as $message) {
233:                 $output .= '<div class="qfb-message-box qfb-message-box-' . $message['type'] . '"><div class="qfb-message-box-inner">' . $message['message'] . '</div></div>';
234:             }
235: 
236:             $output .= '</div>';
237:         }
238: 
239:         return $output;
240:     }
241: 
242:     /**
243:      * Get the HTML for the admin navigation menu
244:      *
245:      * @param   array|null  $currentForm  The data for the current form (if any)
246:      * @param   array       $extra        Extra HTML to add to the nav, the array key is the hook position
247:      * @return  string
248:      */
249:     public function getNavHtml(array $currentForm = null, array $extra = array())
250:     {
251:         $links = array(
252:             array(
253:                 'cap' => 'quform_view_dashboard',
254:                 'href' => admin_url('admin.php?page=quform.dashboard'),
255:                 'class' => 'dashboard',
256:                 'icon' => '<i class="qfb-mdi qfb-mdi-dashboard"></i>',
257:                 'text' => __('Dashboard', 'quform')
258:             ),
259:             array(
260:                 'cap' => 'quform_list_forms',
261:                 'href' => admin_url('admin.php?page=quform.forms'),
262:                 'class' => 'forms',
263:                 'icon' => '<i class="qfb-mdi qfb-mdi-view_stream"></i>',
264:                 'text' => __('Forms', 'quform')
265:             ),
266:             array(
267:                 'cap' => 'quform_view_entries',
268:                 'href' => admin_url('admin.php?page=quform.entries'),
269:                 'class' => 'entries',
270:                 'icon' => '<i class="qfb-mdi qfb-mdi-message"></i>',
271:                 'text' => __('Entries', 'quform')
272:             ),
273:             array(
274:                 'cap' => 'quform_view_tools',
275:                 'href' => admin_url('admin.php?page=quform.tools'),
276:                 'class' => 'tools',
277:                 'icon' => '<i class="qfb-mdi qfb-mdi-build"></i>',
278:                 'text' => __('Tools', 'quform')
279:             ),
280:             array(
281:                 'cap' => 'quform_settings',
282:                 'href' => admin_url('admin.php?page=quform.settings'),
283:                 'class' => 'settings',
284:                 'icon' => '<i class="qfb-mdi qfb-mdi-settings"></i>',
285:                 'text' => __('Settings', 'quform')
286:             ),
287:             array(
288:                 'cap' => 'quform_help',
289:                 'href' => admin_url('admin.php?page=quform.help'),
290:                 'class' => 'help',
291:                 'icon' => '<i class="qfb-mdi qfb-mdi-help_outline"></i>',
292:                 'text' => __('Help', 'quform')
293:             )
294:         );
295: 
296:         $visible = array();
297:         foreach ($links as $link) {
298:             if (current_user_can($link['cap'])) {
299:                 $visible[] = $link;
300:             }
301:         }
302: 
303:         if ( ! count($visible)) {
304:             return '';
305:         }
306: 
307:         $currentUserId = get_current_user_id();
308:         $userOrderBy = get_user_meta($currentUserId, 'quform_forms_order_by', true);
309:         $userOrder = get_user_meta($currentUserId, 'quform_forms_order', true);
310: 
311:         $forms = $this->repository->getForms(array(
312:             'orderby' => in_array($userOrderBy, array('id', 'name', 'entries', 'active', 'created_at', 'updated_at')) ? $userOrderBy : 'updated_at',
313:             'order' => in_array($userOrder, array('asc', 'desc')) ? strtoupper($userOrder) : 'DESC',
314:             'limit' => 50
315:         ));
316: 
317:         ob_start();
318:         ?>
319:         <div id="qfb-nav" class="qfb-cf">
320:             <?php
321:                 printf(
322:                     '<a class="qfb-logo"%s></a>',
323:                     current_user_can('quform_view_dashboard') ? sprintf(' href="%s"', esc_url(admin_url('admin.php?page=quform.dashboard'))) : ''
324:                 );
325:             ?>
326: 
327:             <?php echo $this->getExtraHtml(10, $extra); ?>
328: 
329:             <div class="qfb-nav-item qfb-nav-item-menu">
330:                 <a class="qfb-nav-item-link qfb-nav-popup-trigger"><i class="qfb-icon qfb-icon-bars"></i></a>
331:                 <div class="qfb-nav-popup-content">
332:                     <ul class="qfb-nav-menu">
333:                         <?php
334:                             foreach ($visible as $item) {
335:                                 echo '<li class="qfb-page-' . esc_attr($item['class']) . '"><a href="' . esc_url($item['href']) . '">' . $item['icon'] . ' <span>' . esc_html($item['text']) . '</span></a></li>';
336:                             }
337:                         ?>
338:                     </ul>
339:                 </div>
340:             </div>
341: 
342:             <?php echo $this->getExtraHtml(20, $extra); ?>
343: 
344:             <?php if (current_user_can('quform_view_entries') || current_user_can('quform_edit_forms')) : ?>
345: 
346:                 <div class="qfb-nav-item qfb-nav-item-form-switcher">
347:                     <a class="qfb-nav-item-link qfb-nav-popup-trigger"><i class="qfb-icon qfb-icon-folder-open-o"></i></a>
348:                     <div class="qfb-form-switcher qfb-nav-popup-content">
349:                         <ul class="qfb-nav-menu qfb-cf">
350:                             <?php
351:                                 if (is_array($currentForm) && ! empty($currentForm['id'])) {
352:                                     echo $this->getFormSwitcherItemHtml($currentForm, true);
353:                                 }
354: 
355:                                 foreach ($forms as $form) {
356:                                     if (is_array($currentForm) && ! empty($currentForm['id']) && $form['id'] == $currentForm['id']) {
357:                                         continue;
358:                                     }
359: 
360:                                     echo $this->getFormSwitcherItemHtml($form);
361:                                 }
362:                             ?>
363:                             <li class="qfb-cf qfb-form-switcher-add-form-button"><?php printf('<a href="%s">%s</a>', esc_url(admin_url('admin.php?page=quform.forms&sp=add')), esc_html__('Add New', 'quform')); ?></li>
364:                         </ul>
365:                     </div>
366:                 </div>
367: 
368:             <?php endif; ?>
369: 
370:             <?php echo $this->getExtraHtml(30, $extra); ?>
371: 
372:             <?php if (current_user_can('quform_add_forms')) : ?>
373:                 <div class="qfb-nav-item qfb-nav-item-add">
374:                     <a class="qfb-nav-item-link" title="<?php esc_attr_e('Create a new form', 'quform'); ?>" href="<?php echo esc_url(admin_url('admin.php?page=quform.forms&sp=add')); ?>"><i class="qfb-mdi qfb-mdi-add_circle"></i></a>
375:                 </div>
376:             <?php endif; ?>
377: 
378:             <?php echo $this->getExtraHtml(40, $extra); ?>
379: 
380:             <div class="qfb-nav-item qfb-nav-item-right qfb-nav-item-help">
381:                 <a class="qfb-nav-item-link qfb-nav-popup-trigger"><i class="qfb-icon qfb-icon-question"></i></a>
382:                 <div class="qfb-nav-popup-content">
383:                     <ul class="qfb-nav-menu qfb-cf">
384:                         <li class="qfb-cf"><a href="https://support.themecatcher.net/" target="_blank"><i class="qfb-icon qfb-icon-life-ring"></i><?php esc_html_e('Visit help site', 'quform'); ?></a></li>
385:                         <li class="qfb-cf"><a href="https://support.themecatcher.net/quform-wordpress-v2" target="_blank"><i class="qfb-icon qfb-icon-book"></i><?php esc_html_e('View documentation', 'quform'); ?></a></li>
386:                         <li class="qfb-cf"><a href="https://support.themecatcher.net/forums" target="_blank"><i class="qfb-icon qfb-icon-comments"></i><?php esc_html_e('Support forum', 'quform'); ?></a></li>
387:                         <li class="qfb-cf"><a href="https://www.youtube.com/channel/UCoyKi9_M7ECFYK-w7ZqNMVg" target="_blank"><i class="qfb-icon qfb-icon-play"></i><?php esc_html_e('Video tutorials', 'quform'); ?></a></li>
388:                     </ul>
389:                 </div>
390: 
391:             </div>
392: 
393:             <?php echo $this->getExtraHtml(50, $extra); ?>
394: 
395:         </div>
396:         <?php
397: 
398:         return ob_get_clean();
399:     }
400: 
401:     /**
402:      * Get the HTML for a single form list item in the form switcher
403:      *
404:      * @param   array   $form       The form config
405:      * @param   bool    $highlight  Whether to highlight the item
406:      * @return  string
407:      */
408:     protected function getFormSwitcherItemHtml(array $form, $highlight = false)
409:     {
410:         $name = Quform::isNonEmptyString($form['name']) ? $form['name'] : __('(no title)', 'quform');
411: 
412:         if ($this instanceof Quform_Admin_Page_Entries_List ||
413:             $this instanceof Quform_Admin_Page_Entries_View ||
414:             $this instanceof Quform_Admin_Page_Entries_Edit ||
415:             ! current_user_can('quform_edit_forms') // Implies they can edit entries - permissions checked in caller
416:         ) {
417:             $linkUrl = sprintf(admin_url('admin.php?page=quform.entries&id=%d'), $form['id']);
418:         } else {
419:             $linkUrl = sprintf(admin_url('admin.php?page=quform.forms&sp=edit&id=%d'), $form['id']);
420:         }
421: 
422:         $output = sprintf('<li class="qfb-cf%s">', $highlight ? ' qfb-highlight' : '');
423:         $output .= sprintf('<a title="%s" href="%s">', Quform::escape($name), esc_url($linkUrl));
424:         $output .= Quform::escape($name);
425:         $output .= '<span class="qfb-fade-overflow"></span></a>';
426: 
427:         $output .= '<span class="qfb-form-switcher-icons">';
428: 
429:         if (current_user_can('quform_view_entries')) {
430:             $output .= sprintf('<a href="%s"><i title="%s" class="qfb-mdi qfb-mdi-chat"></i></a>', esc_url(admin_url('admin.php?page=quform.entries&id=' . $form['id'])), esc_attr__('View Entries', 'quform'));
431:         }
432: 
433:         if (current_user_can('quform_edit_forms')) {
434:             $output .= sprintf('<a href="%s"><i title="%s" class="qfb-icon qfb-icon-pencil"></i></a>', esc_url(admin_url('admin.php?page=quform.forms&sp=edit&id=' . $form['id'])), esc_attr__('Edit', 'quform'));
435:         }
436: 
437:         $output .= '</span>';
438: 
439:         $output .= '</li>';
440: 
441:         return $output;
442:     }
443: 
444:     /**
445:      * Get extra HTML for the nav and call hooks
446:      *
447:      * @param   int    $index
448:      * @param   array  $extra
449:      * @return  string
450:      */
451:     protected function getExtraHtml($index, array $extra)
452:     {
453:         ob_start();
454: 
455:         if (isset($extra[$index])) {
456:             echo $extra[$index];
457:         }
458: 
459:         do_action('quform_admin_nav', $index, $this);
460: 
461:         return ob_get_clean();
462:     }
463: }
464: 
API documentation generated by ApiGen