On Sep 24, 4:49 pm, The Editor <[email protected]> wrote:
> DM, I have no problem doing this but I'm not 100% sure I see the
> advantage. Can you tell me exactly what this does for you?
It stops Boltwire having to construct a string only to deconstruct it
again. So anything that isnt text input from the start but needs to
call a function can do so faster and with less problems.
It also bypasses the problem of having to escape single-qoutes in
comm2func entirely.
>
> It allows you to generate your own list of args and send them to
> BOLTfunc, without having to go through BOLTargs? This might also
> simplify the comm2func function as well...
>
> I suppose breaking down functions is a good choice--gives more
> granularity. But shouldn't we put toolmapping and translation into the
> BOLTMfunc? And leave BOLTfunc for just raw output handling?
I see markup as "taking a string and outputing something boltwire can
understand" wheres as engine should be "anything boltwire does". So I
think the logical choice would be the divide I suggested.
Consider someone making a plugin in, say, chinese, and wanting to tap
into another boltwire function, like search. They don't want to have
to construct a string like in BOLTMfunc, but they do want to haave
access to translation and output. The logical thing to do would be to
call
BOLTfunc("search", $newargs);
>
> Cheers,
> Dan
>
> On Wed, Sep 23, 2009 at 12:45 PM, DrunkenMonk <[email protected]> wrote:
>
> > Looked at seperating out code into engine function BOLTfunc, and I
> > like it.
>
> > I makes it easy to call other functions from plugins going through
> > both BOLTauth and translate.
>
> > AND it solved my problem.
>
> > AND BOLTMfunc is actually a markup function now.
>
> > GOD I hope you agree that this is the way to go, Dan, cause I've just
> > edit my core-files :p
>
> > Here is my suggestion. Comments have not been re-written.
>
> > function BOLTMfunc($params, $zone='') {
> > ## THIS IS THE FUNCTION THAT HANDLES THE VARIOUS FUNCTION MARKUPS. IT
> > ALSO HANDLES MANY OUTPUT OPTIONS INCLUDING: FALSE, SOURCE, NOLINES,
> > CSV, & ESCAPE
> > global $pageLink, $actionLink, $BOLTtoolmap, $Token;
> > $params = BOLTstripslashes($params);
> > if (strpos($params, " ") !== false) {
> > $function = substr($params, 0, strpos($params, " "));
> > $params = substr($params, strlen($function));
> > $args = BOLTargs($params, "f_$function");
> > }
> > else {
> > $function = $params;
> > $args = Array();
> > }
> > $value = BOLTfunc($function, $args);
> > return $value;
> > }
>
> > function BOLTfunc($function, $args, $zone='') {
> > global $pageLink, $actionLink, $BOLTtoolmap, $Token;
>
> > $function = strtolower($function);
>
> > if ($args['stopwatch'] == 'true') {$m = microtime(); $t1 = substr($m,
> > -10) . substr($m, 1, 6);}
> > if ($BOLTtoolmap['f'][$function] != '') $function = $BOLTtoolmap['f']
> > [$function];
> > else $function = BOLTtranslate($function, '', 1);
> > if (function_exists("BOLTF$function")) {
> > $BOLTfunction = "BOLTF$function";
> > if (! BOLTexists('site.auth.functions')) $value =
> > $BOLTfunction
> > ($args, $zone);
> > elseif ((BOLTauth($pageLink, $function, 'functions')) ||
> > (BOLTauth
> > ($actionLink, $function, 'functions'))) $value = $BOLTfunction($args,
> > $zone);
> > else {
> > $c = 0;
> > while (isset($msg["function_not_enabled_$c"])) {$c =
> > $c + 1;}
> > BOLTabort("function_not_enabled_$c", "Function $1
> > not enabled for
> > this page.~$function");
> > }
> > }
> > if (isset($args['output'])) {
> > if (preg_match('/^\~\~([0-9]+)\~\~$/', $value) == 1) {
> > $escape = substr($value, 2, -2);
> > $value = $Token[$escape];
> > }
> > switch($args['output']) {
> > case 'false' : return; break;
> > case 'source' : $value = str_replace("\n", '<br />',
> > $value);
> > break;
> > case 'nolines' : $value = str_replace("\n", ' ',
> > $value); break;
> > case 'csv' : $value = str_replace("\n", ',',
> > $value); break;
> > }
> > if (isset($escape) || $args['output'] == 'escape') $value =
> > BOLTescape($value);
> > }
> > if ($args['stopwatch'] == 'true') {
> > global $BOLTstopWatchMsg;
> > $m = microtime(); $t2 = substr($m, -10) . substr($m, 1, 6);
> > $t = substr($t2 - $t1, 0, 6);
> > $BOLTstopWatchMsg = $BOLTstopWatchMsg . "<br /
> >> Function $function took $t seconds";
> > }
> > return $value;
> > }
> > On Sep 23, 6:23 pm, DrunkenMonk <[email protected]> wrote:
> >> The result is now:
>
> >> UPDATE kmsortiment_st SET name='(?name)' , category='(?cat)
> >> ' ,
> >> typ='(?typ)' , base_price=30 , km_price=35 , box_size=20 ,
> >> unit='(?u)' , group_unit='(?gu)' WHERE id=1
>
> >> Another place where things are going to be escaped weirdly. There must
> >> be a better way to do this.
>
> >> What if we added a third argument to BOLTMfunction,
>
> >> // Don't do this, use the next suggestion
> >> BOLTMfunction($params, $zone='', $args='')
>
> >> and joined the BOLTargs argument? we wouldnt need to parse the array
> >> in BOLTcomm2func as a string, only to be parsed back as an array.
>
> >> Alternately, BOLTargs would have to unescape. BUT in that case we
> >> would have to force all inputs to BOLTargs to be escaped in the first
> >> place, and I don't like the thought of sending escaped strings around
> >> boltwire. Boltwire should always expect utf input to all functions.
> >> Also, composing a string only to have it parsed into an array is a
> >> strange thing to do. In this (and other cases, like memberships) I
> >> think you should strive to order things in lists/arrays as soon as
> >> possible.
>
> >> If I may go into stingy mode, I actually don't like how much
> >> BOLTMfunctions does anyway. It's a markup, it should take string input
> >> and output something boltwire can use, not handle options. I strongly
> >> suggest moving all logic out to a
>
> >> // this, right here, is the proverbial shit.
> >> BOLTfunction($function, $args, $field)
>
> >> function. BOLTMfunction would be left taking a string, calling
> >> BOLTargs, and passing the result to BOLTfunction. Other boltwire-
> >> functions would then simply tap into BOLTfunction directly, without
> >> risking problems with BOLTargs. Much prettier. The engine should never
> >> have to call markup except on content.
>
> >> The colossal amount of search and replace going on in the engine isn't
> >> optimal anyway. Lets do without. Faster, prettier, less bug prone IS
> >> the way to go.
>
> >> On Sep 22, 8:47 pm, The Editor <[email protected]> wrote:
>
> >> > On Tue, Sep 22, 2009 at 1:58 PM, DrunkenMonk <[email protected]> wrote:
>
> >> > > On Sep 22, 5:14 pm, The Editor <[email protected]> wrote:
> >> > >> What version are you using? If you recall I reworked the comm2func
> >> > >> function in a recent release to handle this better, but don't see it
> >> > >> documented, so perhaps it was more recent. (I'm thinking it was 3.14).
> >> > >> Anyway check to see if you have this line in your comm2func function:
>
> >> > >> foreach($args as $f => $v) $value .= "$f='" .
> >> > >> str_replace(Array("'",
> >> > >> '"'), Array(''', '"'), $v) . "' ";
>
> >> > > I couldn't see this, so I upgraded to 3.15 from 3.14
> >> > > Didn't help, and I still can't find the "str_replace" part.
>
> >> > > Are you sure you included it in the release?
>
> >> > No, it could be just on mine. It will be in the next one though. It is
> >> > in engine.php, line 453, replace a very similar line to the following
> >> > to the following:
>
> >> > foreach($args as $f => $v) $value .= "$f='" .
> >> > str_replace(Array("'",
> >> > '"'), Array(''', '"'), $v) . "' ";
>
> >> > It just escapes any parameters in a form value from messing up the
> >> > parsing of the arg array... I had problems with the rss plugin. Guess
> >> > it was been since the last release. Must by why it wasn't documented!
> >> > :)
>
> >> > > Yeah... I have full mysql functionality, essentially the mysql command
> >> > > line accessible via boltwire. I don't want to dumb that down when the
> >> > > function-version works perfectly fine.
> >> > > In fact, I currently have an easier time formatting output with mysql
> >> > > than with templates. Especially given mysqls inbuilt math functions.
>
> >> > > Once we get this string-escape fixed I'll show you how simple and
> >> > > powerful my solution is to use. I'm sure you'll see it my way.
>
> >> > I am excited. Now that I think about it, you are no doubt right. It
> >> > would be better to have full msql functionality. That probably is how
> >> > I would have done it after thinking about it a bit more. Not sure how
> >> > you have handled security though. A simple dumbed down peek function
> >> > and poke command might be useful, with the full query function
> >> > available perhaps to admins or something. Otherwise, how are you going
> >> > to limit the queries? Pardon my ignorance of msql. Haven't looked
> >> > into it much. Just thinking out loud. It would be nice to have a
> >> > simple security interface with BoltWire, but that may not be possible.
>
> >> > Cheers,
> >> > Dan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"BoltWire" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/boltwire?hl=en
-~----------~----~----~----~------~----~------~--~---