/** * 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; }
/** * 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(); }