[TYPO3-english] Plugin Development
Kay Strobach
typo3 at kay-strobach.de
Thu Sep 3 20:16:04 CEST 2009
Hello guys,
I'm currently having some problem with changing TSconstants as non
privileged user.
The problem came up during the development of a customer management
solution in typo3, which enables typo3 to handle many customers in one
installation.
Systemenvironment:
TYPO3 4.2.8
Templavoila
PHP 5.x
Project
CMS for primary and secondary schools germany saxony ;)
Problemdescription:
The following code works perfectly as BE User with admin=1.
It should calculates the value of all constants for the fe. And
changes the one defined with name und sets it to the given
value.
Is there anyway to make a normal user temporaly admin?
I thought, that it would be possible to do it with
$GLOBALS['BE_USER']->user['admin']=1;
And setting it back to the previous value.
As seen in the code below.
The other solution would be a reimplementation of the used
classes, i would be happy if i could avoid this. And by pass the
security layer with database queries.
Thanks
Best Regards
Kay Strobach
function setTSConstantValue($pid,$name,$value) {
$userStatus = $GLOBALS['BE_USER']->user['admin'];
$GLOBALS['BE_USER']->user['admin']=1;
$template_uid = 0;
$pageId = $pid;
$tmpl = t3lib_div::makeInstance("t3lib_tsparser_ext"); // Defined
global here!
$tmpl->tt_track = 0; // Do not log time-performance information
$tmpl->init();
$tplRow = $tmpl->ext_getFirstTemplate($pageId,$template_uid);
if (is_array($tplRow) || 1) {
$sys_page = t3lib_div::makeInstance("t3lib_pageSelect");
$rootLine = $sys_page->getRootLine($pageId);
$tmpl->runThroughTemplates($rootLine,$template_uid); // This generates
the constants/config + hierarchy info for the template.
$theConstants = $tmpl->generateConfig_constants(); // The editable
constants are returned in an array.
$tmpl->ext_categorizeEditableConstants($theConstants); // The returned
constants are sorted in categories, that goes into the $tmpl->categories
array
$tmpl->ext_regObjectPositions($tplRow["constants"]); // This array
will contain key=[expanded constantname], value=linenumber in template.
(after edit_divider, if any)
$tmpl->ext_putValueInConf($name,$value);
$recData=array();
$saveId = $tplRow['_ORIG_uid'] ? $tplRow['_ORIG_uid'] : $tplRow['uid'];
$recData["sys_template"][$saveId]["constants"] =
implode($tmpl->raw,chr(10));
// Create new tce-object
$tce = t3lib_div::makeInstance("t3lib_TCEmain");
$tce->admin =1;
$tce->stripslashes_values=0;
// Initialize
$tce->start($recData,Array());
// Saved the stuff
$tce->process_datamap();
// Clear the cache (note: currently only admin-users can clear the
cache in tce_main.php)
$tce->clear_cacheCmd("all");
$tce->admin = $userStatus;
$GLOBALS['BE_USER']->user['admin']=$userStatus;
} else {
throw new Exception('No Template found!!!');
}
}
More information about the TYPO3-english
mailing list