-
Notifications
You must be signed in to change notification settings - Fork 452
/
controller.php
103 lines (87 loc) · 3 KB
/
controller.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
namespace Concrete\Block\SwitchLanguage;
use Concrete\Core\Block\BlockController;
use Concrete\Core\Multilingual\Page\Section\Section;
use Concrete\Core\Routing\Redirect;
use Cookie;
use Session;
defined('C5_EXECUTE') or die("Access Denied.");
class Controller extends BlockController
{
protected $btInterfaceWidth = "500";
protected $btInterfaceHeight = "150";
protected $btTable = 'btSwitchLanguage';
public $helpers = array('form');
public function getBlockTypeDescription()
{
return t("Adds a front-end language switcher to your website.");
}
public function getBlockTypeName()
{
return t("Switch Language");
}
public function action_switch_language($currentPageID, $sectionID, $bID = false)
{
$lang = Section::getByID(intval($sectionID));
if (is_object($lang)) {
$page = \Page::getByID(intval($currentPageID));
if (!$page->isError()) {
$relatedID = $lang->getTranslatedPageID($page);
if ($relatedID) {
$pc = \Page::getByID($relatedID);
Redirect::page($pc)->send();
exit;
}
}
Redirect::page($lang)->send();
exit;
}
Redirect::to('/');
exit;
}
public function action_set_current_language()
{
if ($this->post('language')) {
$section = Section::getByID($this->post('language'));
if (is_object($section)) {
Session::set('multilingual_default_locale', $section->getLocale());
if ($this->post('remember')) {
Cookie::set('multilingual_default_locale', $section->getLocale(), time() + (60 * 60 * 24 * 365));
} else {
Cookie::clear('multilingual_default_locale');
}
}
}
$this->action_switch_language($this->post('rcID'), $this->post('language'));
}
public function add()
{
$this->set('label', t('Choose Language'));
}
public function view()
{
$this->requireAsset('javascript', 'jquery');
$ml = Section::getList();
$c = \Page::getCurrentPage();
$al = Section::getBySectionOfSite($c);
$languages = array();
$locale = null;
if ($al) {
$locale = $al->getLanguage();
}
if (!$locale) {
$locale = \Localization::activeLocale();
$al = Section::getByLocale($locale);
}
foreach ($ml as $m) {
$languages[$m->getCollectionID()] = $m->getLanguageText($locale);
}
$this->set('languages', $languages);
$this->set('languageSections', $ml);
$this->set('activeLanguage', $al? $al->getCollectionID() : null);
$dl = \Core::make('multilingual/detector');
$this->set('defaultLocale', $dl->getPreferredSection());
$this->set('locale', $locale);
$this->set('cID', $c->getCollectionID());
}
}