muser-8.x-1.x-dev/modules/custom/muser_system/src/Controller/BasicController.php
modules/custom/muser_system/src/Controller/BasicController.php
<?php
namespace Drupal\muser_system\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Link;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RequestStack;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\flag\Entity\Flagging;
use Drupal\node\Entity\Node;
use Drupal\node\NodeInterface;
use Drupal\views\Views;
/**
* Controller for basic Muser pages.
*/
class BasicController extends ControllerBase {
/**
* @var ConfigFactoryInterface
*/
protected $configFactory;
/**
* @var Symfony\Component\HttpFoundation\RequestStack
*/
private $requestStack;
/**
* BasicController constructor.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
*/
public function __construct(ConfigFactoryInterface $config_factory, RequestStack $request_stack) {
$this->configFactory = $config_factory;
$this->requestStack = $request_stack;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('config.factory'),
$container->get('request_stack')
);
}
/**
* Show essay guidelines.
*
* @return array
* Build array.
*/
public function essayGuidelines() {
$build = [
'#cache' => [
'tags' => ['config:muser_system.settings'],
],
];
$config = $this->configFactory->get('muser_system.settings');
if (!$message = $config->get('application_essay_guidelines')) {
return $build;
}
$markup = check_markup($message['value'], $message['format']);
/** @var \Drupal\Core\Utility\Token $token_service */
$token_service = \Drupal::token();
$markup = $token_service->replace($markup);
$build[] = [
'#type' => 'markup',
'#markup' => '<div class="essay-guidelines__text">'
. $markup
. '</div>',
'#cache' => [
'tags' => ['config:muser_system.settings'],
],
];
return $build;
}
/**
* @param string $config_key
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function configItemWithTokens(string $config_key) {
$value = $this->requestStack->getCurrentRequest()->request->get('value');
if (!$format = $this->requestStack->getCurrentRequest()->request->get('format')) {
$format = 'raw';
}
switch ($config_key) {
case 'mentor_request_email_body':
case 'mentor_grant_email_body':
case 'new_project_email_body':
case 'post_projects_start_email_body':
case 'post_projects_end_email_body':
case 'review_applications_start_email_body':
case 'review_applications_end_email_body':
case 'after_round_email_body':
case 'student_accepted_email_body':
case 'student_rejected_email_body':
case 'contract_reminder_mentor_start_email_body':
case 'contract_reminder_mentor_end_email_body':
case 'contract_reminder_student_start_email_body':
case 'contract_reminder_student_end_email_body':
// Valid configuration setting to preview-- do nothing.
break;
default:
return new Response($this->t('Invalid configuration setting.'));
}
// Load sample data.
$node = $this->getSampleProject();
$account = $node->getOwner();
$muser_data['project'] = $node;
$muser_data['round'] = muser_project_get_current_round(TRUE);
$muser_data['flagging'] = $this->getSampleFlagging();
/** @var \Drupal\Core\Utility\Token $token_service */
$token_service = \Drupal::token();
$text = $token_service->replace($value, [
'user' => $account,
'node' => $node,
'muser' => $muser_data,
]);
if ($format == 'raw') {
$text = nl2br(htmlentities($text, NULL, NULL, FALSE));
}
else {
$text = check_markup($text, $format);
}
return new Response($text);
}
private function getSampleProject() {
$nids = \Drupal::entityQuery('node')
->condition('status', NodeInterface::PUBLISHED)
->condition('type', 'project')
->condition('uid', 1, '<>')
->sort('created', 'DESC')
->execute();
$nid = ($nids) ? reset($nids) : NULL;
if ($nid) {
return Node::load($nid);
}
return NULL;
}
private function getSampleFlagging() {
$query = \Drupal::database()->select('muser_applications', 'ma');
$query->addField('ma', 'fid');
$query->condition('ma.is_submitted', 1);
$query->orderBy('ma.fid', 'DESC');
if ($fid = $query->execute()->fetchField()) {
return Flagging::load($fid);
}
return NULL;
}
/**
* Show reports landing page.
*
* @return array
* Build array.
*/
public function reports() {
$reports = [
[
'title' => $this->t('Applications'),
'view' => 'administer_applications',
'display' => 'page_1',
'export_display' => 'export',
],
[
'title' => $this->t('Application counts'),
'view' => 'application_counts',
'display' => 'page_1',
'export_display' => 'export',
],
];
$report_links = [];
foreach ($reports as $report) {
$report_links[] = [
'link' => Link::createFromRoute($report['title'], 'view.' . $report['view'] . '.' . $report['display'])->toString(),
'export' => Link::createFromRoute($this->t('Download CSV'), 'view.' . $report['view'] . '.' . $report['export_display'])->toString(),
];
} // Loop thru reports.
$round_links = [];
$view = Views::getView('rounds');
$view->setDisplay('page_1');
$view->setCurrentPage(0);
$view->render();
if ($view->result) {
foreach ($view->result as $row) {
$round = [
'name' => $row->_entity->label(),
'links' => [],
];
if ($row->_entity->field_is_current->value) {
$round['name'] .= ' (' . $this->t('Current') . ')';
}
$options = [
'round' => $row->_entity->id(),
];
foreach ($reports as $report) {
$round['links'][] = [
'link' => Link::createFromRoute($report['title'], 'view.' . $report['view'] . '.' . $report['display'], $options)->toString(),
'export' => Link::createFromRoute($this->t('CSV'), 'view.' . $report['view'] . '.' . $report['export_display'], $options)->toString(),
];
} // Loop thru reports.
$round_links[] = $round;
} // Loop thru rows.
} // Got rounds>
return [
'#theme' => 'muser_reports',
'#report_links' => $report_links,
'#round_links' => $round_links,
];
}
}
