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 /
> >>&nbsp;&nbsp;&nbsp;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=&#39;(?name)&#39; , category=&#39;(?cat)
> >> &#39; ,
> >>  typ=&#39;(?typ)&#39; , base_price=30 , km_price=35 , box_size=20 ,
> >> unit=&#39;(?u)&#39; , group_unit=&#39;(?gu)&#39; 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('&#39;', '&#34;'), $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('&#39;', '&#34;'), $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
-~----------~----~----~----~------~----~------~--~---

Reply via email to