function auto_maillist($output_visible, $test_run, $is_custom = 0, $is_pageloaded = 0)
{
    global $class_path;
    global $site;
    $exec_timer = new Timer();
    # ignore 'STOP' button
    ignore_user_abort(true);
    # set script execution time to CONF["php_max_execution_time"] min only if general value is smaller
    if (intval(ini_get('max_execution_time')) < intval($site->CONF["php_max_execution_time"])) {
        if (ini_get('safe_mode') != true) {
            set_time_limit(intval($site->CONF["php_max_execution_time"]));
        }
    }
    # sets the maximum amount of memory in CONF["php_memory_limit"] Mbytes
    # that a script is allowed to allocate
    # if general value is smaller
    if (intval(ini_get('memory_limit')) < intval($site->CONF["php_memory_limit"])) {
        ini_set("memory_limit", $site->CONF["php_memory_limit"] . "M");
    }
    # et hoida siinset funktsiooni väikesena,
    # includitakse class ainult siis kui toimub väljakutse
    require_once $class_path . "mail.class.php";
    $meilirub = array();
    $artiklid = array();
    $mailing_list = array();
    //$url = $site->CONF["hostname"].$site->CONF["wwwroot"]."/";
    $url = $site->db_hostname . $site->db_wwwroot . '/';
    /* bug #2285 force the using of DB values */
    //$file_path = $site->CONF["protocol"].$site->CONF["hostname"].$site->CONF["wwwroot"].$site->CONF["file_path"];
    $file_path = $site->CONF["protocol"] . $site->db_hostname . $site->db_wwwroot;
    $sql_keel = "select keel_id,encoding,extension, glossary_id from keel where on_kasutusel = '1'";
    $sth_keel = new SQL($sql_keel);
    $site->debug->msg($sth_keel->debug->get_msgs());
    while ($keel = $sth_keel->fetch()) {
        $section_headlines = array();
        $meilirub = array();
        $artiklid = array();
        $meilid = array();
        $msg = array();
        $rubmsg = array();
        $subjects = array();
        $subject = array();
        $clear_to = array();
        $rubmsg_array = array();
        $subjects_array = array();
        ##########################
        # leida rubriigid, millel on meililisti linnuke püsti
        $sql = $site->db->prepare("\r\n\t\t\tSELECT obj_rubriik.objekt_id, objekt.pealkiri\r\n\t\t\tFROM obj_rubriik\r\n\t\t\tLEFT JOIN objekt ON obj_rubriik.objekt_id=objekt.objekt_id\r\n\t\t\tWHERE obj_rubriik.on_meilinglist='1'\r\n\t\t\tAND objekt.keel=?", $keel['keel_id']);
        $sth = new SQL($sql);
        $site->debug->msg($sth->debug->get_msgs());
        ############
        # tsükkel üle rubriikide, panna id-d massiivi
        while ($rub = $sth->fetch()) {
            $mailing_list['section_headlines'][$rub['objekt_id']] = $section_headlines[$rub['objekt_id']] = $rub['pealkiri'];
            $meilirub[] = $rub['objekt_id'];
            $list[$rub['objekt_id']]['title'] = $rub['pealkiri'];
        }
        ##########################
        # 1. ARTIKLID
        # leida kõik meilirubriikide alamartiklid, mis on avaldatud ja meililistiga saatmata
        if (count($meilirub)) {
            $sql = $site->db->prepare("\r\n\t\t\t\tSELECT objekt.objekt_id, objekt.pealkiri, objekt.aeg AS date, obj_artikkel.lyhi, obj_artikkel.sisu, objekt_objekt.parent_id, objekt.created_user_name\r\n\t\t\t\tFROM objekt\r\n\t\t\t\tLEFT JOIN objekt_objekt ON objekt_objekt.objekt_id=objekt.objekt_id\r\n\t\t\t\tLEFT JOIN obj_artikkel ON obj_artikkel.objekt_id=objekt.objekt_id\r\n\t\t\t\tWHERE objekt_objekt.parent_id IN (" . join(',', $meilirub) . ")\r\n\t\t\t\tAND objekt.on_saadetud='0'\r\n\t\t\t\tAND objekt.on_avaldatud='1'\r\n\t\t\t\tAND objekt.tyyp_id=2\r\n\t\t\t\tAND objekt.aeg>? \r\n\t\t\t\tORDER BY objekt_objekt.sorteering DESC", $site->db->ee_MySQL($site->CONF['maillist_send_newer_than']));
            $sth = new SQL($sql);
            $site->debug->msg($sth->debug->get_msgs());
            ############
            # tsükkel üle saatmist vajavate artiklite
            while ($art = $sth->fetch()) {
                $art['date'] = $site->db->MySQL_date($art['date']);
                $artiklid[] = $art['objekt_id'];
                $msg[$art['objekt_id']] = "<p><b>" . ($site->CONF['maillist_article_title'] ? $site->sys_sona(array(sona => "Aeg", tyyp => "kasutaja", lang_id => $keel['glossary_id'])) . " " . $art['date'] : $art['pealkiri']) . "</b></p>";
                if ($art['lyhi']) {
                    $art['lyhi'] = preg_replace("/[\n\\s\r]+\$/", "", $art['lyhi']);
                    $art['lyhi'] = trim($art['lyhi']);
                    $art['lyhi'] = str_replace("##saurus649code##", $file_path, $art['lyhi']);
                    # commented out, bug #423:
                    # $art[lyhi] = preg_replace("/\<.*?\>/","",$art[lyhi]);
                }
                if ($art['sisu']) {
                    $art['sisu'] = preg_replace("/[\n\\s\r]+\$/", "", $art['sisu']);
                    $art['sisu'] = trim($art['sisu']);
                    $art['sisu'] = str_replace("##saurus649code##", $file_path, $art['sisu']);
                }
                if ($site->CONF['maillist_article_content']) {
                    if ($art['lyhi']) {
                        $msg[$art['objekt_id']] .= '<p>' . $art['lyhi'] . '</p>';
                    }
                    if ($art['sisu']) {
                        $msg[$art['objekt_id']] .= '<p>' . $art['sisu'] . '</p>';
                    }
                } else {
                    $msg[$art['objekt_id']] .= '<p>' . $art['lyhi'] . '</p>';
                    $link = $site->CONF['protocol'] . $url . "?id=" . $art['objekt_id'];
                    $msg[$art['objekt_id']] .= '<p>' . $site->sys_sona(array(sona => "Loe edasi", tyyp => "kujundus", lang_id => $keel['glossary_id'])) . ": <a href=\"" . $link . "\">" . $link . "</a>" . '</p>';
                }
                #$msg[$art['objekt_id']] .= "<br>";
                $rubmsg[$art['parent_id']] .= $msg[$art['objekt_id']];
                $list[$art['parent_id']]['articles'][$art['objekt_id']]['title'] = $art['pealkiri'];
                $list[$art['parent_id']]['articles'][$art['objekt_id']]['content'] = $msg[$art['objekt_id']];
                $rubmsg_array[$art['parent_id']][$art['objekt_id']] = $msg[$art['objekt_id']];
                $subjects_array[$art['parent_id']][$art['objekt_id']] = $art['pealkiri'];
                if ($site->CONF["maillist_subject"] == 1) {
                    $subjects[$art['parent_id']] = $section_headlines[$art['parent_id']] . ": " . $art['pealkiri'];
                } elseif ($site->CONF["maillist_subject"] == 2) {
                    $subjects[$art['parent_id']] = $section_headlines[$art['parent_id']];
                } elseif ($site->CONF["maillist_subject"] == 3) {
                    $subjects[$art['parent_id']] = $art['pealkiri'];
                } else {
                    $subjects[$art['parent_id']] = $site->sys_sona(array(sona => "Mailinglists: e-mail subject", tyyp => "kasutaja", lang_id => $keel['glossary_id']));
                    $subjects[$art['parent_id']] = str_replace("[Website name]", $site->CONF["site_name"], $subjects[$art['parent_id']]);
                }
                ### additional values:
                $created_user_names[$art['objekt_id']] = $art['created_user_name'];
                $titles[$art['objekt_id']] = $art['pealkiri'];
            }
            # while art
        }
        # / 1. ARTIKLID
        ######################
        ##########################
        # 2. ASSETID
        # leida kõik meilirubriikide custom assetid (eriobjektid),
        # mis on avaldatud ja meililistiga saatmata
        if (count($meilirub)) {
            $sql = $site->db->prepare("\r\n\t\t\t\tSELECT objekt.objekt_id, objekt.pealkiri, objekt.aeg AS date, obj_asset.*, objekt_objekt.parent_id\r\n\t\t\t\tFROM objekt\r\n\t\t\t\tLEFT JOIN objekt_objekt ON objekt_objekt.objekt_id=objekt.objekt_id\r\n\t\t\t\tLEFT JOIN obj_asset ON obj_asset.objekt_id=objekt.objekt_id\r\n\t\t\t\tWHERE objekt_objekt.parent_id IN (" . join(',', $meilirub) . ")\r\n\t\t\t\tAND objekt.on_saadetud='0'\r\n\t\t\t\tAND objekt.on_avaldatud='1'\r\n\t\t\t\tAND objekt.tyyp_id=20\r\n\t\t\t\tAND objekt.aeg>? \r\n\t\t\t\tORDER BY objekt_objekt.sorteering DESC", $site->db->ee_MySQL($site->CONF['maillist_send_newer_than']));
            $sth = new SQL($sql);
            $site->debug->msg($sth->debug->get_msgs());
            ############
            # tsükkel üle saatmist vajavate assetite
            while ($art = $sth->fetch()) {
                $artiklid[] = $art['objekt_id'];
                $msg[$art['objekt_id']] = "<b>" . ($site->CONF['maillist_article_title'] ? $site->sys_sona(array(sona => "Aeg", tyyp => "kasutaja", lang_id => $keel['glossary_id'])) . " " . $art['date'] : $art['pealkiri']) . "</b><br><br>";
                #########
                # profile data
                $profile_data = array();
                $selectlist = array();
                $need_change_names = array();
                $asset_names = array();
                $profile = $site->get_profile(array(id => $art['profile_id']));
                # sanity check: kui ei leitud sellise id-ga profiili, siis ära edasi mine
                # (siis e-maili saadetakse vaid asseti pealkiri)
                if ($profile[profile_id]) {
                    # attributes
                    if ($profile_def = unserialize($profile[data])) {
                        foreach ($profile_def as $key => $data) {
                            $profile_data[$data[name]] = $art[$key];
                            ##############
                            # save selectlists for later
                            # here values are asset object ID-s
                            if ($data[type] == 'SELECT' || $data[type] == 'MULTIPLE SELECT' || $data[type] == 'RADIO') {
                                # add only if value is not empty
                                if ($art[$key]) {
                                    # value can be comma-separated list of ID-s, split it
                                    $values = split(",", $art[$key]);
                                    foreach ($values as $value) {
                                        $selectlist[] = $value;
                                    }
                                    # remember object: values must be changed later
                                    $need_change_names[] = $data[name];
                                }
                                # if value not epmty
                            }
                            # if select
                        }
                        # foeach profile def row
                        ###################
                        # get selectlist values - 1 extra sql per function; sql is fast
                        if (is_array($selectlist)) {
                            $selectlist = array_unique($selectlist);
                        }
                        #echo printr($selectlist);
                        if (sizeof($selectlist) > 0) {
                            ###############
                            # get names of asset objects
                            $sql2 = $site->db->prepare("SELECT objekt.pealkiri,objekt.objekt_id\tFROM objekt WHERE FIND_IN_SET(objekt.objekt_id,?)", join(",", $selectlist));
                            $sth2 = new SQL($sql2);
                            while ($tmp_names = $sth2->fetch()) {
                                $asset_names[$tmp_names[objekt_id]] = $tmp_names[pealkiri];
                            }
                            ########## loop over existing data
                            foreach ($profile_data as $name => $data) {
                                # if this data type needs changing
                                if (in_array($name, $need_change_names)) {
                                    # change attribute from asset ID => asset NAME
                                    # value can be comma-separated list of ID-s, split it
                                    $ids = split(",", $data);
                                    $new_value = $data;
                                    foreach ($ids as $id) {
                                        $new_value = str_replace($id, $asset_names[$id], $new_value);
                                    }
                                    $profile_data[$name] = $new_value;
                                }
                            }
                            #echo printr($profile_data);
                        }
                    }
                    # attributes
                    ########## loop over data
                    foreach ($profile_data as $name => $data) {
                        $msg[$art['objekt_id']] .= $site->sys_sona(array(sona => $name, tyyp => "custom", lang_id => $keel['glossary_id'])) . ": " . $data . "<br>";
                    }
                    $msg[$art['objekt_id']] .= "<br>";
                }
                # if profile exists
                # / profile data
                #########
                # assetitel panna lingiks parenti e rubriigi ID
                $link = $site->CONF['protocol'] . $url . "?id=" . $art['parent_id'];
                $msg[$art['objekt_id']] .= $site->sys_sona(array(sona => "Loe edasi", tyyp => "kujundus", lang_id => $keel['glossary_id'])) . ": <a href=\"" . $link . "\">" . $link . "</a><br>";
                $msg[$art['objekt_id']] .= "<br><br><br>";
                $rubmsg[$art['parent_id']] .= $msg[$art['objekt_id']];
                $rubmsg_array[$art['parent_id']][$art['objekt_id']] = $msg[$art['objekt_id']];
                $subjects_array[$art['parent_id']][$art['objekt_id']] = $art['pealkiri'];
                if ($site->CONF["maillist_subject"] == 1) {
                    $subjects[$art['parent_id']] = $section_headlines[$art['parent_id']] . ": " . $art['pealkiri'];
                } elseif ($site->CONF["maillist_subject"] == 2) {
                    $subjects[$art['parent_id']] = $section_headlines[$art['parent_id']];
                } elseif ($site->CONF["maillist_subject"] == 3) {
                    $subjects[$art['parent_id']] = $section_headlines[$art['parent_id']];
                } else {
                    $subjects[$art['parent_id']] = $site->sys_sona(array(sona => "Mailinglists: e-mail subject", tyyp => "kasutaja", lang_id => $keel['glossary_id']));
                    $subjects[$art['parent_id']] = str_replace("[Website name]", $site->CONF["site_name"], $subjects[$art['parent_id']]);
                }
            }
        }
        # / 2. ASSETID
        ######################
        ######################
        # meili üldine osa
        if ($site->CONF["maillist_header"]) {
            $header = str_replace("\n", "<br>", $site->CONF["maillist_header"]);
        } else {
            $header = "<br>";
        }
        if ($site->CONF["maillist_footer"]) {
            $footer = str_replace("\n", "<br>", $site->CONF["maillist_footer"]);
        } else {
            $footer = "<br>____________________________________<br>" . $site->CONF["site_name"] . "<br" . $site->CONF['protocol'] . $url;
        }
        if ($site->CONF["maillist_sender_address"]) {
            $from = $site->CONF["maillist_sender_address"];
        } else {
            $from = $site->CONF["from_email"];
        }
        //printr($list);
        ######################
        # leia kasutajate nimed ja e-mailid, kes on meilinglisti tellinud
        $sql = "SELECT users.user_id, users.firstname,users.lastname, users.email, user_mailinglist.objekt_id\r\n\t\tFROM user_mailinglist\r\n\t\t\tLEFT JOIN users ON users.user_id = user_mailinglist.user_id\r\n\t\tWHERE user_mailinglist.user_id<>0 AND (users.is_locked='0' OR ISNULL(users.is_locked)) AND users.email<>''\r\n\t\t";
        $sth = new SQL($sql);
        $site->debug->msg($sth->debug->get_msgs());
        ######################
        # tsükkel üle kasutajate
        $subscribed = array();
        while ($kasutaja = $sth->fetch()) {
            $to = $kasutaja['lastname'] . ' ' . $kasutaja['firstname'] . ' <' . $kasutaja['email'] . '>';
            // subscribed sections
            $subscribed[$to][] = $kasutaja['objekt_id'];
            ################### 1. STANDARD mailinglist
            if (!$is_custom) {
                $meilid[$to] .= $rubmsg[$kasutaja['objekt_id']];
                if ($subjects[$kasutaja['objekt_id']]) {
                    $subject[$to] = $subjects[$kasutaja['objekt_id']];
                }
                $clear_to[$to] = $kasutaja['email'];
            } else {
                #### E-MAIL
                $to = $kasutaja['lastname'] . " " . $kasutaja['firstname'] . " <" . $kasutaja['email'] . ">";
                if ($is_custom) {
                    if (is_array($subjects_array[$kasutaja['objekt_id']])) {
                        foreach ($subjects_array[$kasutaja['objekt_id']] as $art_id => $art_subject) {
                            $art_content = $rubmsg_array[$kasutaja['objekt_id']][$art_id];
                            $mailing_list['email'][$kasutaja['objekt_id']]['articles'][$art_id] = array('subject' => $art_subject, 'message' => $art_content, 'created_user_name' => $created_user_names[$art_id], 'title' => $titles[$art_id]);
                            $mailing_list['email'][$kasutaja['objekt_id']]['users'][$kasutaja['user_id']] = array('to' => $to, 'email' => $kasutaja['email']);
                            $mailing_list['email'][$kasutaja['objekt_id']]['headline'] = $section_headlines[$kasutaja['objekt_id']];
                            $mailing_list['email'][$kasutaja['objekt_id']]['encoding'] = $keel['encoding'];
                        }
                    }
                } else {
                    # standard mailinglist
                    if ($rubmsg[$kasutaja['objekt_id']]) {
                        $meilid[$to] .= $rubmsg[$kasutaja['objekt_id']];
                        $clear_to[$to] = $kasutaja['email'];
                    }
                    if ($subjects[$kasutaja['objekt_id']]) {
                        $subject[$to] = $subjects[$kasutaja['objekt_id']];
                    }
                }
            }
            ############ / 2. CUSTOM mailinglist
        }
        # while kasutaja
        $report_message = "<hr size=1>Sending date: " . date("d.m.Y H:i:s");
        $report_message .= "<hr size=1>Server IP: " . getenv("SERVER_ADDR") . "; Remote IP: " . getenv("REMOTE_ADDR");
        $report_message .= "<hr size=1>Articles/assets in the list: " . join(',', $artiklid) . "<hr size=1>";
        $report_message .= "Next mailing list: " . date("d.m.Y H:i", $site->CONF['next_mailinglist']) . "<hr size=1>";
        $report_message .= "Will send articles/assets newer than: " . $site->CONF['maillist_send_newer_than'] . "<hr size=1>";
        if (!$test_run) {
            ######################
            # panna artiklitel "on_saadetud" linnuke püsti
            if (count($artiklid)) {
                $sql = "UPDATE objekt SET on_saadetud='1' WHERE objekt_id IN (" . join(',', $artiklid) . ")";
                $sth = new SQL($sql);
                $site->debug->msg($sth->debug->get_msgs());
            }
        }
        #######################################################
        # Test-run shows, which letters will be sent:
        if (count($rubmsg)) {
            $testrun_msg_arr2 = array();
            $testrun_msg_arr = array();
            foreach ($meilid as $to => $body) {
                if ($to != '' && $body != '') {
                    $testrun_msg_arr2[$body] = 1;
                }
            }
            unset($to);
            unset($body);
            $msg_cnt = 1;
            foreach ($testrun_msg_arr2 as $key => $value) {
                $testrun_msg_arr[$key] = $msg_cnt;
                $report_message .= "<table border=1 width=700 cellpadding=0 cellspacing=0><tr><td bgcolor=#CCCCCC valign=middle align=center><b>Message[" . $msg_cnt . "]</b></td></tr><tr><td><font size=2>" . $header . $key . $footer . "</font></td></tr></table><br><br>";
                #$testrun_msg_arr[$msg_parent_id] = $msg_cnt;
                $msg_cnt++;
            }
        }
        ######################
        # meilide saatmine
        $mail_ok_count = 0;
        $mail_error_count = 0;
        $mail_count = 0;
        if (sizeof($meilid) > 0) {
            $report_message .= "<b>Send news to:<br></b>";
            foreach ($meilid as $to => $body) {
                $send_status = 0;
                if ($to != '' && $body != '') {
                    $send_status = check_mail_mx($clear_to[$to]);
                    if (!$test_run && $send_status) {
                        // send mail for each section
                        if ($site->CONF['mailinglist_sending_option'] == 1) {
                            foreach ($list as $section_id => $section) {
                                if (in_array($section_id, $subscribed[$to]) && sizeof($section['articles'])) {
                                    $body = '';
                                    foreach ($section['articles'] as $article) {
                                        $body .= $article['content'];
                                    }
                                    if ($site->CONF['maillist_subject'] == 1) {
                                        $subject = $section['title'] . ': ' . $article['title'];
                                    } elseif ($site->CONF['maillist_subject'] == 2) {
                                        $subject = $section['title'];
                                    } elseif ($site->CONF['maillist_subject'] == 3) {
                                        $subject = $article['title'];
                                    } else {
                                        $subject = $site->sys_sona(array(sona => 'Mailinglists: e-mail subject', tyyp => 'kasutaja', lang_id => $keel['glossary_id']));
                                        $subject = str_replace('[Website name]', $site->CONF['site_name'], $subject);
                                    }
                                    $send_status = send_mailinglist_message($header, $body, $footer, $keel['encoding'], $subject, $to, $from);
                                }
                            }
                        } elseif ($site->CONF['mailinglist_sending_option'] == 2) {
                            foreach ($list as $section_id => $section) {
                                if (in_array($section_id, $subscribed[$to]) && sizeof($section['articles'])) {
                                    foreach ($section['articles'] as $article) {
                                        if ($site->CONF['maillist_subject'] == 1) {
                                            $subject = $section['title'] . ': ' . $article['title'];
                                        } elseif ($site->CONF['maillist_subject'] == 2) {
                                            $subject = $section['title'];
                                        } elseif ($site->CONF['maillist_subject'] == 3) {
                                            $subject = $article['title'];
                                        } else {
                                            $subject = $site->sys_sona(array(sona => 'Mailinglists: e-mail subject', tyyp => 'kasutaja', lang_id => $keel['glossary_id']));
                                            $subject = str_replace('[Website name]', $site->CONF['site_name'], $subject);
                                        }
                                        $send_status = send_mailinglist_message($header, $article['content'], $footer, $keel['encoding'], $subject, $to, $from);
                                    }
                                }
                            }
                        } else {
                            $send_status = send_mailinglist_message($header, $body, $footer, $keel['encoding'], $subject[$to], $to, $from);
                        }
                    }
                    $report_message .= "<b>[" . $testrun_msg_arr[$body] . "]</b> ";
                    $report_message .= htmlspecialchars($to) . ($send_status ? "" : " <font color=red><b>bad mail</b></font>") . "<br>\n";
                    $mail_count++;
                    if ($send_status) {
                        $mail_ok_count++;
                    } else {
                        $mail_error_count++;
                    }
                }
            }
            $report_message .= "<hr size=1><b>DEBUG ONLY: Mailinglists sent to " . $mail_count . " users. Successfully sent: " . $mail_ok_count . ", Error occurred during sending: " . $mail_error_count . ", Execution time: " . $exec_timer->get_aeg() . ".</b>";
            if ($test_run) {
                echo $report_message;
            } elseif ($mail_count) {
                $reporter_address = $site->CONF["maillist_reporter_address"];
                if ($reporter_address) {
                    $headers = "MIME-Version: 1.0\r\n";
                    $headers .= "Content-type: text/html; charset=" . $keel['encoding'] . "\r\n";
                    $headers .= "From: " . $site->CONF["from_email"] . "\r\n";
                    mail($reporter_address, "Mailinglist report from site: " . $site->CONF["site_name"], wordwrap($report_message, 70), $headers);
                }
            }
        }
        # kui on, mida saata
        # / meilide saatmine
        ######################
        ######################
        # kirjuta log lõpetamisest
        # ainult siis, kui mõni meil üldse saadeti
        if ($mail_count && !$test_run) {
            new Log(array('action' => 'send', 'component' => 'Mailinglist', 'user_id' => $is_pageloaded ? 0 : $site->user->id, 'message' => "Mailinglists sent to " . $mail_count . " users. Successfully sent: " . $mail_ok_count . ", Error occurred during sending: " . $mail_error_count . ", Execution time: " . $exec_timer->get_aeg()));
        }
    }
    # while keel
    if ($is_custom) {
        $mailing_list['header'] = $header;
        $mailing_list['footer'] = $footer;
        $mailing_list['from'] = $from;
        return $mailing_list;
    }
}
 /**
 * load_aclpermissions 
 * 
 * returns all acl (group) permissions for guest (that means for group Everybody);
 * returns 0 if failed;
 * function is not called by default in site class but
 * in edit-group-window and edit-user-window, 
 * also in all templates where any group or user info is used/printed/etc
 * 
 * 
 * @package CMS
 * 
 * @param -
 */
 function load_aclpermissions()
 {
     $args = $this->args;
     $perm = array();
     $timer = new Timer();
     # alustame m??????tmine
     ######### GET EVERYBODY GROUP
     $grouptree = get_grouptree(array("group_id" => ''));
     foreach ($grouptree as $key => $group) {
         $group_names[] = $group['name'];
         $group_arr[] = $group['id'];
         $group_msg[] = $group['name'] . " (ID " . $group['id'] . ")";
     }
     $this->debug->msg("Guest group info: " . join(" => ", $group_msg));
     ######### LOAD ALL EVERYBODY GROUP PERMISSIONS: type ACL
     $sql = $this->site->db->prepare("SELECT * FROM permissions WHERE type=? ", 'ACL');
     $sql .= $this->site->db->prepare(" AND (group_id IN('" . join("','", $group_arr) . "') AND user_id=?)", 0);
     #print $sql;
     $sth = new SQL($sql);
     $cemented_perm = array();
     while ($permtmp = $sth->fetch('ASSOC')) {
         $obj_id = $permtmp['source_id'];
         if ($permtmp['group_id']) {
             # group permission
             $cemented_perm[$obj_id] = $permtmp;
         }
     }
     $this->debug->msg("ACL permissions loaded:  " . sizeof(array_keys($cemented_perm)) . " permissions found. Load time: " . $timer->get_aeg());
     ########### RETURN PERMISSIONS
     return $cemented_perm;
 }