$meta->set('meta_value_title', $value);
			$meta->save();
		}
		elseif($tag == 'authorid'){
			// This field is ignored, it's handled in the author case.
			continue;
		}
		elseif($tag == 'keywords'){
			// This field is actually an array of entries, separated by a comma.
			$values = array_map('trim', explode(',', $value));

			foreach($values as $tag){
				if(!$tag) continue;

				$machinevalue = \Core\str_to_url($tag);
				$meta = new PageMetaModel($page['site'], $page['baseurl'], 'keyword', $machinevalue);
				$meta->set('meta_value_title', $tag);
				$meta->save();
			}
		}
		else{
			// Everything else...
			if(!$value) continue;

			$meta = new PageMetaModel($page['site'], $page['baseurl'], strtolower($tag), '');
			// These don't have values set, just the value title, (which is the human readable version).
			$meta->set('meta_value_title', $value);
			$meta->save();
		}
	}
}
示例#2
0
	public function testAdmin(){

		// Basic Construct should return one result.
		/** @var PageModel $page */
		$page = PageModel::Construct('/admin');

		$this->assertInstanceOf('Model', $page);
		$this->assertInstanceOf('PageModel', $page);

		if(!$page->exists()){
			$this->markTestSkipped('/admin page does not exist, Core must not be installed.');
			return;
		}

		// Test that getAsArray works as expected.
		$asArray = $page->getAsArray();
		$this->assertInternalType('array', $asArray);
		$this->assertGreaterThan(0, sizeof($asArray));

		// And JSON
		$asJSON = $page->getAsJSON();
		$this->assertInternalType('string', $asJSON);
		$this->assertGreaterThan(0, strlen($asJSON));
		$this->assertInternalType('array', json_decode($asJSON, true));


		$this->assertArrayHasKey('title', $asArray);
		$this->assertArrayHasKey('title', $page);
		$this->assertEquals($asArray['title'], $page->get('title'));

		$this->assertArrayHasKey('expires', $asArray);
		$this->assertArrayHasKey('expires', $page);
		$this->assertEquals($asArray['expires'], $page->get('expires'));


		// Test that getLink behaves as expected.
		$this->assertNull($page->getLink('nonexistent'));

		// Pages also have the following linked records,
		// insertables, pagemetas, and rewrites.
		$this->assertInternalType('array', $page->getLink('Insertable'));
		$this->assertInternalType('array', $page->getLink('PageMeta'));
		$this->assertInternalType('array', $page->getLink('RewriteMap'));


		// Ensure that creating meta files works
		$meta_name = 'phpunit-test';
		$meta_val  = 'This is a test meta field from phpunit';
		$page->setMeta($meta_name, $meta_val);

		// Saving the page should also save this new meta.
		$this->assertTrue($page->save());

		// Verify this meta from a separate object
		// (because Construct will use the cached copy)
		$page2 = new PageModel('/admin');

		$this->assertTrue($page2->exists());

		$this->assertEquals($meta_val, $page2->getMetaValue($meta_name));

		// Remove the field from the original object now.
		$page->setMeta($meta_name, null);

		// Test that removing it does not remove the object's data until the parent is saved though!
		$meta = new PageMetaModel($page->get('site'), $page->get('baseurl'), $meta_name, '');
		$this->assertTrue($meta->exists());

		$this->assertTrue($page->save());

		$meta = new PageMetaModel($page->get('site'), $page->get('baseurl'), $meta_name, '');
		$this->assertFalse($meta->exists());
	}