/** * Controller view to install 1 widget into one selected area, be that area a skin, or page template. * * @return int */ public function instance_install(){ $view = $this->getView(); $request = $this->getPageRequest(); if(!\Core\user()->checkAccess('p:/core/widgets/manage')){ return View::ERROR_ACCESSDENIED; } if(!$request->isPost()){ return View::ERROR_BADREQUEST; } // For the incoming options, I want an explicit NULL if it's empty. $template = (isset($_POST['template']) && $_POST['template'] != '') ? $_POST['template'] : null; $page_baseurl = (isset($_POST['page_baseurl']) && $_POST['page_baseurl'] != '') ? $_POST['page_baseurl'] : null; $widget_baseurl = (isset($_POST['widget_baseurl']) && $_POST['widget_baseurl'] != '') ? $_POST['widget_baseurl'] : null; $widgetarea = (isset($_POST['area']) && $_POST['area'] != '') ? $_POST['area'] : null; $wm = WidgetModel::Construct($widget_baseurl); $dat['site'] = $wm->get('site'); $dat['baseurl'] = $widget_baseurl; $dat['template'] = $template; $dat['page_baseurl'] = $page_baseurl; $dat['widgetarea'] = $widgetarea; if($template){ $counter = WidgetInstanceModel::Count(['template = ' . $template, 'widgetarea = ' . $widgetarea]); $w = new WidgetInstanceModel(); $w->setFromArray($dat); $w->set('weight', $counter + 1); $w->save(); \Core\set_message('Installed widget into requested template', 'success'); } elseif($page_baseurl){ $counter = WidgetInstanceModel::Count(['page_baseurl = ' . $page_baseurl, 'widgetarea = ' . $widgetarea]); $w = new WidgetInstanceModel(); $w->setFromArray($dat); $w->set('weight', $counter + 1); $w->save(); \Core\set_message('Installed widget into requested page', 'success'); } else{ \Core\set_message('Unknown request', 'error'); } if($page_baseurl){ \Core\redirect($page_baseurl); } else{ \Core\redirect('/widget/admin?template=' . $template); } }
public function widgetinstances_save(){ $view = $this->getView(); $request = $this->getPageRequest(); if(!\Core\user()->checkAccess('p:/core/widgets/manage')){ return View::ERROR_ACCESSDENIED; } if(!$request->isPost()){ return View::ERROR_BADREQUEST; } $counter = 0; $changes = ['created' => 0, 'updated' => 0, 'deleted' => 0]; $selected = $_POST['selected']; // For the incoming options, I want an explicit NULL if it's empty. $theme = $_POST['theme'] == '' ? null : $_POST['theme']; $skin = $_POST['skin'] == '' ? null : $_POST['skin']; $_POST['skin']; $template = $_POST['template'] == '' ? null : $_POST['template']; $baseurl = $_POST['page_baseurl'] == '' ? null : $_POST['page_baseurl']; foreach($_POST['widgetarea'] as $id => $dat){ // Merge in the global information for this request //$dat['theme'] = $theme; //$dat['skin'] = $skin; $dat['template'] = $template; $dat['page_baseurl'] = $baseurl; $dat['weight'] = ++$counter; $dat['access'] = $dat['widgetaccess']; $w = WidgetModel::Construct($dat['baseurl']); $dat['site'] = $w->get('site'); if(strpos($id, 'new') !== false){ $w = new WidgetInstanceModel(); $w->setFromArray($dat); $w->save(); $changes['created']++; } elseif(strpos($id, 'del-') !== false){ $w = new WidgetInstanceModel(substr($id, 4)); $w->delete(); // Reset the counter back down one notch since this was a deletion request. --$counter; $changes['deleted']++; } else{ $w = new WidgetInstanceModel($id); $w->setFromArray($dat); if($w->save()) $changes['updated']++; } } // foreach($_POST['widgetarea'] as $id => $dat) // Display some human friendly status message. if($changes['created'] || $changes['updated'] || $changes['deleted']){ $changetext = []; if($changes['created'] == 1) $changetext[] = 'One widget added'; elseif($changes['created'] > 1) $changetext[] = $changes['created'] . ' widgets added'; if($changes['updated'] == 1) $changetext[] = 'One widget updated'; elseif($changes['updated'] > 1) $changetext[] = $changes['updated'] . ' widgets updated'; if($changes['deleted'] == 1) $changetext[] = 'One widget deleted'; elseif($changes['deleted'] > 1) $changetext[] = $changes['deleted'] . ' widgets deleted'; \Core\set_message(implode('<br/>', $changetext), 'success'); } else{ \Core\set_message('t:MESSAGE_INFO_NO_CHANGES_PERFORMED'); } if($baseurl){ \Core\redirect($baseurl); } else{ \Core\redirect('/admin/widgets?selected=' . $selected); } }
/** * Internal function to parse and handle the configs in the component.xml file. * This is used for installations and upgrades. * * @param boolean $install Set to false to force uninstall/disable mode. * @param int $verbosity (default 0) 0: standard output, 1: real-time, 2: real-time verbose output. * * @return boolean | int * @throws InstallerException */ public function _parseWidgets($install = true, $verbosity = 0) { $overallChanges = []; $overallAction = $install ? 'Installing' : 'Uninstalling'; $overallActioned = $install ? 'Installed' : 'Uninstalled'; $overallSet = $install ? 'Set' : 'Remove'; Core\Utilities\Logger\write_debug($overallAction . ' Widgets for ' . $this->getName()); if(!$install){ die('@todo Support uninstalling widgets via _parseWidgets!'); } // I need to get the schema definitions first. $node = $this->_xmlloader->getElement('widgets'); //$prefix = $node->getAttribute('prefix'); // Now, get every table under this node. foreach ($node->getElementsByTagName('widget') as $subnode) { $baseurl = $subnode->getAttribute('baseurl'); $installable = $subnode->getAttribute('installable'); $title = $subnode->getAttribute('title'); if($verbosity == 2){ CLI::PrintActionStart($overallAction . ' widget ' . $baseurl . ' ("' . $title . '")'); } // Insert/Update the defaults for an entry in the database. $m = new WidgetModel($baseurl); $action = ($m->exists()) ? 'Updated' : 'Added'; if (!$m->get('title')){ // Only set the title if it was previously unset $m->set('title', $title); } $m->set('installable', $installable); $saved = $m->save(); if ($saved){ if($verbosity == 2){ CLI::PrintActionStatus(true); } $changes[] = $action . ' widget [' . $m->get('baseurl') . ']'; // Is this a new widget and it's an admin installable one? // If so install it to the admin widgetarea! if($action == 'Added' && $installable == '/admin'){ $weight = WidgetInstanceModel::Count( [ 'widgetarea' => 'Admin Dashboard', 'page_baseurl' => '/admin', ] ) + 1; $wi = new WidgetInstanceModel(); $wi->setFromArray( [ 'baseurl' => $m->get('baseurl'), 'page_baseurl' => '/admin', 'widgetarea' => 'Admin Dashboard', 'weight' => $weight ] ); $wi->save(); $overallChanges[] = $overallActioned . ' widget ' . $m->get('baseurl') . ' into the admin dashboard!'; } } else{ if($verbosity == 2){ CLI::PrintActionStatus('skip'); } } } return (sizeof($overallChanges) > 0) ? $overallChanges : false; }