Skip to content

Commit

Permalink
fixing single page bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
aembler committed Mar 5, 2015
1 parent 87bce54 commit 192aca4
Show file tree
Hide file tree
Showing 10 changed files with 297 additions and 9 deletions.
239 changes: 239 additions & 0 deletions tests/tests/Core/Page/PageControllerTest.php
@@ -0,0 +1,239 @@
<?php

/**
* Created by PhpStorm.
* User: andrew
* Date: 6/10/14
* Time: 7:47 AM
*/

class PageControllerTest extends PageTestCase
{
public function setUp()
{
parent::setUp();
$env = \Concrete\Core\Foundation\Environment::get();
$env->clearOverrideCache();
}
protected function addPage1()
{
$home = Page::getByID(HOME_CID);
$pt = PageType::getByID(1);
$template = PageTemplate::getByID(1);
$page = $home->add($pt, array(
'uID'=>1,
'cName'=> 'Test page',
'pTemplateID' => $template->getPageTemplateID()
));
return $page;
}

protected function addPage2()
{
$home = Page::getByID(HOME_CID);
PageType::add(array(
'handle' => 'alternate',
'name' => 'Alternate'
));
$pt = PageType::getByID(2);
$template = PageTemplate::getByID(1);
$page = $home->add($pt, array(
'uID'=>1,
'cName'=> 'Test page',
'pTemplateID' => $template->getPageTemplateID()
));
return $page;
}

public function testBasicPageController()
{
$page = $this->addPage1();
$controller = $page->getPageController();
$this->assertEquals('Concrete\Core\Page\Controller\PageController', get_class($controller));
}

public function testPageTypeController()
{
$page = $this->addPage1();
require('fixtures/concrete/basic.php');
$controller = $page->getPageController();
$this->assertEquals('Concrete\Controller\PageType\Basic', get_class($controller));
$this->assertInstanceOf('Concrete\Core\Page\Controller\PageTypeController', $controller);
}

public function testPageTypeControllerOverride()
{
$page = $this->addPage2();

$root = realpath(DIR_BASE_CORE . '/../application');
@mkdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_TYPES, 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/alternate.php',
$root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_TYPES . '/alternate.php');

$controller = $page->getPageController();

@unlink($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_TYPES . '/alternate.php');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_TYPES);

$this->assertEquals('Application\Controller\PageType\Alternate', get_class($controller));

}

public function testSinglePageController()
{
SinglePage::add('/dashboard/reports/forms');
$reportsPage = Page::getByPath('/dashboard/reports/forms');

$this->assertInstanceOf('\Concrete\Controller\SinglePage\Dashboard\Reports\Forms', $reportsPage->getPageController());
$this->assertInstanceOf('\Concrete\Core\Page\Controller\DashboardPageController', $reportsPage->getPageController());
}

public function testSinglePageControllerOverride()
{

$root = realpath(DIR_BASE_CORE . '/../application');
if (!is_dir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/dashboard/reports')) {
mkdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/dashboard/reports', 0777, true);
}
copy(dirname(__FILE__) . '/fixtures/application/forms.php',
$root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/dashboard/reports/forms.php');

SinglePage::add('/dashboard/reports/forms');
$reportsPage = Page::getByPath('/dashboard/reports/forms');
$controller = $reportsPage->getPageController();

unlink($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/dashboard/reports/forms.php');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/dashboard/reports');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/dashboard');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS);

$this->assertEquals('Application\Controller\SinglePage\Dashboard\Reports\Forms', get_class($controller));
$this->assertInstanceOf('\Concrete\Controller\SinglePage\Dashboard\Reports\Forms', $controller);
$this->assertInstanceOf('\Concrete\Core\Page\Controller\DashboardPageController', $controller);
}


public function testPackagedSinglePageViewPhp()
{

$pkg = new Package();
$pkg->pkgHandle = 'awesome_package';
$pkg->pkgID = 1;
$loader = \Concrete\Core\Foundation\ClassLoader::getInstance();
$loader->registerPackage($pkg);

$root = realpath(DIR_BASE_CORE . '/../packages');
@mkdir($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/package/foo.php',
$root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@mkdir($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson/foo', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/views/foo.php',
$root . '/awesome_package/' . DIRNAME_PAGES . '/testerson/foo/view.php');

SinglePage::add('/testerson/foo', $pkg);
$fooPage = Page::getByPath('/testerson/foo');
$fooPage->pkgHandle = 'awesome_package';
$controller = $fooPage->getPageController();

@unlink($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@rmdir($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson');
@rmdir($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS);
@unlink($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson/foo/view.php');
@rmdir($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson/foo');
@rmdir($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson');
@rmdir($root . '/awesome_package/' . DIRNAME_PAGES);
@rmdir($root . '/awesome_package');

$this->assertEquals('Concrete\Package\AwesomePackage\Controller\SinglePage\Testerson\Foo', get_class($controller));
$this->assertInstanceOf('\Concrete\Core\Page\Controller\PageController', $controller);

}
public function testPackagedSinglePageViewNoPhp()
{

$pkg = new Package();
$pkg->pkgHandle = 'awesome_package';
$pkg->pkgID = 1;
$loader = \Concrete\Core\Foundation\ClassLoader::getInstance();
$loader->registerPackage($pkg);

$root = realpath(DIR_BASE_CORE . '/../packages');
@mkdir($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/package/foo.php',
$root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@mkdir($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/views/foo.php',
$root . '/awesome_package/' . DIRNAME_PAGES . '/testerson/foo.php');

SinglePage::add('/testerson/foo', $pkg);
$fooPage = Page::getByPath('/testerson/foo');
$fooPage->pkgHandle = 'awesome_package';
$controller = $fooPage->getPageController();

@unlink($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@rmdir($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson');
@rmdir($root . '/awesome_package/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS);
@unlink($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson/foo.php');
@rmdir($root . '/awesome_package/' . DIRNAME_PAGES . '/testerson');
@rmdir($root . '/awesome_package/' . DIRNAME_PAGES);
@rmdir($root . '/awesome_package');

$this->assertEquals('Concrete\Package\AwesomePackage\Controller\SinglePage\Testerson\Foo', get_class($controller));
$this->assertInstanceOf('\Concrete\Core\Page\Controller\PageController', $controller);

}
public function testApplicableSinglePageViewPhp()
{

$root = realpath(DIR_BASE_CORE . '/../application');
@mkdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/foo.php',
$root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@mkdir($root . '/' . DIRNAME_PAGES . '/testerson/foo', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/views/foo.php',
$root . '/' . DIRNAME_PAGES . '/testerson/foo/view.php');

SinglePage::add('/testerson/foo');
$fooPage = Page::getByPath('/testerson/foo');
$controller = $fooPage->getPageController();

@unlink($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS);
@unlink($root . '/' . DIRNAME_PAGES . '/testerson/foo/view.php');
@rmdir($root . '/' . DIRNAME_PAGES . '/testerson/foo');
@rmdir($root . '/' . DIRNAME_PAGES . '/testerson');

$this->assertEquals('Application\Controller\SinglePage\Testerson\Foo', get_class($controller));
$this->assertInstanceOf('\Concrete\Core\Page\Controller\PageController', $controller);

}


public function testApplicableSinglePageViewNoPhp()
{

$root = realpath(DIR_BASE_CORE . '/../application');
@mkdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/foo.php',
$root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@mkdir($root . '/' . DIRNAME_PAGES . '/testerson', 0777, true);
@copy(dirname(__FILE__) . '/fixtures/application/views/foo.php',
$root . '/' . DIRNAME_PAGES . '/testerson/foo.php');

SinglePage::add('/testerson/foo');
$fooPage = Page::getByPath('/testerson/foo');
$controller = $fooPage->getPageController();

@unlink($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson/foo.php');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . '/testerson');
@rmdir($root . '/' . DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS);
@unlink($root . '/' . DIRNAME_PAGES . '/testerson/foo.php');
@rmdir($root . '/' . DIRNAME_PAGES . '/testerson');

$this->assertEquals('Application\Controller\SinglePage\Testerson\Foo', get_class($controller));
$this->assertInstanceOf('\Concrete\Core\Page\Controller\PageController', $controller);

}

}
9 changes: 9 additions & 0 deletions tests/tests/Core/Page/fixtures/application/alternate.php
@@ -0,0 +1,9 @@
<?php

namespace Application\Controller\PageType;
use Concrete\Core\Page\Controller\PageTypeController;
class Alternate extends PageTypeController
{


}
9 changes: 9 additions & 0 deletions tests/tests/Core/Page/fixtures/application/foo.php
@@ -0,0 +1,9 @@
<?php

namespace Application\Controller\SinglePage\Testerson;
use Concrete\Core\Page\Controller\PageController;
class Foo extends PageController
{


}
9 changes: 9 additions & 0 deletions tests/tests/Core/Page/fixtures/application/forms.php
@@ -0,0 +1,9 @@
<?php

namespace Application\Controller\SinglePage\Dashboard\Reports;
use Concrete\Controller\SinglePage\Dashboard\Reports\Forms as CoreDashboardPageController;
class Forms extends CoreDashboardPageController
{


}
1 change: 1 addition & 0 deletions tests/tests/Core/Page/fixtures/application/views/foo.php
@@ -0,0 +1 @@
Nothing.
9 changes: 9 additions & 0 deletions tests/tests/Core/Page/fixtures/concrete/basic.php
@@ -0,0 +1,9 @@
<?php

namespace Concrete\Controller\PageType;
use Concrete\Core\Page\Controller\PageTypeController;
class Basic extends PageTypeController
{


}
9 changes: 9 additions & 0 deletions tests/tests/Core/Page/fixtures/package/foo.php
@@ -0,0 +1,9 @@
<?php

namespace Concrete\Package\AwesomePackage\Controller\SinglePage\Testerson;
use Concrete\Core\Page\Controller\PageController;
class Foo extends PageController
{


}
1 change: 1 addition & 0 deletions web/concrete/src/Foundation/Environment.php
Expand Up @@ -56,6 +56,7 @@ public static function saveCachedEnvironmentObject() {
public function clearOverrideCache() {
@unlink(Config::get('concrete.cache.directory') . '/' . Config::get('concrete.cache.environment.file'));
$this->overridesScanned = false;
$this->cachedOverrides = array();
}


Expand Down
12 changes: 6 additions & 6 deletions web/concrete/src/Page/Page.php
Expand Up @@ -174,17 +174,14 @@ public function getPageController() {
$class = core_class('Controller\\PageType\\' . camelcase($ptHandle), $prefix);
} else if ($this->isGeneratedCollection()) {
$file = $this->getCollectionFilename();
$r = $env->getRecord(DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . $file, $this->getPackageHandle());
$prefix = $r->override ? true : $this->getPackageHandle();

if (strpos($file, '/' . FILENAME_COLLECTION_VIEW) !== false) {
$path = substr($file, 0, strpos($file, '/'. FILENAME_COLLECTION_VIEW));
} else {
$path = substr($file, 0, strpos($file, '.php'));
}

$r = $env->getRecord(DIRNAME_CONTROLLERS . '/' . DIRNAME_PAGE_CONTROLLERS . $path . '.php', $this->getPackageHandle());
$prefix = $r->override ? true : $this->getPackageHandle();
$class = core_class('Controller\\SinglePage\\' . str_replace('/','\\', camelcase($path, true)), $prefix);

}

if (isset($class) && class_exists($class)) {
Expand Down Expand Up @@ -233,7 +230,10 @@ public function getPackageID() {return $this->pkgID;}
* @return string
*/
public function getPackageHandle() {
return PackageList::getHandle($this->pkgID);
if (!isset($this->pkgHandle)) {
$this->pkgHandle = PackageList::getHandle($this->pkgID);
}
return $this->pkgHandle;
}

/**
Expand Down
8 changes: 5 additions & 3 deletions web/concrete/src/Page/Template.php
Expand Up @@ -109,9 +109,11 @@ public static function getByHandle($pTemplateHandle)

public static function getByID($pTemplateID)
{
$db = Database::get();
$em = $db->getEntityManager();
return $em->find('\Concrete\Core\Page\Template', $pTemplateID);
if ($pTemplateID) {
$db = Database::get();
$em = $db->getEntityManager();
return $em->find('\Concrete\Core\Page\Template', $pTemplateID);
}
}

public function delete()
Expand Down

0 comments on commit 192aca4

Please sign in to comment.