/**
  * Add target site and checkout forms to cart block
  */
 public function action_block_content_addoncart($block)
 {
     $data = Session::get_set('cart_target', false);
     $target_site = isset($data['target_site']) ? $data['target_site'] : false;
     $block->cart_target_site = $target_site;
     // Build form for setting the target site
     // @todo Later: If user is logged in, offer saving locations for re-use
     $target_form = new FormUI(__CLASS__ . "_target");
     $target_form->append(FormControlLabel::wrap(_t("Install addons on this website"), FormControlText::create('target_site', 'session:cart_target')));
     $target_form->target_site->add_validator('validate_required');
     $target_form->target_site->add_validator('validate_url');
     $target_form->append(FormControlSubmit::create('save')->set_caption('Save')->add_class('save_button'));
     $target_form->on_success(array($this, "cart_callback"));
     // Build checkout form
     if ($target_site) {
         $target_site .= substr($target_site, -1) == '/' ? '' : '/';
         $checkout = new FormUI(__CLASS__ . "_checkout");
         $checkout->append(FormControlLabel::wrap(_t("Install addons to <span>%s</span>", array($target_site)), FormControlSubmit::create('checkout')->set_caption('Install')->add_class('proceed_button')));
         // Include JSON payload for the target site
         $cart = Session::get_set("addon_cart", false);
         $checkout->append(FormControlHidden::create('payload')->set_value(json_encode($cart)));
         // Point form to target site
         $checkout->set_properties(array('action' => $target_site . 'install_addons'));
         $block->checkout_form = $checkout;
     }
     $block->target_form = $target_form;
 }
Esempio n. 2
0
 /**
  * Handles AJAX requests from the dashboard
  */
 public function ajax_dashboard($handler_vars)
 {
     Utils::check_request_method(array('POST'));
     $this->create_theme();
     $this->get_additem_form();
     $available_modules = Plugins::filter('dashboard_block_list', array());
     $user_id = User::identify()->id;
     $dashboard_area = 'dashboard_' . $user_id;
     switch ($_POST['action']) {
         case 'updateModules':
             $modules = $_POST['moduleOrder'];
             $order = 0;
             foreach ($modules as $module) {
                 $order++;
                 DB::query('UPDATE {blocks_areas} SET display_order = :display_order WHERE block_id = :id AND area = :dashboardarea', array('display_order' => $order, 'id' => $module, 'dashboardarea' => $dashboard_area));
             }
             $ar = new AjaxResponse(200, _t('Modules updated.'));
             break;
         case 'addModule':
             $type = $_POST['module_name'];
             $title = $available_modules[$type];
             $block = new Block(array('title' => $title, 'type' => $type));
             $block->insert();
             $max_display_order = DB::get_value('SELECT max(display_order) FROM {blocks_areas} WHERE area = :dashboardarea and scope_id = 0;', array('dashboardarea' => $dashboard_area));
             $max_display_order++;
             DB::query('INSERT INTO {blocks_areas} (block_id, area, scope_id, display_order) VALUES (:block_id, :dashboardarea, 0, :display_order)', array('block_id' => $block->id, 'display_order' => $max_display_order, 'dashboardarea' => $dashboard_area));
             $ar = new AjaxResponse(200, _t('Added module %s.', array($title)));
             $ar->html('modules', $this->theme->fetch('dashboard_modules'));
             break;
         case 'removeModule':
             $block_id = $_POST['moduleid'];
             DB::delete('{blocks}', array('id' => $block_id));
             DB::delete('{blocks_areas}', array('block_id' => $block_id));
             $ar = new AjaxResponse(200, _t('Removed module.'));
             $ar->html('modules', $this->theme->fetch('dashboard_modules'));
             break;
         case 'configModule':
             $block_id = $_POST['moduleid'];
             $block = DB::get_row('SELECT * FROM {blocks} b WHERE b.id = :id', array('id' => $block_id), 'Block');
             /** Block $block */
             $form = $block->get_form();
             //				$form->_ajax = true;
             // @todo There's got to be a better way
             $form->set_settings(array('success_message' => '<p  class="form_message">' . _t('Module Configuration Saved.') . '</p>' . '<script type="text/javascript">window.setTimeout(function(){$(".form_message").fadeOut();}, 2000);</script>'));
             $form->append(FormControlHidden::create('moduleid', null, array('id' => 'moduleid'))->set_value($block->id));
             $form->append(FormControlHidden::create('action', null, array('id' => 'action'))->set_value('configModule'));
             $form->out();
             $form_id = $form->name;
             exit;
             break;
     }
     $ar->out();
 }