-
Notifications
You must be signed in to change notification settings - Fork 453
/
SiteSelector.php
82 lines (70 loc) · 2.24 KB
/
SiteSelector.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
namespace Concrete\Core\Form\Service\Widget;
use Concrete\Core\Entity\Site\SiteTree;
use Concrete\Core\Site\Tree\TreeInterface;
use Core;
use Page;
use Permissions;
class SiteSelector
{
/**
* Creates form fields and JavaScript page chooser for choosing a site.
* <code>
* $dh->selectSite('pageID', '1'); // Selects the default site.
* </code>.
*
* @param $fieldName
* @param bool|int $cID
*
* @return string
*/
public function selectSite($fieldName, $siteID = false, $includeCurrent = false, $includeAll = false)
{
$v = \View::getInstance();
$v->requireAsset('selectize');
$currentSelected = $siteID !== 'current' ? 'selected' : '';
$allSelected = $siteID === 'all' ? 'selected' : '';
$current = t('Current Site');
$all = t('All Sites');
$defaults = t('Default');
$specific = t('Sites');
$sites = '';
foreach(\Core::make('site')->getList() as $site) {
$sp = new \Permissions($site);
if ($sp->canViewSiteInSelector()) {
$sites .= '<option ' . ($site->getSiteID() == $siteID ? 'selected' : '') . ' value="' . $site->getSiteID() . '">' . $site->getSiteName() . '</option>';
}
}
$currentLine = '';
$allLine = '';
if ($includeCurrent) {
$currentLine = "<option value=\"current\" {$currentSelected}>{$current}</option>";
}
if ($includeAll) {
$allLine = "<option value=\"all\" {$allSelected}>{$all}</option>";
}
if (!$includeAll && !$includeCurrent) {
$html = <<<EOL
<select name="siteID" data-select="search-sites">
{$sites}
</select>
EOL;
} else {
$html = <<<EOL
<select name="siteID" data-select="search-sites">
<optgroup label="{$defaults}">
{$currentLine}
{$allLine}
</optgroup>
<optgroup label="{$specific}">
{$sites}
</optgroup>
</select>
EOL;
}
$html .= <<<EOL
<script type="text/javascript">$(function() { $('select[data-select=search-sites]').selectize(); });</script>
EOL;
return $html;
}
}