/**
  * normally returns TRUE, but returns FALSE when it, or its parent is in the list.
  * todo: add products in other product categories
  * @param SiteTree $page
  * @return Boolean
  */
 function canBeDiscounted(SiteTree $page)
 {
     if ($this->owner->PageIDs) {
         $allowedPageIDs = explode(',', $this->owner->PageIDs);
         $checkPages = new ArrayList(array($page));
         $alreadyCheckedPageIDs = array();
         while ($checkPages->Count()) {
             $page = $checkPages->First();
             if (array_search($page->ID, $allowedPageIDs) !== false) {
                 return true;
             }
             $alreadyCheckedPageIDs[] = $page->ID;
             $checkPages->remove($page);
             // Parents list update
             if ($page->hasMethod('AllParentGroups')) {
                 $parents = new ArrayList($page->AllParentGroups()->toArray());
             } else {
                 $parents = new ArrayList();
             }
             $parent = $page->Parent();
             if ($parent && $parent->exists()) {
                 $parents->unshift($parent);
             }
             foreach ($parents as $parent) {
                 if (array_search($parent->ID, $alreadyCheckedPageIDs) === false) {
                     $checkPages->push($parent);
                 }
             }
             $checkPages->removeDuplicates();
         }
         return false;
     }
     return true;
 }
 public function SplitSetIntoGridRows($itemsInGridMethod, $numberOfCols)
 {
     error_log("GRID ROWS");
     $itemsInGrid = $this->owner->{$itemsInGridMethod}();
     $position = 1;
     $columns = new ArrayList();
     $result = new ArrayList();
     foreach ($itemsInGrid as $key => $item) {
         $columns->push($item);
         error_log("Comparing position {$position} > number of cols {$numberOfCols}");
         if ($position >= $numberOfCols) {
             error_log("NEW ROW");
             $position = 1;
             $row = new ArrayList();
             $row->Columns = $columns;
             $result->push($row);
             $columns = new ArrayList();
         } else {
             $position = $position + 1;
         }
     }
     if ($columns->Count() > 0) {
         $row = new ArrayList();
         $row->Columns = $columns;
         $result->push($row);
     }
     // FIXME add padding?
     return $result;
     //$result = new DataObjectSet();
 }
 public function testAppendToTopAutoSort()
 {
     if (Member::currentUser()) {
         Member::currentUser()->logOut();
     }
     $this->gridField->getConfig()->getComponentByType('GridFieldSortableRows')->setAppendToTop(true);
     $this->assertEquals(0, $this->list->last()->SortOrder, 'Auto sort should not have run');
     $stateID = 'testGridStateActionField';
     Session::set($stateID, array('grid' => '', 'actionName' => 'sortableRowsToggle', 'args' => array('GridFieldSortableRows' => array('sortableToggle' => true))));
     $request = new SS_HTTPRequest('POST', 'url', array(), array('action_gridFieldAlterAction?StateID=' . $stateID => true));
     $this->gridField->gridFieldAlterAction(array('StateID' => $stateID), $this->form, $request);
     //Insure sort ran
     $this->assertEquals(3, $this->list->last()->SortOrder, 'Auto sort should have run');
     //Check for duplicates (there shouldn't be any)
     $count = $this->list->Count();
     $indexes = count(array_unique($this->list->column('SortOrder')));
     $this->assertEquals(0, $count - $indexes, 'Duplicate indexes detected');
 }
예제 #4
0
 public function testEach()
 {
     $list = new ArrayList(array(1, 2, 3));
     $count = 0;
     $test = $this;
     $list->each(function ($item) use(&$count, $test) {
         $count++;
         $test->assertTrue(is_int($item));
     });
     $this->assertEquals($list->Count(), $count);
 }
 public function onAfterInit()
 {
     if (!Director::isDev()) {
         // Only on live site
         $errorcode = $this->owner->failover->ErrorCode ? $this->owner->failover->ErrorCode : 404;
         $extract = preg_match('/^([a-z0-9\\.\\_\\-\\/]+)/i', $_SERVER['REQUEST_URI'], $rawString);
         if ($errorcode == 404 && $extract) {
             $uri = preg_replace('/\\.(aspx?|html?|php[34]?)$/i', '', $rawString[0]);
             $parts = preg_split('/\\//', $uri, -1, PREG_SPLIT_NO_EMPTY);
             $page_key = array_pop($parts);
             $sounds_like = soundex($page_key);
             // extend ignored classes with child classes
             $ignoreClassNames = array();
             if ($configClasses = Config::inst()->get('Intelligent404', 'intelligent_404_ignored_classes')) {
                 foreach ($configClasses as $class) {
                     $ignoreClassNames = array_merge($ignoreClassNames, array_values(ClassInfo::subclassesFor($class)));
                 }
             }
             // get all pages
             $SiteTree = SiteTree::get()->exclude('ClassName', $ignoreClassNames);
             // Translatable support
             if (class_exists('Translatable')) {
                 $SiteTree = $SiteTree->filter('Locale', Translatable::get_current_locale());
             }
             // Multisites support
             if (class_exists('Multisites')) {
                 $SiteTree = $SiteTree->filter('SiteID', Multisites::inst()->getCurrentSiteId());
             }
             $ExactMatches = new ArrayList();
             $PossibleMatches = new ArrayList();
             foreach ($SiteTree as $page) {
                 if ($page->URLSegment == $page_key) {
                     $ExactMatches->push($page);
                 } elseif ($sounds_like == soundex($page->URLSegment)) {
                     $PossibleMatches->push($page);
                 }
             }
             $ExactCount = $ExactMatches->Count();
             $PossibleCount = $PossibleMatches->Count();
             $redirectOnSingleMatch = Config::inst()->get('Intelligent404', 'redirect_on_single_match');
             if ($ExactCount == 1 && $redirectOnSingleMatch) {
                 return $this->RedirectToPage($ExactMatches->First()->Link());
             } elseif ($ExactCount == 0 && $PossibleCount == 1 && $redirectOnSingleMatch) {
                 return $this->RedirectToPage($PossibleMatches->First()->Link());
             } elseif ($ExactCount > 1 || $PossibleCount > 1 || !$redirectOnSingleMatch) {
                 $ExactMatches->merge($PossibleMatches);
                 $content = $this->owner->customise(array('Pages' => $ExactMatches))->renderWith(array('Intelligent404Options'));
                 $this->owner->Content .= $content;
             }
         }
     }
 }
 /**
  * Sets up the top level entities.
  *
  * Either manually registered through the YAML syntax or automatically
  * loaded through investigating the file system for `docs` folder.
  */
 public function setupEntities()
 {
     if ($this->registeredEntities->Count() > 0) {
         return;
     }
     if (Config::inst()->get('DocumentationManifest', 'automatic_registration')) {
         $this->populateEntitiesFromInstall();
     }
     $registered = Config::inst()->get('DocumentationManifest', 'register_entities');
     foreach ($registered as $details) {
         // validate the details provided through the YAML configuration
         $required = array('Path', 'Title');
         foreach ($required as $require) {
             if (!isset($details[$require])) {
                 throw new Exception("{$require} is a required key in DocumentationManifest.register_entities");
             }
         }
         // if path is not an absolute value then assume it is relative from
         // the BASE_PATH.
         $path = $this->getRealPath($details['Path']);
         $key = isset($details['Key']) ? $details['Key'] : $details['Title'];
         if (!$path || !is_dir($path)) {
             throw new Exception($details['Path'] . ' is not a valid documentation directory');
         }
         $version = isset($details['Version']) ? $details['Version'] : '';
         $branch = isset($details['Branch']) ? $details['Branch'] : '';
         $langs = scandir($path);
         if ($langs) {
             $possible = i18n::get_common_languages(true);
             foreach ($langs as $k => $lang) {
                 if (isset($possible[$lang])) {
                     $entity = Injector::inst()->create('DocumentationEntity', $key);
                     $entity->setPath(Controller::join_links($path, $lang, '/'));
                     $entity->setTitle($details['Title']);
                     $entity->setLanguage($lang);
                     $entity->setVersion($version);
                     $entity->setBranch($branch);
                     if (isset($details['Stable'])) {
                         $entity->setIsStable($details['Stable']);
                     }
                     if (isset($details['DefaultEntity'])) {
                         $entity->setIsDefaultEntity($details['DefaultEntity']);
                     }
                     $this->registeredEntities->push($entity);
                 }
             }
         }
     }
 }
 public function getNextRecurringEvents($event_obj, $datetime_obj, $limit = null)
 {
     $counter = sfDate::getInstance($datetime_obj->StartDate);
     if ($event = $datetime_obj->Event()->DateTimes()->First()) {
         $end_date = strtotime($event->EndDate);
     } else {
         $end_date = false;
     }
     $counter->tomorrow();
     $dates = new ArrayList();
     while ($dates->Count() != $this->OtherDatesCount) {
         // check the end date
         if ($end_date) {
             if ($end_date > 0 && $end_date <= $counter->get()) {
                 break;
             }
         }
         if ($event_obj->getRecursionReader()->recursionHappensOn($counter->get())) {
             $dates->push($this->newRecursionDateTime($datetime_obj, $counter->date()));
         }
         $counter->tomorrow();
     }
     return $dates;
 }
예제 #8
0
 public function Count()
 {
     $this->getIterator();
     return parent::Count();
 }
 function showHibImages($maxCount = false, $recursive = true)
 {
     if ($maxCount == false) {
         $maxCount = HeaderImageBanner::$hibMaxImages;
     }
     if (isset($this->hibCachedImages) && $this->hibCachedImages) {
         while ($this->hibCachedImages->Count() > $maxCount) {
             $this->hibCachedImages->pop();
         }
         return $this->hibCachedImages;
     }
     $images = new ArrayList($this->owner->hibImages()->toArray());
     if ($recursive && $images->Count() == 0 && is_array(HeaderImageBanner::$hibDefaultToType)) {
         foreach (HeaderImageBanner::$hibDefaultToType as $action) {
             if (!isset($images) || count($images) == 0) {
                 switch ($action) {
                     case 'Parent':
                         if ($this->owner->hasMethod("Parent") && $this->owner->Parent()->hasMethod("showHibImages")) {
                             $images = $this->owner->Parent()->showHibImages(0, true);
                         }
                         break;
                     case 'SiteConfig':
                         $config = SiteConfig::current_site_config();
                         if ($config->hasMethod("showHibImages")) {
                             $images = $config->showHibImages(0, false);
                         }
                         break;
                     case 'Children':
                         $images = $this->hibImagesFromChildren();
                         if (isset($images)) {
                             $images->removeDuplicates("ID");
                         }
                         break;
                 }
             }
         }
     }
     $this->hibCachedImages = new ArrayList();
     if ($images->Count() > 0) {
         $keys = $images->column("ID");
         while (($this->hibCachedImages->Count() < $maxCount || $maxCount == 0) && count($keys) > 0) {
             $rndKey = array_rand($keys);
             $this->hibCachedImages->push($images[$rndKey]);
             unset($keys[$rndKey]);
         }
     }
     return $this->hibCachedImages;
 }
예제 #10
0
 public function getManagedCompanies()
 {
     $query = DB::query("SELECT Company.* from Company INNER JOIN Company_Administrators ON Company_Administrators.CompanyID=Company.ID AND Company_Administrators.MemberID={$this->owner->ID} INNER JOIN (\r\n            SELECT DISTINCT(GroupID) FROM `Permission` WHERE `Code` IN\r\n            ('MANAGE_COMPANY_PROFILE','MANAGE_COMPANY_LOGOS') ) PG ON PG.GroupID = Company_Administrators.GroupID");
     $companies = new ArrayList();
     if (!is_null($query) && $query->numRecords() > 0) {
         for ($i = 0; $i < $query->numRecords(); $i++) {
             $record = $query->nextRecord();
             $companies->push(new $record['ClassName']($record));
         }
     }
     $old_companies = Company::get()->filter(array('CompanyAdminID' => $this->owner->ID));
     $joined_companies = new ArrayList();
     if ($companies && $companies->Count() > 0) {
         foreach ($companies as $company) {
             $joined_companies->push($company);
         }
     }
     if ($old_companies && $old_companies->Count() > 0) {
         foreach ($old_companies as $company) {
             $joined_companies->push($company);
         }
     }
     return $joined_companies;
 }