getList($number); $found = $list->column(); return $found; } public function findPageCount($number) { $list = $this->getList($number); return $list->count(); } /** * @param int $number * @return DataList */ public function getList($number) { $number = (int) $number; $list = DataList::create('SiteTree'); $where = array(); $fields = $this->getShortCodeFields('SiteTree'); $shortcode = DMS::inst()->getShortcodeHandlerKey(); foreach ($fields as $ancClass => $ancFields) { foreach ($ancFields as $ancFieldName => $ancFieldSpec) { if ($ancClass != "SiteTree") { $list = $list->leftJoin($ancClass, '"'.$ancClass.'"."ID" = "SiteTree"."ID"'); } $where[] = "\"$ancClass\".\"$ancFieldName\" LIKE '%[{$shortcode},id=$number]%'"; //."%s" LIKE ""', } } $list = $list->where(implode(' OR ', $where)); return $list; } /** * Returns a filtered list of fields which could contain shortcodes. * * @param String * @return Array Map of class names to an array of field names on these classes. */ public function getShortcodeFields($class) { $fields = array(); $ancestry = array_values(ClassInfo::dataClassesFor($class)); foreach ($ancestry as $ancestor) { if (ClassInfo::classImplements($ancestor, 'TestOnly')) { continue; } $ancFields = DataObject::custom_database_fields($ancestor); if ($ancFields) { foreach ($ancFields as $ancFieldName => $ancFieldSpec) { if (preg_match($this->fieldSpecRegex, $ancFieldSpec)) { if (!@$fields[$ancestor]) { $fields[$ancestor] = array(); } $fields[$ancestor][$ancFieldName] = $ancFieldSpec; } } } } return $fields; } }