コード例 #1
0
 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']);
             }
         }
     }
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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;
 }
コード例 #4
0
 /**
  * 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;
     }
 }
コード例 #5
0
 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);
 }
コード例 #6
0
 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;
 }
コード例 #7
0
 /**
  * @dataProvider startsWithProvider
  * @test
  */
 public function testStartsWith($haystack, $needle, $expectedResult)
 {
     $this->assertSame($expectedResult, StringUtil::startsWith($haystack, $needle));
 }
コード例 #8
0
 /**
  * Check if the key starts with 'formHybrid'
  *
  * @param $strKey
  *
  * @return bool
  */
 public static function isLegacyKey($strKey)
 {
     return StringUtil::startsWith($strKey, 'formHybrid');
 }
コード例 #9
0
 /**
  * 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);
 }
コード例 #10
0
 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);
                 }
             }
         }
     }
 }