93 $this->fileAdminDir = !empty(
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileadminDir']) ? rtrim(
$GLOBALS[
'TYPO3_CONF_VARS'][
'BE'][
'fileadminDir'],
'/') :
'fileadmin';
109 public function findRef($table, $field,
$uid, $content, $spKey, $spParams, $structurePath =
'') {
111 $this->tokenID_basePrefix = $table .
':' .
$uid .
':' . $field .
':' . $structurePath .
':' . $spKey;
115 $resultArray = array(
118 'matchString' => $content
122 $retVal = $resultArray;
126 $resultArray = array(
127 'content' =>
'{softref:' . $tokenID .
'}',
130 'matchString' => $content,
133 'tokenID' => $tokenID,
134 'tokenValue' => $content
139 $retVal = $resultArray;
185 $splitContent = $htmlParser->splitTags(
'img', $content);
188 foreach ($splitContent as $k => $v) {
191 $attribs = $htmlParser->get_tag_attributes($v);
192 $srcRef = htmlspecialchars_decode($attribs[0][
'src']);
193 $pI = pathinfo($srcRef);
196 if (!$pI[
'scheme'] && !$pI[
'query'] && $absPath && $srcRef !==
'clear.gif') {
199 $elements[$k] = array();
200 $elements[$k][
'matchString'] = $v;
205 if (strstr($splitContent[$k], $attribs[0][
'src'])) {
207 $splitContent[$k] = str_replace($attribs[0][
'src'],
'{softref:' . $tokenID .
'}', $splitContent[$k]);
208 $elements[$k][
'subst'] = array(
210 'relFileName' => $srcRef,
211 'tokenID' => $tokenID,
212 'tokenValue' => $attribs[0][
'src']
215 if (!@is_file($absPath)) {
216 $elements[$k][
'error'] =
'File does not exist!';
219 $elements[$k][
'error'] =
'Could not substitute image source with token!';
226 if (count($elements)) {
227 $resultArray = array(
228 'content' => implode(
'', $splitContent),
229 'elements' => $elements
248 if (is_array($spParams) && in_array(
'linkList', $spParams)) {
250 $linkElement = explode(
',', $content);
253 $linkElement = array($content);
257 foreach ($linkElement as $k => $typolinkValue) {
262 if (count($elements)) {
263 $resultArray = array(
264 'content' => implode(
',', $linkElement),
265 'elements' => $elements
284 $linkTags = $htmlParser->splitTags(
'link', $content);
287 foreach ($linkTags as $k => $foundValue) {
289 $typolinkValue = preg_replace(
'/<LINK[[:space:]]+/i',
'', substr($foundValue, 0, -1));
295 if (count($elements)) {
296 $resultArray = array(
297 'content' => implode(
'', $linkTags),
298 'elements' => $elements
317 $splitContent = $htmlParser->splitTags(
'img,a,form', $content);
319 foreach ($splitContent as $k => $v) {
321 $attribs = $htmlParser->get_tag_attributes($v);
323 switch ($htmlParser->getFirstTagName($v)) {
325 $attributeName =
'src';
328 $attributeName =
'href';
331 $attributeName =
'action';
335 if (isset($attribs[0][$attributeName])) {
336 $srcRef = htmlspecialchars_decode($attribs[0][$attributeName]);
339 $elements[$k] = array();
340 $elements[$k][
'matchString'] = $v;
342 $pI = pathinfo($srcRef);
347 if (strstr($splitContent[$k], $attribs[0][$attributeName])) {
348 $splitContent[$k] = str_replace($attribs[0][$attributeName],
'{softref:' . $tokenID .
'}', $splitContent[$k]);
349 $elements[$k][
'subst'] = array(
351 'relFileName' => $srcRef,
352 'tokenID' => $tokenID,
353 'tokenValue' => $attribs[0][$attributeName]
355 if (!@is_file($absPath)) {
356 $elements[$k][
'error'] =
'File does not exist!';
359 $elements[$k][
'error'] =
'Could not substitute attribute (' . $attributeName .
') value with token!';
365 $content = implode(
'', $splitContent);
369 if (count($elements)) {
370 $resultArray = array(
371 'content' => $content,
372 'elements' => $elements
392 if (count($elements)) {
393 $resultArray = array(
394 'content' => $content,
395 'elements' => $elements
410 $resultArray = array();
412 $parts = preg_split(
'/([^[:alnum:]]+)([A-Za-z0-9\\._-]+[@][A-Za-z0-9\\._-]+[\\.].[A-Za-z0-9]+)/',
' ' . $content .
' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
413 foreach ($parts as $idx => $value) {
416 $elements[$idx] = array();
417 $elements[$idx][
'matchString'] = $value;
418 if (is_array($spParams) && in_array(
'subst', $spParams)) {
419 $parts[$idx] =
'{softref:' . $tokenID .
'}';
420 $elements[$idx][
'subst'] = array(
422 'tokenID' => $tokenID,
423 'tokenValue' => $value
429 if (count($elements)) {
430 $resultArray = array(
431 'content' => substr(implode(
'', $parts), 1, -1),
432 'elements' => $elements
447 $resultArray = array();
449 $parts = preg_split(
'/([^[:alnum:]"\']+)((http|ftp):\\/\\/[^[:space:]"\'<>]*)([[:space:]])/',
' ' . $content .
' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
450 foreach ($parts as $idx => $value) {
456 $elements[$idx] = array();
457 $elements[$idx][
'matchString'] = $value;
458 if (is_array($spParams) && in_array(
'subst', $spParams)) {
459 $parts[$idx] =
'{softref:' . $tokenID .
'}';
460 $elements[$idx][
'subst'] = array(
462 'tokenID' => $tokenID,
463 'tokenValue' => $value
469 if (count($elements)) {
470 $resultArray = array(
471 'content' => substr(implode(
'', $parts), 1, -1),
472 'elements' => $elements
487 $resultArray = array();
489 $parts = preg_split(
'/([^[:alnum:]"\']+)(EXT:[[:alnum:]_]+\\/[^[:space:]"\',]*)/',
' ' . $content .
' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
490 foreach ($parts as $idx => $value) {
493 $elements[$idx] = array();
494 $elements[$idx][
'matchString'] = $value;
498 if (count($elements)) {
499 $resultArray = array(
500 'content' => substr(implode(
'', $parts), 1, -1),
501 'elements' => $elements
523 $parts = preg_split(
'/([^[:alnum:]]+)(' . preg_quote($this->fileAdminDir,
'/') .
'\\/[^[:space:]"\'<>]*)/',
' ' . $content .
' ', 10000, PREG_SPLIT_DELIM_CAPTURE);
525 foreach ($parts as $idx => $value) {
528 $tokenID = $this->
makeTokenID(
'fileadminReferences:' . $idx);
529 $elements[
'fileadminReferences.' . $idx] = array();
530 $elements[
'fileadminReferences.' . $idx][
'matchString'] = $value;
531 $elements[
'fileadminReferences.' . $idx][
'subst'] = array(
533 'relFileName' => $value,
534 'tokenID' => $tokenID,
535 'tokenValue' => $value
537 $parts[$idx] =
'{softref:' . $tokenID .
'}';
540 if (!@is_file($absPath)) {
541 $elements[
'fileadminReferences.' . $idx][
'error'] =
'File does not exist!';
546 return substr(implode(
'', $parts), 1, -1);
562 $finalTagParts = array();
565 $titleAttribute =
'';
566 $additionalParams =
'';
570 $link_param = trim($linkParameter[0]);
572 if (isset($linkParameter[1])) {
573 $browserTarget = trim($linkParameter[1]);
576 if (isset($linkParameter[2])) {
577 $cssClass = trim($linkParameter[2]);
580 if (isset($linkParameter[3])) {
581 $titleAttribute = trim($linkParameter[3]);
583 if (isset($linkParameter[4]) && trim($linkParameter[4]) !==
'') {
584 $additionalParams = trim($linkParameter[4]);
587 $finalTagParts[
'target'] = $browserTarget;
588 $finalTagParts[
'class'] = $cssClass;
589 $finalTagParts[
'title'] = $titleAttribute;
590 $finalTagParts[
'additionalParams'] = $additionalParams;
593 $pU = @parse_url($link_param);
596 if (strstr($link_param,
'@') && !$pU[
'scheme']) {
597 $link_param = preg_replace(
'/^mailto:/i',
'', $link_param);
598 $finalTagParts[
'LINK_TYPE'] =
'mailto';
599 $finalTagParts[
'url'] = trim($link_param);
600 return $finalTagParts;
603 list ($linkHandlerKeyword, $linkHandlerValue) = explode(
':', trim($link_param), 2);
606 $linkHandlerFound = FALSE;
607 list($linkHandlerFound, $finalTagParts) = $this->
emitGetTypoLinkParts($linkHandlerFound, $finalTagParts, $linkHandlerKeyword, $linkHandlerValue);
608 if ($linkHandlerFound) {
609 return $finalTagParts;
613 if ($linkHandlerKeyword ===
'file') {
614 $finalTagParts[
'LINK_TYPE'] =
'file';
615 $finalTagParts[
'identifier'] = trim($link_param);
616 return $finalTagParts;
620 $fileChar = (int)strpos($link_param,
'/');
621 $urlChar = (int)strpos($link_param,
'.');
624 list($rootFileDat) = explode(
'?', rawurldecode($link_param));
625 $containsSlash = strstr($rootFileDat,
'/');
626 $rFD_fI = pathinfo($rootFileDat);
627 if (trim($rootFileDat) && !$containsSlash && (@is_file(PATH_site . $rootFileDat) ||
GeneralUtility::inList(
'php,html,htm', strtolower($rFD_fI[
'extension'])))) {
629 } elseif ($containsSlash) {
633 if ($pU[
'scheme'] || ($isLocalFile != 1 && $urlChar && (!$containsSlash || $urlChar < $fileChar))) {
634 $finalTagParts[
'LINK_TYPE'] =
'url';
635 $finalTagParts[
'url'] = $link_param;
636 } elseif ($containsSlash || $isLocalFile) {
637 $splitLinkParam = explode(
'?', $link_param);
638 if (file_exists(rawurldecode($splitLinkParam[0])) || $isLocalFile) {
639 $finalTagParts[
'LINK_TYPE'] =
'file';
640 $finalTagParts[
'filepath'] = rawurldecode($splitLinkParam[0]);
641 $finalTagParts[
'query'] = $splitLinkParam[1];
646 $finalTagParts[
'LINK_TYPE'] =
'page';
648 $link_params_parts = explode(
'#', $link_param);
650 $link_param = trim($link_params_parts[0]);
652 if (strlen($link_params_parts[1])) {
653 $finalTagParts[
'anchor'] = trim($link_params_parts[1]);
658 if (count($pairParts) > 1) {
659 $link_param = $pairParts[0];
660 $finalTagParts[
'type'] = $pairParts[1];
664 if (strlen($link_param)) {
666 $finalTagParts[
'alias'] = $link_param;
670 $finalTagParts[
'page_id'] = (int)$link_param;
674 return $finalTagParts;
690 $tokenID = $this->
makeTokenID(
'setTypoLinkPartsElement:' . $idx);
691 $elements[$tokenID .
':' . $idx] = array();
692 $elements[$tokenID .
':' . $idx][
'matchString'] = $content;
694 switch ((
string) $tLP[
'LINK_TYPE']) {
699 $elements[$tokenID .
':' . $idx][
'subst'] = array(
701 'tokenID' => $tokenID,
702 'tokenValue' => $tLP[
'url']
705 $content =
'{softref:' . $tokenID .
'}';
709 if ($tLP[
'identifier']) {
710 list ($linkHandlerKeyword, $linkHandlerValue) = explode(
':', trim($tLP[
'identifier']), 2);
713 $elements[$tokenID .
':' . $idx][
'subst'] = array(
715 'recordRef' =>
'sys_file:' . $linkHandlerValue,
716 'tokenID' => $tokenID,
717 'tokenValue' => $tLP[
'identifier'],
720 $content =
'{softref:' . $tokenID .
'}';
727 } elseif (!$tLP[
'query']) {
732 $elements[$tokenID .
':' . $idx][
'subst'] = array(
734 'relFileName' => $tLP[
'filepath'],
735 'tokenID' => $tokenID,
736 'tokenValue' => $tLP[
'filepath']
740 if (!@is_file($absPath)) {
741 $elements[$tokenID .
':' . $idx][
'error'] =
'File does not exist!';
744 $content =
'{softref:' . $tokenID .
'}';
756 if ($tLP[
'page_id']) {
757 $content .=
'{softref:' . $tokenID .
'}';
758 $elements[$tokenID .
':' . $idx][
'subst'] = array(
760 'recordRef' =>
'pages:' . $tLP[
'page_id'],
761 'tokenID' => $tokenID,
762 'tokenValue' => $tLP[
'alias'] ? $tLP[
'alias'] : $tLP[
'page_id']
766 if (strlen($tLP[
'type'])) {
767 $content .=
',' . $tLP[
'type'];
770 if (strlen($tLP[
'anchor'])) {
774 $newTokenID = $this->
makeTokenID(
'setTypoLinkPartsElement:anchor:' . $idx);
775 $elements[$newTokenID .
':' . $idx] = array();
776 $elements[$newTokenID .
':' . $idx][
'matchString'] =
'Anchor Content Element: ' . $tLP[
'anchor'];
777 $content .=
'#{softref:' . $newTokenID .
'}';
778 $elements[$newTokenID .
':' . $idx][
'subst'] = array(
780 'recordRef' =>
'tt_content:' . $tLP[
'anchor'],
781 'tokenID' => $newTokenID,
782 'tokenValue' => $tLP[
'anchor']
786 $content .=
'#' . $tLP[
'type'];
791 $linkHandlerFound = FALSE;
792 list($linkHandlerFound, $tLP, $content, $newElements) = $this->
emitSetTypoLinkPartsElement($linkHandlerFound, $tLP, $content, $elements, $idx, $tokenID);
796 if (!$linkHandlerFound) {
797 $elements[$tokenID .
':' . $idx][
'error'] =
'Couldn\'t decide typolink mode.';
802 if (strlen($content) && isset($tLP[
'target']) && $tLP[
'target'] !==
'') {
803 $content .=
' ' . $tLP[
'target'];
804 if (isset($tLP[
'class']) && $tLP[
'class'] !==
'') {
805 $content .=
' "' . $tLP[
'class'] .
'"';
806 if (isset($tLP[
'title']) && $tLP[
'title'] !==
'') {
807 $content .=
' "' . $tLP[
'title'] .
'"';
808 if (isset($tLP[
'additionalParams']) && $tLP[
'additionalParams'] !==
'') {
809 $content .=
' ' . $tLP[
'additionalParams'];
827 return $pRec[0][
'uid'];
838 return md5($this->tokenID_basePrefix .
':' . $index);
855 protected function emitGetTypoLinkParts($linkHandlerFound, $finalTagParts, $linkHandlerKeyword, $linkHandlerValue) {
856 return $this->
getSignalSlotDispatcher()->dispatch(get_class($this),
'getTypoLinkParts', array($linkHandlerFound, $finalTagParts, $linkHandlerKeyword, $linkHandlerValue));
869 return $this->
getSignalSlotDispatcher()->dispatch(get_class($this),
'setTypoLinkPartsElement', array($linkHandlerFound, $tLP, $content, $elements, $idx, $tokenID, $this));
getSignalSlotDispatcher()
static mergeRecursiveWithOverrule(array &$original, array $overrule, $addKeys=TRUE, $includeEmptyValues=TRUE, $enableUnsetFeature=TRUE)
static getRecordsByField($theTable, $theField, $theValue, $whereClause='', $groupBy='', $orderBy='', $limit='', $useDeleteClause=TRUE)
static isFirstPartOfStr($str, $partStr)
findRef_extension_fileref($content, $spParams)
getPageIdFromAlias($link_param)
static canBeInterpretedAsInteger($var)
findRef_TStemplate($content, $spParams)
fileadminReferences($content, &$elements)
static makeInstance($className)
findRef_url($content, $spParams)
static trimExplode($delim, $string, $removeEmptyValues=FALSE, $limit=0)
findRef_images($content, $spParams)
findRef_typolink($content, $spParams)
static unQuoteFilenames($parameters, $unQuote=FALSE)
findRef_email($content, $spParams)
findRef_typolink_tag($content, $spParams)
emitSetTypoLinkPartsElement($linkHandlerFound, $tLP, $content, $elements, $idx, $tokenID)
emitGetTypoLinkParts($linkHandlerFound, $finalTagParts, $linkHandlerKeyword, $linkHandlerValue)
findRef($table, $field, $uid, $content, $spKey, $spParams, $structurePath='')
findRef_TSconfig($content, $spParams)
getTypoLinkParts($typolinkValue)
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
static inList($list, $item)
setTypoLinkPartsElement($tLP, &$elements, $content, $idx)
static getFileAbsFileName($filename, $onlyRelative=TRUE, $relToTYPO3_mainDir=FALSE)