public static function checkPermissionForProtectedHomeDirs($strFile) { $strUuid = \Config::get('protectedHomeDirRoot'); if (!$strFile) { return; } if ($strUuid && ($strProtectedHomeDirRootPath = \HeimrichHannot\HastePlus\Files::getPathFromUuid($strUuid)) !== null) { // check only if path inside the protected root dir if (StringUtil::startsWith($strFile, $strProtectedHomeDirRootPath)) { if (FE_USER_LOGGED_IN) { if (($objFrontendUser = \FrontendUser::getInstance()) !== null) { if (\Config::get('allowAccessByMemberId') && $objFrontendUser->assignProtectedDir && $objFrontendUser->protectedHomeDir) { $strProtectedHomeDirMemberRootPath = Files::getPathFromUuid($objFrontendUser->protectedHomeDir); // fe user id = dir owner member id if (StringUtil::startsWith($strFile, $strProtectedHomeDirMemberRootPath)) { return; } } if (\Config::get('allowAccessByMemberGroups')) { $arrAllowedGroups = deserialize(\Config::get('allowedMemberGroups'), true); if (array_intersect(deserialize($objFrontendUser->groups, true), $arrAllowedGroups)) { return; } } } } $intNoAccessPage = \Config::get('jumpToNoAccess'); if ($intNoAccessPage && ($objPageJumpTo = \PageModel::findByPk($intNoAccessPage)) !== null) { \Controller::redirect(\Controller::generateFrontendUrl($objPageJumpTo->row())); } else { die($GLOBALS['TL_LANG']['MSC']['noAccessDownload']); } } } }
/** * Returns all classes in the given namespace * @param $strNamespace * * @return array */ public static function getClassesInNamespace($strNamespace) { $arrOptions = array(); foreach (array_keys(ClassLoader::getClasses()) as $strName) { if (StringUtil::startsWith($strName, $strNamespace)) { $arrOptions[$strName] = $strName; } } asort($arrOptions); return $arrOptions; }
/** * Filter out values from an Array by given prefixes * * @param array $arrData * @param array $arrPrefixes * * @return array the filtered array or $arrData if $strPrefix is empty */ public static function filterOutByPrefixes(array $arrData = array(), $arrPrefixes = array()) { $arrExtract = array(); if (!is_array($arrPrefixes) || empty($arrPrefixes)) { return $arrData; } foreach ($arrData as $key => $value) { foreach ($arrPrefixes as $strPrefix) { if (\HeimrichHannot\Haste\Util\StringUtil::startsWith($key, $strPrefix)) { continue; } $arrExtract[$key] = $value; } } return $arrExtract; }
/** * Replace modal inserttags * * @param $strTag * @param $blnCache * @param $strCacheTag * @param $flags * @param $tags * @param $arrCache * @param $index * @param $count * * @return string */ public function replaceModalInsertTags($strTag, $blnCache, $strCacheTag, $flags, $tags, $arrCache, $index, $count) { $params = preg_split('/::/', $strTag); if (!is_array($params) || empty($params) || !\HeimrichHannot\Haste\Util\StringUtil::startsWith($params[0], 'modal_')) { return false; } switch ($params[0]) { case 'modal_link': $objModal = ModalModel::findPublishedByIdOrAlias($params[1]); if ($objModal === null) { return ''; } return static::generateModalLink($objModal->current(), $params[2], $params[3]); break; case 'modal_link_open': $objModal = ModalModel::findPublishedByIdOrAlias($params[1]); if ($objModal === null) { return ''; } $strBuffer = static::generateModalLink($objModal->current(), $params[2], ''); preg_match('/(?P<start>.*<a[^<]+[^<]+ *[^\\/?]>)(?P<stop>.*)/is', $strBuffer, $matches); if (is_array($matches) && isset($matches['start']) && isset($matches['stop'])) { return $matches['start']; } return false; break; case 'modal_link_close': $objModal = ModalModel::findPublishedByIdOrAlias($params[1]); if ($objModal === null) { return ''; } $strBuffer = static::generateModalLink($objModal->current(), $params[2], ''); preg_match('/(?P<start>.*<a[^<]+[^<]+ *[^\\/?]>)(?P<stop>.*)/is', $strBuffer, $matches); if (is_array($matches) && isset($matches['start']) && isset($matches['stop'])) { return $matches['stop']; } return false; break; case 'modal_url': $objModal = ModalModel::findPublishedByIdOrAlias($params[1]); if ($objModal === null) { return ''; } return static::generateModalUrl($objModal->row(), $params[2]); break; } }
public static function findCurrentByPidAndFilter($arrPids, $intStart, $intEnd, array $arrFilter = array(), array $arrFilterOptions = array(), $arrFilterConfig = array(), $arrOptions = array(), $count = false) { $t = static::$strTable; $intStart = intval($intStart); $intEnd = intval($intEnd); $arrPids = !is_array($arrPids) ? array($arrPids) : $arrPids; $arrColumns[] = "({$t}.pid IN (" . implode(',', $arrPids) . "))"; $arrColumnsOr = array(); foreach ($arrFilter as $key => $value) { $arrValueOptions = isset($arrFilterOptions[$key]) && is_array($arrFilterOptions[$key]) ? $arrFilterOptions[$key] : array(); switch ($key) { case 'startDate': if ($value && $value >= $intStart) { $intStart = $value; } break; case 'endDate': if ($value && $value <= $intEnd) { $intEnd = strtotime(date('d.m.Y', $value) . ' 23:59:59'); // until last second of the day } break; case 'dates': if ($value != '') { $strQuery = ''; $valueArray = trimsplit(',', $value); foreach ($valueArray as $key => $strDate) { $intDate = strtotime($strDate); if ($key > 0) { $strQuery .= " OR ((({$t}.endDate IS NULL OR {$t}.endDate = '') AND {$t}.startDate = {$intDate}) OR (({$t}.startDate = '' OR {$t}.startDate <= {$intDate}) AND {$t}.endDate >= {$intDate}))"; } else { $strQuery = "((({$t}.endDate IS NULL OR {$t}.endDate = '') AND {$t}.startDate = {$intDate}) OR (({$t}.startDate = '' OR {$t}.startDate <= {$intDate}) AND {$t}.endDate >= {$intDate}))"; } } $arrColumns[] = '(' . $strQuery . ')'; } break; case 'promoter': case 'areasoflaw': if ($value != '') { $valueArray = trimsplit(',', $value); // permit intersections only if (!empty($arrValueOptions)) { $valueArray = array_intersect($valueArray, $arrValueOptions); } if (is_array($valueArray) && !empty($valueArray)) { if ($arrFilterConfig['show_related']) { $arrColumnsOr[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.{$key}", $valueArray, EVENTMODEL_CONDITION_OR); } else { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.{$key}", $valueArray); } } } else { if (!empty($arrValueOptions)) { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.{$key}", $arrValueOptions); } } break; case strrpos($key, 'eventtypes', -strlen($key)) !== FALSE: if ($value != '') { $valueArray = trimsplit(',', $value); // permit intersections only if (!empty($arrValueOptions)) { $valueArray = array_intersect($valueArray, $arrValueOptions); } if (is_array($valueArray) && !empty($valueArray)) { if ($arrFilterConfig['show_related']) { $arrColumnsOr[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.eventtypes", $valueArray, EVENTMODEL_CONDITION_OR); } else { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.eventtypes", $valueArray, EVENTMODEL_CONDITION_AND); } } } else { if (!empty($arrValueOptions)) { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.eventtypes", $arrValueOptions); } } break; case 'docents': case 'hosts': if ($value != '') { $valueArray = trimsplit(',', $value); if (is_array($valueArray) && !empty($valueArray)) { $arrDocents = array(); $arrMembers = array(); $arrHosts = array(); foreach ($valueArray as $id) { // docent if (\HeimrichHannot\Haste\Util\StringUtil::startsWith($id, 'd')) { $arrDocents[] = substr($id, 1); } else { if (\HeimrichHannot\Haste\Util\StringUtil::startsWith($id, 'm')) { $arrMembers[] = substr($id, 1); } else { if (\HeimrichHannot\Haste\Util\StringUtil::startsWith($id, 'h')) { $arrHosts[] = substr($id, 1); } } } } if (!empty($arrDocents)) { if (is_array($valueArray) && !empty($valueArray)) { if ($arrFilterConfig['show_related']) { $arrColumnsOr[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.docents", $arrDocents, EVENTMODEL_CONDITION_OR); } else { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.docents", $arrDocents); } } } if (!empty($arrMembers)) { if (is_array($valueArray) && !empty($valueArray)) { if ($arrFilterConfig['show_related'] || $arrFilterConfig['combine_docents']) { $arrColumnsOr[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.memberdocents", $arrMembers, EVENTMODEL_CONDITION_OR); if ($key = 'hosts' || $key == 'docents' && $arrFilterConfig['combine_docents']) { $arrColumnsOr[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.memberhosts", $arrMembers, EVENTMODEL_CONDITION_OR); } } else { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.memberdocents", $arrMembers); if ($key = 'hosts' || $key == 'docents' && $arrFilterConfig['combine_docents']) { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.memberhosts", $arrMembers); } } } } if (!empty($arrHosts) && ($key = 'hosts' || $key == 'docents' && $arrFilterConfig['cal_docent_combine'])) { if (is_array($valueArray) && !empty($valueArray)) { if ($arrFilterConfig['show_related']) { $arrColumnsOr[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.hosts", $arrHosts, EVENTMODEL_CONDITION_OR); } else { $arrColumns[] = EventModelHelper::createMySQLRegexpForMultipleIds("{$t}.hosts", $arrHosts); } } } } } break; case 'postal': if ($value != '') { $arrColumns[] = "LEFT({$t}.postal, 1) = ?"; $arrValues[] = $value; } break; case 'timeHours': if ($value != '') { $arrColumns[] = "({$t}.{$key} >= {$value} AND {$t}.{$key} < ({$value} + 1))"; } break; case 'q': if ($value != '' && is_array($arrFilterConfig['jumpTo'])) { try { $objSearch = \Search::searchFor($value, $arrFilterConfig['module']['queryType'] == 'or', $arrFilterConfig['jumpTo'], 0, 0, $arrFilterConfig['module']['fuzzy']); // return if keyword not found if ($objSearch->numRows < 1) { return null; } $arrUrls = $objSearch->fetchEach('url'); $strKeyWordColumns = ""; $n = 0; foreach ($arrUrls as $i => $strAlias) { $strKeyWordColumns .= ($n > 0 ? " OR " : "") . "{$t}.alias = ?"; $arrValues[] = basename($strAlias); $n++; } $arrColumns[] = "({$strKeyWordColumns})"; } catch (\Exception $e) { \System::log('Website search failed: ' . $e->getMessage(), __METHOD__, TL_ERROR); } } break; default: if ($value != '') { $arrColumns[] = "{$t}.{$key}=?"; $arrValues[] = $value; } } } $arrColumns[] = "(({$t}.startTime>={$intStart} AND {$t}.startTime<={$intEnd}) OR ({$t}.endTime>={$intStart} AND {$t}.endTime<={$intEnd}) OR ({$t}.startTime<={$intStart} AND {$t}.endTime>={$intEnd}) OR ({$t}.recurring=1 AND ({$t}.recurrences=0 OR {$t}.repeatEnd>={$intStart}) AND {$t}.startTime<={$intEnd}))"; if (!BE_USER_LOGGED_IN) { $time = time(); $arrColumns[] = "({$t}.start='' OR {$t}.start<{$time}) AND ({$t}.stop='' OR {$t}.stop>{$time}) AND {$t}.published=1"; } // for related search if (!empty($arrColumnsOr)) { $arrColumns[] = implode(' OR ', $arrColumnsOr); } if (!isset($arrOptions['order'])) { $arrOptions['order'] = "{$t}.startTime"; } if ($count) { return static::countBy($arrColumns, $arrValues, $arrOptions); } return static::findBy($arrColumns, $arrValues, $arrOptions); }
public static function getSortOptions() { $ref = new \ReflectionClass(__CLASS__); $arrOptions = array(); foreach ($ref->getConstants() as $key => $value) { if (!\HeimrichHannot\Haste\Util\StringUtil::startsWith($key, 'FILECREDIT_SORTBY')) { continue; } $arrOptions[] = $value; } return $arrOptions; }
/** * @dataProvider startsWithProvider * @test */ public function testStartsWith($haystack, $needle, $expectedResult) { $this->assertSame($expectedResult, StringUtil::startsWith($haystack, $needle)); }
/** * Check if the key starts with 'formHybrid' * * @param $strKey * * @return bool */ public static function isLegacyKey($strKey) { return StringUtil::startsWith($strKey, 'formHybrid'); }
/** * Get relation table, field and model class, from a foreignKey * * @param $varValue The foreignKey as String (e.g tl_page.id) * * @return array|bool Return list with relation table, field and model class or false if no valid foreignKey */ protected function getRelationData($varValue) { $arrRelation = trimsplit('.', $varValue); if (is_array($arrRelation) && !$arrRelation[0]) { return false; } $strTable = $arrRelation[0]; $strField = $arrRelation[1]; if (\HeimrichHannot\Haste\Util\StringUtil::startsWith($arrRelation[0], '%') && \HeimrichHannot\Haste\Util\StringUtil::endsWith($arrRelation[0], '%')) { $strField = str_replace('%', '', $arrRelation[0]); if (!$this->activeRecord->{$strField}) { return false; } $strTable = $this->activeRecord->{$strField}; } $strModelClass = \Model::getClassFromTable($strTable); if (!class_exists($strModelClass)) { return false; } return array($strTable, $strField, $strModelClass); }
public function moveFiles(\DataContainer $dc) { $arrPost = Request::getPost(); foreach ($arrPost as $key => $value) { $arrData = $GLOBALS['TL_DCA'][$dc->table]['fields'][$key]; if ($arrData['inputType'] != MultiFileUpload::NAME) { continue; } $arrFiles = deserialize($dc->activeRecord->{$key}); $strUploadFolder = Files::getFolderFromDca($arrData['eval']['uploadFolder'], $dc); if ($strUploadFolder === null) { throw new \Exception(sprintf($GLOBALS['TL_LANG']['ERR']['uploadNoUploadFolderDeclared'], $key, MultiFileUpload::UPLOAD_TMP)); } if (!is_array($arrFiles)) { $arrFiles = array($arrFiles); } $objFileModels = FilesModel::findMultipleByUuids($arrFiles); if ($objFileModels === null) { continue; } $arrPaths = $objFileModels->fetchEach('path'); $arrTargets = array(); // do not loop over $objFileModels as $objFile->close() will pull models away foreach ($arrPaths as $strPath) { $objFile = new \File($strPath); $strName = $objFile->name; $strTarget = $strUploadFolder . '/' . $strName; // upload_path_callback if (is_array($arrData['upload_path_callback'])) { foreach ($arrData['upload_path_callback'] as $callback) { $strTarget = \System::importStatic($callback[0])->{$callback[1]}($strTarget, $objFile, $dc) ?: $strTarget; } } if (StringUtil::startsWith($objFile->path, ltrim($strTarget, '/'))) { continue; } if ($objFile->renameTo($strTarget)) { $arrTargets[] = $strTarget; $objFile->close(); continue; } $arrTargets[] = $strPath; } // HOOK: post upload callback if (isset($GLOBALS['TL_HOOKS']['postUpload']) && is_array($GLOBALS['TL_HOOKS']['postUpload'])) { foreach ($GLOBALS['TL_HOOKS']['postUpload'] as $callback) { if (is_array($callback)) { \System::importStatic($callback[0])->{$callback[1]}($arrTargets); } elseif (is_callable($callback)) { $callback($arrTargets); } } } } }