Permalink
Browse files

FEATURE Added MultipleOf and Modulus methods to ViewableData - useful…

… for templating work (from r94063)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@95584 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
1 parent 7377010 commit d6e9931eb4162d30ac75f760aaa85aa69fd2a601 @halkyon halkyon committed Dec 16, 2009
Showing with 39 additions and 1 deletion.
  1. +16 −0 core/ViewableData.php
  2. +23 −1 tests/DataObjectSetTest.php
View
@@ -620,7 +620,23 @@ public function Pos($startIndex = 1) {
public function TotalItems() {
return $this->iteratorTotalItems;
}
+
+ /**
+ * Returns the modulus of the numerical position of the item in the data set.
+ * The count starts from $startIndex, which defaults to 1.
+ * @param int $Mod The number to perform Mod operation to.
+ * @param int $startIndex Number to start count from.
+ * @return int
+ */
+ public function Modulus($mod, $startIndex = 1) {
+ return ($this->iteratorPos + $startIndex) % $mod;
+ }
+ public function MultipleOf($factor, $offset = 1) {
+ return ($this->Modulus($factor, $offset) == 0);
+ }
+
+
// UTILITY METHODS -------------------------------------------------------------------------------------------------
/**
@@ -69,7 +69,29 @@ function testIterator() {
$this->assertTrue($three->Odd());
$this->assertFalse($four->Odd());
}
-
+
+ public function testMultipleOf() {
+ $comments = DataObject::get('PageComment', '', "\"ID\" ASC");
+ $commArr = $comments->toArray();
+ $multiplesOf3 = 0;
+
+ foreach($comments as $comment) {
+ if($comment->MultipleOf(3)) {
+ $comment->IsMultipleOf3 = true;
+ $multiplesOf3++;
+ } else {
+ $comment->IsMultipleOf3 = false;
+ }
+ }
+
+ $this->assertEquals(2, $multiplesOf3);
+
+ $this->assertFalse($commArr[0]->IsMultipleOf3);
+ $this->assertFalse($commArr[1]->IsMultipleOf3);
+ $this->assertTrue($commArr[2]->IsMultipleOf3);
+ $this->assertTrue($commArr[5]->IsMultipleOf3);
+ }
+
/**
* Test {@link DataObjectSet->Count()}
*/

0 comments on commit d6e9931

Please sign in to comment.