Forum Activity

Forum feed

How to make this function API compliant.  Top

  • I am using this code to sort some of my arrays and I was wondering if someone could help me add it to my pnuserapi.php. Also how would I call it from pnuser.php? It works great puting in side the function but I would like to keep everything compliant if possible. Thanks in advance.

    Code

    //Array Sort Function from http://www.zend.com/codex.php?id=501&single=1
    //metanurb
    function aasort(&$array, $args) {
        foreach($args as $arg) {
            $order_field = substr($arg, 1, strlen($arg));
            foreach($array as $array_row) {
                $sort_array[$order_field][] = $array_row[$order_field];
            }
            $sort_rule .= '$sort_array['.$order_field.'], '.($arg[0] == "+" ? SORT_ASC : SORT_DESC).',';
        }
        eval ("array_multisort($sort_rule".' &$array);');
    }
    /*
    Syntax: aasort($assoc_array, array("+first_key", "-second_key", etc..));

    Example: aasort($db_array, array("+ID", "-AGE", "+NAME"));
    Where the "+" in front of the keys stands for "ASC" and "-" for "DESC".
    */
  • Functions is the userapi need to be named <module>_userapi_function. The function then takes an arguments array.

    So the function looks like

    Code

    function <yourmodulename_userapi_yourfunctioname($args)
    {
        // Get arguments from argument array - all arguments to this function
        // should be obtained from the $args array, getting them from other
        // places such as the environment is not allowed, as that makes
        // assumptions that will not hold in future versions of PostNuke
        extract($args);

    ......

    }


    The function is then called using a call to pnModAPIFunc('modulename', 'type', 'func', argsarray) having first loaded the user API

    loading and calling a function is

    Code

    ......
        // Load API.  All of the actual work for the creation of the new item is
        // done within the API, so we need to load that in before we can do
        // anything.  If the API fails to load an appropriate error message is
        // posted and the function returns
        if (!pnModAPILoad('module', type')) {
            pnSessionSetVar('
    errormsg', _LOADFAILED);
            return $output->GetOutput();
        }

        // call the apu function
        $mid = pnModAPIFunc('
    module',
                            '
    type',
                            '
    function',
                            array('
    parameter1' => $paramter1,
                                   '
    parameter2' => $paramter2,
                                   etc..... ));
    .......


    -Mark</module>
  • Hey mark, been a while.. I understand the format it should be in. I just can get the original function converted over and call it properly.. Probably figure it out like always right after I send this post off.. Thanks again.
  • In which case it would be something like

    Code

    function <module>_userapi_aasort($args)
    {
        $returnarray = array();
        foreach($args as $arg) {
            $order_field = substr($arg, 1, strlen($arg));
            foreach($array as $array_row) {
                $sort_array[$order_field][] = $array_row[$order_field];
            }
            $sort_rule .= '$sort_array['.$order_field.'], '.($arg[0] == "+" ? SORT_ASC : SORT_DESC).',';
        }
        eval ("array_multisort($sort_rule".' $returnarray);');

        return $returnarray;
    }


    -Mark
  • Thanks once again but I'm having a heck of a time getting the arguments over to the API. The function is looking for $array and $args. I have tried

    Code

    $returnarray = pnModAPIFunc('Wdpool',
                            'user',
                            'aasort',
                            array('array' => $fortiebreaking,
                                   'args' => $sortbys));


    I have also tried changing the function to look for $sortby instead of $args and I still get Invalid argument supplied for foreach()
    That is for the frist foreach that looks for the $args or $sortby array.
  • I got it working. Thanks again for your help Mark.. Here is what I got incase anyone else was following this thread. I wish I would have found this function months ago, would have saved me a lot of time and trouble with sorting these arrays..

    Code

    $sortbys=array("-field1", "+field5");

        // call the apu function
        $returnarray = pnModAPIFunc('modname',
                            'user',
                            'aasort',
                            array('array' => $arraytosort,
                                   'args' => $sortbys));


    Code

    function modname_userapi_aasort($args)
    {
    extract($args);
        $returnarray = $array;
        foreach($args as $arg) {
            $order_field = substr($arg, 1, strlen($arg));
            foreach($array as $array_row) {
                $sort_array[$order_field][] = $array_row[$order_field];
            }
            $sort_rule .= '$sort_array['.$order_field.'], '.($arg[0] == "+" ? SORT_ASC : SORT_DESC).',';
        }
      //  eval ("array_multisort($sort_rule".' $returnarray);');
    eval ("array_multisort($sort_rule".' &$returnarray);');
        return $returnarray;
    }

This list is based on the users active over the last 60 minutes.