Enhancement for textbrowser

This commit is contained in:
Laurent Destailleur
2024-10-08 20:58:09 +02:00
3 changed files with 110 additions and 12 deletions

View File

@@ -617,8 +617,12 @@ function getBrowserInfo($user_agent)
$version = end($reg);
} elseif (preg_match('/l[iy]n(x|ks)(\(|\/|\s)*([\d\.]+)/i', $user_agent, $reg)) {
// MS products at end
$name = 'lynxlinks';
$name = 'textbrowser';
$version = empty($reg[3]) ? '' : $reg[3];
} elseif (preg_match('/w3m\/([\d\.]+)/i', $user_agent, $reg)) {
// MS products at end
$name = 'textbrowser';
$version = empty($reg[1]) ? '' : $reg[1];
}
if ($tablet) {
@@ -12415,6 +12419,7 @@ function dolGetStatus($statusLabel = '', $statusLabelShort = '', $html = '', $st
* $arrayforbutaction = array(
* 10 => array('attr' => array('class'=>''), 'lang'=>'propal', 'enabled'=>isModEnabled("propal"), 'perm'=>$user->hasRight('propal', 'creer'), 'label' => 'AddProp', 'url'=>'/comm/propal/card.php?action=create&projectid='.$object->id.'&socid='.$object->socid),
* 20 => array('attr' => array('class'=>''), 'lang'=>'mymodule', 'enabled'=>isModEnabled("mymodule"), 'perm'=>$user->hasRight('mymodule', 'write'), 'label' => 'MyModuleAction', 'urlroot'=>dol_build_patch('/mymodule/mypage.php?action=create')),
* 30 => array('attr' => array('class'=>''), 'lang'=>'mymodule', 'enabled'=>isModEnabled("mymodule"), 'perm'=>$user->hasRight('mymodule', 'write'), 'label' => 'MyModuleOtherAction', 'urlraw' => '# || external Url || javascript: || tel: || mailto:' ),
* ); );
* @param string $id Attribute id of action button. Example 'action-delete'. This can be used for full ajax confirm if this code is reused into the ->formconfirm() method.
* @param int|boolean $userRight User action right
@@ -12480,17 +12485,18 @@ function dolGetButtonAction($label, $text = '', $actionType = 'default', $url =
$langs->load($subbutton['lang']);
}
if (!empty($subbutton['urlroot'])) {
$tmpurl = $subbutton['urlroot'].(empty($params['backtopage']) ? '' : '&backtopage='.urlencode($params['backtopage']));
if (!empty($subbutton['urlraw'])) {
$tmpurl = $subbutton['urlraw']; // Use raw url, no url completion, use only what developer send
} else {
$tmpurl = DOL_URL_ROOT.$subbutton['url'].(empty($params['backtopage']) ? '' : '&backtopage='.urlencode($params['backtopage']));
$tmpurl = !empty($subbutton['urlroot']) ? $subbutton['urlroot'] : $subbutton['url'];
$tmpurl = dolCompletUrlForDropdownButton($tmpurl, $params, empty($subbutton['urlroot']));
}
$subbuttonparam = array();
if (!empty($subbutton['attr'])) {
$subbuttonparam['attr'] = $subbutton['attr'];
}
$subbuttonparam['isDropDown'] = (empty($params['isDropDown']) ? $subbutton['isDropDown'] : $params['isDropDown']);
$subbuttonparam['isDropDown'] = (empty($params['isDropDown']) ? ($subbutton['isDropDown']??false) : $params['isDropDown']);
$out .= dolGetButtonAction('', $langs->trans($subbutton['label']), 'default', $tmpurl, $subbutton['id'] ?? '', $subbutton['perm'], $subbuttonparam);
}
@@ -12502,10 +12508,11 @@ function dolGetButtonAction($label, $text = '', $actionType = 'default', $url =
$langs->load($subbutton['lang']);
}
if (!empty($subbutton['urlroot'])) {
$tmpurl = $subbutton['urlroot'].(empty($params['backtopage']) ? '' : '&backtopage='.urlencode($params['backtopage']));
if (!empty($subbutton['urlraw'])) {
$tmpurl = $subbutton['urlraw']; // Use raw url, no url completion, use only what developer send
} else {
$tmpurl = DOL_URL_ROOT.$subbutton['url'].(empty($params['backtopage']) ? '' : '&backtopage='.urlencode($params['backtopage']));
$tmpurl = !empty($subbutton['urlroot']) ? $subbutton['urlroot'] : $subbutton['url'];
$tmpurl = dolCompletUrlForDropdownButton($tmpurl, $params, empty($subbutton['urlroot']));
}
$out .= dolGetButtonAction('', $langs->trans($subbutton['label']), 'default', $tmpurl, '', $subbutton['perm'], $params);
@@ -12640,6 +12647,42 @@ function dolGetButtonAction($label, $text = '', $actionType = 'default', $url =
}
}
/**
* An function to complete dropdown url in dolGetButtonAction
*
* @param string $url the Url to complete
* @param array|array<string> $params params of dolGetButtonAction function
* @param bool $addDolUrlRoot to add root url
* @return string
*/
function dolCompletUrlForDropdownButton(string $url, array $params, bool $addDolUrlRoot = true)
{
if (empty($url)) {
return '';
}
$parsedUrl = parse_url($url);
if ((isset($parsedUrl['scheme']) && in_array($parsedUrl['scheme'], ['javascript', 'mailto', 'tel'])) || strpos($url, '#') === 0) {
return $url;
}
if (!empty($parsedUrl['query'])) {
// Use parse_str() function to parse the string passed via URL
parse_str($parsedUrl['query'], $urlQuery);
if (!isset($urlQuery['backtopage']) && isset($params['backtopage'])) {
$url.= '&amp;backtopage='.urlencode($params['backtopage']);
}
}
if (!isset($parsedUrl['scheme']) && $addDolUrlRoot) {
$url = DOL_URL_ROOT.$url;
}
return $url;
}
/**
* Add space between dolGetButtonTitle
*