/**
  * Responde to configuring this plugin in the plugin UI
  */
 public function action_plugin_ui_configure()
 {
     $ui = new FormUI('addon_catalog');
     $ui->append(FormControlCheckbox::create('use_basepath', 'addon_catalog__use_basepath')->label(_t('Use a base path: ', 'addon_catalog')));
     $ui->append(FormControlText::create('basepath', 'addon_catalog__basepath')->label(_t('Base path (without trailing slash), e.g. <em>explore</em> :', 'addon_catalog')));
     $ui->append(FormControlText::create('date_format', 'addon_catalog__date_format')->label(_t('Release Date format :', 'addon_catalog')));
     $ui->append(FormControlSubmit::create('save')->set_caption(_t('Save', 'addon_catalog')));
     $ui->out();
 }
示例#2
0
 /**
  * Generate FormUI checkboxes wrapped in listitems for the tag collection. Is used with and without AJAX
  */
 public function get_tag_listitems()
 {
     if (count($this->theme->tags) < 1) {
         return null;
     }
     $listitems = array();
     // Calculation preparation for statistical weighting
     $count_range = $this->theme->max - $this->theme->min;
     if ($count_range > 5) {
         $p10 = $this->theme->min + $count_range / 10;
         $p25 = $this->theme->min + $count_range / 4;
         $p50 = $this->theme->min + $count_range / 2;
         $p75 = $this->theme->min + $count_range / 100 * 75;
         $p90 = $this->theme->min + $count_range / 100 * 90;
     }
     foreach ($this->theme->tags as $tag) {
         // The actual weighting happens through classifying into one of 6 statistically relevant areas
         $weight = $tag->count < $p10 ? 1 : ($tag->count < $p25 ? 2 : ($tag->count < $p50 ? 3 : ($tag->count < $p75 ? 4 : ($tag->count < $p90 ? 5 : 6))));
         $listitems[] = FormControlCheckbox::create('tag_' . $tag->id)->set_returned_value($tag->id)->set_property('name', 'tags[]')->label($tag->term_display . '<span class="count"><a href="' . URL::get('admin', array('page' => 'posts', 'search' => 'tag:' . $tag->tag_text_searchable)) . '" title="' . Utils::htmlspecialchars(_t('Manage posts tagged %1$s', array($tag->term_display))) . '">' . $tag->count . '</a></span>')->set_template('control.label.outsideright')->set_setting('wrap', '<li class="tag_' . $tag->id . ' item tag wt' . $weight . '">%s</li>');
     }
     return $listitems;
 }
示例#3
0
    /**
     * Get the block configuration form to show in a modal iframe on the themes page
     *
     */
    public function get_configure_block()
    {
        Utils::check_request_method(array('GET', 'POST'));
        $block = DB::get_row('SELECT b.* FROM {blocks} b WHERE id = :id ORDER BY b.title ASC', array('id' => $_GET['blockid']), 'Block');
        /** @var FormUI $block_form  */
        $block_form = $block->get_form();
        // @todo This.  Is dumb.  Fix it.
        $block_form->set_properties(array('success_message' => '</div><div class="humanMsg" id="humanMsg" style="display: block;top: auto;bottom:-50px;"><div class="imsgs"><div id="msgid_2" class="msg" style="display: block; opacity: 0.8;"><p>' . _t('Saved block configuration.') . '</p></div></div></div>
<script type="text/javascript">
		$("#humanMsg").animate({bottom: "5px"}, 500, function(){ window.setTimeout(function(){$("#humanMsg").animate({bottom: "-50px"}, 500)},3000) })
		parent.refresh_block_forms();
</script>
<div style="display:none;">
'));
        $first_control = reset($block_form->controls);
        $block_admin = FormControlFieldset::create('block_admin')->set_caption(_t('Block Display Settings'));
        if ($first_control) {
            $block_form->insert($first_control, $block_admin);
        } else {
            $block_form->append($block_admin);
        }
        $block_title_storage = new ControlStorage(function () use($block) {
            return $block->title;
        }, function ($name, $value) use($block) {
            $block->title = $value;
        });
        $block_admin->append(FormControlLabel::wrap(_t('Block Title:'), FormControlText::create('_title', $block_title_storage)->add_validator('validate_required')));
        $block_admin->append(FormControlLabel::wrap(_t('Display Block Title:'), FormControlCheckbox::create('_show_title', $block)));
        $block_form->append(FormControlSubmit::create('save')->set_caption(_t('Save')));
        $this->theme->content = $block_form->get();
        $this->display('block_configure');
    }
示例#4
0
文件: post.php 项目: habari/system
 /**
  * Returns a form for editing this post
  * @param string $context The context the form is being created in, most often 'admin'
  * @return FormUI A form appropriate for creating and updating this post.
  */
 public function get_form($context)
 {
     /** @var FormUI $form  */
     $form = new FormUI('create-content', null, array('class' => array('create')));
     $form->set_wrap_each('<div class="container">%s</div>');
     $newpost = 0 === $this->id;
     // If the post has already been saved, add a link to its permalink
     if (!$newpost) {
         /** @var FormControlWrapper $post_links  */
         $post_links = $form->append(FormControlWrapper::create('post_links', null, array('class' => 'container')));
         $permalink = $this->status != Post::status('published') ? $this->permalink . '?preview=1' : $this->permalink;
         $post_links->append(FormControlStatic::create('post_permalink')->set_static('<a href="' . $permalink . '" class="viewpost" >' . ($this->status != Post::status('published') ? _t('Preview Post') : _t('View Post')) . '</a>'));
     }
     // Store this post instance into a hidden field for later use when saving data
     $form->append(FormControlData::create('post')->set_value($this));
     // Create the Title field
     $form->append(FormControlLabel::wrap(_t('Title'), FormControlText::create('title', null, array('class' => array('check-change full-width')))->set_value($this->title_internal)));
     // Create the silos
     if (count(Plugins::get_by_interface('MediaSilo'))) {
         $silos = FormControlSilos::create('silos')->set_setting('wrap', '<div class="container silos">%s</div>');
         $form->append($silos);
     }
     // Create the Content field
     $form->append(FormControlLabel::wrap(_t('Content'), FormControlTextArea::create('content', null, array('class' => array('resizable', 'check-change full-width rte')))->set_value($this->content_internal)));
     $form->content->raw = true;
     // @todo What does this do?
     // Create the tags field
     /** @var FormControlAutocomplete $tags_control */
     $form->append(FormControlLabel::wrap(_t('Tags, separated by, commas'), $tags_control = FormControlAutocomplete::create('tags', null, array('style' => 'width:100%;margin:0px 0px 20px;', 'class' => 'check-change full-width'), array('allow_new' => true, 'init_selection' => true)))->set_properties(array('style' => 'width:100%;margin:0px 0px 20px;')));
     $tags = (array) $this->get_tags();
     array_walk($tags, function (&$element, $key) {
         $element->term_display = MultiByte::strpos($element->term_display, ',') === false ? $element->term_display : $element->tag_text_searchable;
     });
     $tags_control->set_value(implode(',', $tags));
     $tags_control->set_ajax(URL::auth_ajax('tag_list'));
     // Create the splitter
     /** @var FormControlTabs $publish_controls  */
     $publish_controls = $form->append(FormControlTabs::create('publish_controls')->set_setting('wrap', '%s')->set_setting('class_each', 'container'));
     // Create the publishing controls
     // pass "false" to list_post_statuses() so that we don't include internal post statuses
     $statuses = Post::list_post_statuses($this);
     unset($statuses[array_search('any', $statuses)]);
     $statuses = Plugins::filter('admin_publish_list_post_statuses', $statuses);
     /** @var FormControlFieldset $settings */
     $settings = $publish_controls->append(FormControlFieldset::create('post_settings')->set_caption(_t('Settings')));
     $settings->append(FormControlLabel::wrap(_t('Content State'), FormControlSelect::create('status')->set_options(array_flip($statuses))->set_value($this->status)));
     // hide the minor edit checkbox if the post is new
     if ($newpost) {
         $settings->append(FormControlData::create('minor_edit')->set_value(false));
     } else {
         $settings->append(FormControlLabel::wrap(_t('Minor Edit'), FormControlCheckbox::create('minor_edit')->set_value(true)));
         $form->append(FormControlData::create('modified')->set_value($this->modified));
     }
     $settings->append(FormControlLabel::wrap(_t('Comments Allowed'), FormControlCheckbox::create('comments_enabled')->set_value($this->info->comments_disabled ? false : true)));
     $settings->append(FormControlLabel::wrap(_t('Publication Time'), FormControlText::create('pubdate')->set_value($this->pubdate->format('Y-m-d H:i:s'))));
     $settings->pubdate->set_helptext(_t('YYYY-MM-DD HH:MM:SS'));
     $settings->append(FormControlData::create('updated')->set_value($this->updated->int));
     $settings->append(FormControlLabel::wrap(_t('Content Address'), FormControlText::create('newslug')->set_value($this->slug)));
     // Create the button area
     $buttons = $form->append(FormControlFieldset::create('buttons', null, array('class' => array('container', 'buttons', 'publish'))));
     // What buttons should we have?
     $require_any = array('own_posts' => 'create', 'post_any' => 'create', 'post_' . Post::type_name($this->content_type) => 'create');
     $show_buttons = array();
     if ($newpost) {
         if (User::identify()->can_any($require_any)) {
             $show_buttons['save'] = true;
             $show_buttons['publish'] = true;
         }
     } else {
         if (ACL::access_check($this->get_access(), 'edit')) {
             if ($this->status == Post::status('draft')) {
                 $show_buttons['publish'] = true;
             }
             $show_buttons['save'] = true;
         }
         if (ACL::access_check($this->get_access(), 'delete')) {
             $show_buttons['delete'] = true;
         }
     }
     $show_buttons = Plugins::filter('publish_form_buttons', $show_buttons, $this);
     if (isset($show_buttons['delete'])) {
         // Create the Delete button
         $buttons->append(FormControlSubmit::create('delete', null, array('class' => 'three columns'))->set_caption(_t('Delete'))->on_success(array($this, 'form_publish_delete')));
     }
     if (isset($show_buttons['save'])) {
         // Create the Save button
         $buttons->append(FormControlSubmit::create('save', null, array('class' => 'three columns'))->set_caption(_t('Save')));
     }
     if (isset($show_buttons['publish'])) {
         // Create the Publish button
         $buttons->append(FormControlSubmit::create('publish', null, array('class' => 'three columns'))->set_caption(_t('Publish'))->add_validator(function ($value, FormControlSubmit $control, FormUI $form) {
             $form->status->set_value(Post::status('published'));
             $allow = Plugins::filter('post_publish_allow', true, $this);
             if (!$allow) {
                 return array('Publishing has been denied');
             }
             return array();
         }));
     }
     // Add required hidden controls
     $form->append(FormControlData::create('content_type', null, array('id' => 'content_type'))->set_value($this->content_type));
     $form->append(FormControlData::create('post_id', null, array('id' => 'id'))->set_value($this->id));
     $form->append(FormControlData::create('slug', null, array('id' => 'originalslug'))->set_value($this->slug));
     $form->on_success(array($this, 'form_publish_success'));
     // Let plugins alter this form
     Plugins::act('form_publish', $form, $this, $context);
     $content_types = array_flip(Post::list_active_post_types());
     Plugins::act('form_publish_' . Utils::slugify($content_types[$this->content_type], '_'), $form, $this, $context);
     // Return the form object
     return $form;
 }
示例#5
0
 public function __construct()
 {
     $self = $this;
     FormUI::register('add_user', function (FormUI $form, $name) use($self) {
         $form->set_settings(array('use_session_errors' => true));
         $form->append(FormControlText::create('username')->set_properties(array('class' => 'columns three', 'placeholder' => _t('Username')))->add_validator('validate_username')->add_validator('validate_required'));
         $form->append(FormControlText::create('email')->set_properties(array('class' => 'columns four', 'placeholder' => _t('E-Mail')))->add_validator('validate_email')->add_validator('validate_required'));
         $password = FormControlPassword::create('password')->set_properties(array('class' => 'columns three', 'placeholder' => _t('Password')))->add_validator('validate_required');
         $form->append($password);
         $form->append(FormControlPassword::create('password_again')->set_properties(array('class' => 'columns three', 'placeholder' => _t('Password Again')))->add_validator('validate_same', $password));
         $form->append(FormControlSubmit::create('newuser')->set_caption('Add User'));
         $form->add_validator(array($self, 'validate_add_user'));
         $form->on_success(array($self, 'do_add_user'));
     });
     FormUI::register('delete_users', function (FormUI $form, $name) use($self) {
         $form->set_settings(array('use_session_errors' => true));
         $form->append(FormControlAggregate::create('deletion_queue')->set_selector('.select_user')->label('Select All'));
         $author_list = Users::get_all();
         $authors[0] = _t('nobody');
         foreach ($author_list as $author) {
             $authors[$author->id] = $author->displayname;
         }
         $form->append(FormControlSelect::create('reassign')->set_options($authors));
         $form->append(FormControlSubmit::create('delete_selected')->set_caption(_t('Delete Selected')));
         $form->add_validator(array($self, 'validate_delete_users'));
         $form->on_success(array($self, 'do_delete_users'));
     });
     FormUI::register('edit_user', function (FormUI $form, $name, $form_type, $data) use($self) {
         $form->set_settings(array('use_session_errors' => true));
         $edit_user = $data['edit_user'];
         $field_sections = array('user_info' => _t('User Information'), 'change_password' => _t('Change Password'), 'regional_settings' => _t('Regional Settings'), 'dashboard' => _t('Dashboard'));
         // Create a tracker for who we are dealing with
         $form->append(FormControlData::create('edit_user')->set_value($edit_user->id));
         // Generate sections
         foreach ($field_sections as $key => $name) {
             $fieldset = $form->append('wrapper', $key, $name);
             $fieldset->add_class('container main settings');
             $fieldset->append(FormControlStatic::create($key)->set_static('<h2 class="lead">' . htmlentities($name, ENT_COMPAT, 'UTF-8') . '</h2>'));
         }
         // User Info
         $displayname = FormControlText::create('displayname')->set_value($edit_user->displayname);
         $form->user_info->append(FormControlLabel::wrap(_t('Display Name'), $displayname));
         $username = FormControlText::create('username')->add_validator('validate_username', $edit_user->username)->set_value($edit_user->username);
         $form->user_info->append(FormControlLabel::wrap(_t('User Name'), $username));
         $email = FormControlText::create('email')->add_validator('validate_email')->set_value($edit_user->email);
         $form->user_info->append(FormControlLabel::wrap(_t('Email'), $email));
         $imageurl = FormControlText::create('imageurl')->set_value($edit_user->info->imageurl);
         $form->user_info->append(FormControlLabel::wrap(_t('Portrait URL'), $imageurl));
         // Change Password
         $password1 = FormControlPassword::create('password1', null, array('autocomplete' => 'off'))->set_value('');
         $form->change_password->append(FormControlLabel::wrap(_t('New Password'), $password1));
         $password2 = FormControlPassword::create('password2', null, array('autocomplete' => 'off'))->set_value('');
         $form->change_password->append(FormControlLabel::wrap(_t('New Password Again'), $password2));
         $delete = $self->handler_vars->filter_keys('delete');
         // don't validate password match if action is delete
         if (!isset($delete['delete'])) {
             $password2->add_validator('validate_same', $password1, _t('Passwords must match.'));
         }
         // Regional settings
         $timezones = \DateTimeZone::listIdentifiers();
         $timezones = array_merge(array_combine(array_values($timezones), array_values($timezones)));
         $locale_tz = FormControlSelect::create('locale_tz', null, array('multiple' => false))->set_options($timezones)->set_value($edit_user->info->locale_tz);
         $form->regional_settings->append(FormControlLabel::wrap(_t('Timezone'), $locale_tz));
         $locale_date_format = FormControlText::create('locale_date_format')->set_value($edit_user->info->locale_date_format);
         $form->regional_settings->append(FormControlLabel::wrap(_t('Date Format'), $locale_date_format));
         $edit_user_info = $edit_user->info;
         if (isset($edit_user_info->locale_date_format) && $edit_user_info->locale_date_format != '') {
             $current = DateTime::create()->get($edit_user_info->locale_date_format);
         } else {
             $current = DateTime::create()->date;
         }
         $locale_date_format->set_helptext(_t('See <a href="%s">php.net/date</a> for details. Current format: %s', array('http://php.net/date', $current)));
         $locale_time_format = FormControlText::create('locale_time_format')->set_value($edit_user_info->locale_time_format);
         $form->regional_settings->append(FormControlLabel::wrap(_t('Time Format'), $locale_time_format));
         if (isset($edit_user_info->locale_time_format) && $edit_user_info->locale_time_format != '') {
             $current = DateTime::create()->get($edit_user_info->locale_time_format);
         } else {
             $current = DateTime::create()->time;
         }
         $locale_time_format->set_helptext(_t('See <a href="%s">php.net/date</a> for details. Current format: %s', array('http://php.net/date', $current)));
         $locales = array_merge(array('' => _t('System default') . ' (' . Options::get('locale', 'en-us') . ')'), array_combine(Locale::list_all(), Locale::list_all()));
         $locale_lang = FormcontrolSelect::create('locale_lang', null, array('multiple' => false))->set_options($locales)->set_value($edit_user_info->locale_lang);
         $form->regional_settings->append(FormControlLabel::wrap(_t(' Language'), $locale_lang));
         $spam_count = FormControlCheckbox::create('dashboard_hide_spam_count')->set_helptext(_t('Hide the number of SPAM comments on your dashboard.'))->set_value($edit_user_info->dashboard_hide_spam_count);
         $form->dashboard->append(FormControlLabel::wrap(_t('Hide Spam Count'), $spam_count));
         // Groups
         if (User::identify()->can('manage_groups')) {
             $fieldset = $form->append(FormControlWrapper::create('groups'));
             $fieldset->add_class('container main settings');
             $fieldset->append(FormControlStatic::create('groups_title')->set_static('<h2 class="lead">' . htmlentities(_t('Groups'), ENT_COMPAT, 'UTF-8') . '</h2>'));
             $fieldset->append(FormControlCheckboxes::create('user_group_membership')->set_options(Utils::array_map_field(UserGroups::get_all(), 'name', 'id'))->set_value($edit_user->groups));
         }
         // Controls
         $controls = $form->append(FormControlWrapper::create('page_controls')->add_class('container controls transparent'));
         $apply = $controls->append(FormControlSubmit::create('apply')->set_caption(_t('Apply')));
         // Get author list
         $author_list = Users::get_all();
         $authors[0] = _t('nobody');
         foreach ($author_list as $author) {
             $authors[$author->id] = $author->displayname;
         }
         unset($authors[$edit_user->id]);
         // We can't reassign this user's posts to themselves if we're deleting them
         $reassign = FormControlSelect::create('reassign')->set_options($authors);
         $reassign_label = FormControlLabel::wrap(_t('Reassign posts to:'), $reassign)->set_settings(array('wrap' => '<span class="reassigntext">%s</span>'));
         $controls->append($reassign_label);
         $controls->append(FormControlStatic::create('conjunction')->set_static(_t('and'))->set_settings(array('wrap' => '<span class="conjunction">%s</span>')));
         $delete = $controls->append(FormControlSubmit::create('delete')->set_caption(_t('Delete'))->set_settings(array('wrap' => '<span>%s</span>'))->add_class('button'));
         $delete->on_success(array($self, 'edit_user_delete'));
         $delete->add_validator(array($self, 'validate_delete_user'));
         $apply->on_success(array($self, 'edit_user_apply'));
         $apply->add_validator(array($self, 'validate_edit_user'));
     });
     parent::__construct();
 }