1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace SilverStripe\Subsites\Tests; |
4
|
|
|
|
5
|
|
|
use SilverStripe\Admin\LeftAndMain; |
6
|
|
|
use SilverStripe\AssetAdmin\Controller\AssetAdmin; |
7
|
|
|
use SilverStripe\CMS\Controllers\CMSMain; |
8
|
|
|
use SilverStripe\CMS\Controllers\CMSPageEditController; |
9
|
|
|
use SilverStripe\Core\Config\Config; |
10
|
|
|
use SilverStripe\Dev\FunctionalTest; |
11
|
|
|
use SilverStripe\Security\Member; |
12
|
|
|
use SilverStripe\Subsites\Extensions\LeftAndMainSubsites; |
13
|
|
|
use SilverStripe\Subsites\Model\Subsite; |
14
|
|
|
use SilverStripe\Subsites\State\SubsiteState; |
15
|
|
|
|
16
|
|
|
class LeftAndMainSubsitesTest extends FunctionalTest |
17
|
|
|
{ |
18
|
|
|
protected static $fixture_file = 'SubsiteTest.yml'; |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* Avoid subsites filtering on fixture fetching. |
22
|
|
|
* @param string $className |
23
|
|
|
* @param string $identifier |
24
|
|
|
* @return \SilverStripe\ORM\DataObject |
25
|
|
|
*/ |
26
|
|
|
protected function objFromFixture($className, $identifier) |
27
|
|
|
{ |
28
|
|
|
Subsite::disable_subsite_filter(true); |
29
|
|
|
$obj = parent::objFromFixture($className, $identifier); |
30
|
|
|
Subsite::disable_subsite_filter(false); |
31
|
|
|
|
32
|
|
|
return $obj; |
33
|
|
|
} |
34
|
|
|
|
35
|
|
|
public function testSectionSites() |
36
|
|
|
{ |
37
|
|
|
$member = $this->objFromFixture(Member::class, 'subsite1member'); |
38
|
|
|
|
39
|
|
|
$cmsmain = singleton(CMSMain::class); |
40
|
|
|
$subsites = $cmsmain->sectionSites(true, 'Main site', $member); |
41
|
|
|
$this->assertDOSEquals([ |
|
|
|
|
42
|
|
|
['Title' => 'Subsite1 Template'] |
43
|
|
|
], $subsites, 'Lists member-accessible sites for the accessible controller.'); |
|
|
|
|
44
|
|
|
|
45
|
|
|
$assetadmin = singleton(AssetAdmin::class); |
46
|
|
|
$subsites = $assetadmin->sectionSites(true, 'Main site', $member); |
47
|
|
|
$this->assertDOSEquals([], $subsites, 'Does not list any sites for forbidden controller.'); |
|
|
|
|
48
|
|
|
|
49
|
|
|
$member = $this->objFromFixture(Member::class, 'editor'); |
50
|
|
|
|
51
|
|
|
$cmsmain = singleton(CMSMain::class); |
52
|
|
|
$subsites = $cmsmain->sectionSites(true, 'Main site', $member); |
53
|
|
|
$this->assertDOSContains([ |
|
|
|
|
54
|
|
|
['Title' => 'Main site'] |
55
|
|
|
], $subsites, 'Includes the main site for members who can access all sites.'); |
|
|
|
|
56
|
|
|
} |
57
|
|
|
|
58
|
|
|
public function testAccessChecksDontChangeCurrentSubsite() |
59
|
|
|
{ |
60
|
|
|
$this->logInAs('admin'); |
61
|
|
|
$ids = []; |
62
|
|
|
|
63
|
|
|
$subsite1 = $this->objFromFixture(Subsite::class, 'domaintest1'); |
64
|
|
|
$subsite2 = $this->objFromFixture(Subsite::class, 'domaintest2'); |
65
|
|
|
$subsite3 = $this->objFromFixture(Subsite::class, 'domaintest3'); |
66
|
|
|
$ids[] = $subsite1->ID; |
67
|
|
|
$ids[] = $subsite2->ID; |
68
|
|
|
$ids[] = $subsite3->ID; |
69
|
|
|
$ids[] = 0; |
70
|
|
|
|
71
|
|
|
// Enable session-based subsite tracking. |
72
|
|
|
SubsiteState::singleton()->setUseSessions(true); |
73
|
|
|
|
74
|
|
|
foreach ($ids as $id) { |
75
|
|
|
Subsite::changeSubsite($id); |
76
|
|
|
$this->assertEquals($id, SubsiteState::singleton()->getSubsiteId()); |
77
|
|
|
|
78
|
|
|
$left = new LeftAndMain(); |
79
|
|
|
$this->assertTrue($left->canView(), "Admin user can view subsites LeftAndMain with id = '$id'"); |
80
|
|
|
$this->assertEquals( |
81
|
|
|
$id, |
82
|
|
|
SubsiteState::singleton()->getSubsiteId(), |
83
|
|
|
'The current subsite has not been changed in the process of checking permissions for admin user.' |
84
|
|
|
); |
85
|
|
|
} |
86
|
|
|
} |
87
|
|
|
|
88
|
|
|
public function testShouldChangeSubsite() |
89
|
|
|
{ |
90
|
|
|
$l = new LeftAndMain(); |
91
|
|
|
|
92
|
|
|
Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', false); |
93
|
|
|
$this->assertTrue($l->shouldChangeSubsite(CMSPageEditController::class, 0, 5)); |
94
|
|
|
$this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 0, 0)); |
95
|
|
|
$this->assertTrue($l->shouldChangeSubsite(CMSPageEditController::class, 1, 5)); |
96
|
|
|
$this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 1, 1)); |
97
|
|
|
|
98
|
|
|
Config::modify()->set(CMSPageEditController::class, 'treats_subsite_0_as_global', true); |
99
|
|
|
$this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 0, 5)); |
100
|
|
|
$this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 0, 0)); |
101
|
|
|
$this->assertTrue($l->shouldChangeSubsite(CMSPageEditController::class, 1, 5)); |
102
|
|
|
$this->assertFalse($l->shouldChangeSubsite(CMSPageEditController::class, 1, 1)); |
103
|
|
|
} |
104
|
|
|
|
105
|
|
|
public function testCanAccessWithPassedMember() |
106
|
|
|
{ |
107
|
|
|
$memberID = $this->logInWithPermission('ADMIN'); |
108
|
|
|
$member = Member::get()->byID($memberID); |
109
|
|
|
|
110
|
|
|
/** @var LeftAndMain&LeftAndMainSubsites $leftAndMain */ |
111
|
|
|
$leftAndMain = new LeftAndMain(); |
112
|
|
|
$this->assertTrue($leftAndMain->canAccess($member)); |
113
|
|
|
} |
114
|
|
|
} |
115
|
|
|
|
This function has been deprecated. The supplier of the function has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.