ilch Forum » Ilch CMS 2.X » Fehlersuche und Probleme » Menü und Rechte Fehler

Geschlossen
  1. #1
    User Pic
    MonkeyOnKeyboard Moderator
    Registriert seit
    10.02.2014
    Beiträge
    437
    Beitragswertungen
    20 Beitragspunkte
    Nabend zusammen.

    Ich habe einen Fehler.

    wenn ich ein Menü für mehrere Gruppen ausblenden möchte geht das. nur hab ich ein Benutzer der in mehreren Gruppen drin ist und eine davon wurde in der ansicht nicht ausgeblendet. dennoch sieht er das menü und den inhalt nicht.

    BSP:

    hauptmanstein ist in der Gruppe CLAN und Personal.
    Ich habe das Menü für user, guest, CLAN ausgeblendet. <- also Müsste er es ja sehen. da er noch in der Gruppe Personal ist.

    Nun das Problem. er sieht es nicht.

    >Woran liegt das.<

    Aktuelles Ilch 2.1.16


    verwendete ilch Version: 2.1.x

    betroffene Homepage: www.r1sing.de
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.298
    Beitragswertungen
    360 Beitragspunkte
    Kann das Verhalten nachvollziehen, aber muss man sich mal genauer anschauen.

    redmine.ilch2.de/issues/500


    Zuletzt modifiziert von blackcoder am 29.10.2018 - 17:42:30
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    MonkeyOnKeyboard Moderator
    Registriert seit
    10.02.2014
    Beiträge
    437
    Beitragswertungen
    20 Beitragspunkte
    ZitatZitat geschrieben von blackcoder
    Kann das Verhalten nachvollziehen, aber muss man sich mal genauer anschauen.

    redmine.ilch2.de/issues/500


    Zuletzt modifiziert von blackcoder am 29.10.2018 - 17:42:30


    Gibt es schon was neues
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Talo Mitglied
    Registriert seit
    20.05.2018
    Beiträge
    29
    Beitragswertungen
    1 Beitragspunkte
    ist mir auch schon aufgefallen, dass sich die beiden Berechtigungskonzepte in die Quere kommen.

    Am einfachsten wäre, ein explizites verbieten schlägt jedes erlauben. Ein nicht erlauben kann durch ein explizites erlauben übersteuert werden.

    Das Verhalten der Benutzergruppe Administratoren hat sich auch während des letzten Quartals geändert oder?
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Ich schaue es mir die Tage noch mal an.
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Geini82 Mitglied
    Registriert seit
    29.05.2014
    Beiträge
    29
    Beitragswertungen
    3 Beitragspunkte
    Ich habe ein ähnliches Problem mit dem Adminbereich ansich..

    habe Gruppen, die z.B. Artikel verfassen dürfen und Teams bearbeiten.. dafür brauchen Sie Zugang zum Adminpanel (logisch).
    Gebe ich diesen Gruppen eine weitere Gruppe, die diese Berechtigung nicht hat, so ist der Link zum Adminpanel ausgeblendet. (Ohne diese zusätzliche Gruppe ist der Link da und die User sehen das, wozu Sie berechtigt sind)

    Immo. geht nur der Weg, diesen User (bis zur Problemlösung) volle Adminrechte einzuräumen..

    wäre Nett, wenn ihr da auch mal gucken könntet, wenn ihr da eh schon an den Rechten dran seit.


    Dank und Gruß!
    Gruß, der Geini

    Visit our BF4-Clan on: Drunkn DuKs
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Slipi ilch.de Design
    Registriert seit
    19.01.2018
    Beiträge
    939
    Beitragswertungen
    117 Beitragspunkte
    ZitatZitat geschrieben von Geini82
    Ich habe ein ähnliches Problem mit dem Adminbereich ansich..

    habe Gruppen, die z.B. Artikel verfassen dürfen und Teams bearbeiten.. dafür brauchen Sie Zugang zum Adminpanel (logisch).
    Gebe ich diesen Gruppen eine weitere Gruppe, die diese Berechtigung nicht hat, so ist der Link zum Adminpanel ausgeblendet. (Ohne diese zusätzliche Gruppe ist der Link da und die User sehen das, wozu Sie berechtigt sind)

    Immo. geht nur der Weg, diesen User (bis zur Problemlösung) volle Adminrechte einzuräumen..

    wäre Nett, wenn ihr da auch mal gucken könntet, wenn ihr da eh schon an den Rechten dran seit.


    Dank und Gruß!


    Grüße

    Kann dein Problem nicht nachvollziehen, da deine Schilderung bei mir funktioniert.
    Versuche den User die Gruppe so einzuteilen, das die Gruppe mit adminrecht als erster Stelle steht (Administration, User( so hab ich es getestet)).

    Slipi
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Geini82 Mitglied
    Registriert seit
    29.05.2014
    Beiträge
    29
    Beitragswertungen
    3 Beitragspunkte
    ZitatZitat geschrieben von Slipi

    Versuche den User die Gruppe so einzuteilen, das die Gruppe mit adminrecht als erster Stelle steht (Administration, User( so hab ich es getestet)).


    Das ist bei mir der Fall... Die Gruppe mit Adminrechten liegt quasi "vor" der ohne..
    Aber wenn du schon anfängst, von wegen "du musst gucken welche Reihenfolge", dann scheint da ja was nicht zu stimmen..
    Demnach müsste man ja ewig fummeln, wenn im laufenden Betrieb ne Gruppe mit Berechtigung dazu kommen würde..
    Gruß, der Geini

    Visit our BF4-Clan on: Drunkn DuKs
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    Die Reihenfolge spielt da keine Rolle, wenn jemand einen Rang zugeteilt bekommt, müsste dieser auch die Rechte dazu erhalten.
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Slipi ilch.de Design
    Registriert seit
    19.01.2018
    Beiträge
    939
    Beitragswertungen
    117 Beitragspunkte
    ZitatZitat geschrieben von Geini82

    Aber wenn du schon anfängst, von wegen "du musst gucken welche Reihenfolge", dann scheint da ja was nicht zu stimmen..
    Demnach müsste man ja ewig fummeln, wenn im laufenden Betrieb ne Gruppe mit Berechtigung dazu kommen würde..


    Meine Aussage beruht sich nach meiner Seite und war nur ein Vorschlag und keine Anweisung, da dein Problem bei mir nicht nachvollziehbar ist.

    Slipi
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Geini82 Mitglied
    Registriert seit
    29.05.2014
    Beiträge
    29
    Beitragswertungen
    3 Beitragspunkte
    ZitatZitat geschrieben von Slipi

    Meine Aussage beruht sich nach meiner Seite und war nur ein Vorschlag und keine Anweisung, da dein Problem bei mir nicht nachvollziehbar ist.


    Sorry, kam von mir vllt. ein wenig "hart" rüber..
    bin z.Z. ziemlich kurz angebunden.


    ZitatZitat geschrieben von Nex4T

    Die Reihenfolge spielt da keine Rolle...


    Ja, so dachte ich auch und sollte auch so sein..
    nur irgendwie haut's den Admin-Link raus, sobald ich bestimmte Gruppe ohne Adminzugang den Usern zuweise.


    Werd das mal genauer Dokumentieren und dazu n eigenen Thread aufmachen, ist dann sicherlich besser und übersichtlicher zwinker
    Gruß, der Geini

    Visit our BF4-Clan on: Drunkn DuKs
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Nex4T Moderator
    Registriert seit
    28.02.2007
    Beiträge
    3.414
    Beitragswertungen
    213 Beitragspunkte
    Meiner Meinung nach ist das Rechte System an sich etwas verwirrend und ich bin davon überzeugt es wird in laufe der Zeit etwas einfacher Gestaltet.
    while(!asleep()) sheep++;
    www.movely.biz
    www.webplant.eu
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    raknaks Mitglied
    Registriert seit
    21.11.2018
    Beiträge
    53
    Beitragswertungen
    0 Beitragspunkte
    ZitatZitat geschrieben von Nex4T
    Meiner Meinung nach ist das Rechte System an sich etwas verwirrend und ich bin davon überzeugt es wird in laufe der Zeit etwas einfacher Gestaltet.


    Dem muss ich mich leider anschließen, die rechte verwaltung war unter 1.1P irgendwie schlüssiger.
    0 Mitglieder finden den Beitrag gut.
  14. #14
    User Pic
    MonkeyOnKeyboard Moderator
    Registriert seit
    10.02.2014
    Beiträge
    437
    Beitragswertungen
    20 Beitragspunkte
    Nächster Fehler mit Berechtigungen.

    Ich teile dem Mitglied verschiedene Gruppen zu. eine Gruppe hat erlaubten zugriff auf ein bestimmtes Modul. die anderen nicht.

    Es wird wieder wie in meinem Ersten Post nicht alles beachtet. und der Member bekommt den Fehler keine Berechtigung. Obwohl er eine Gruppe drin hat, die berechtigt ist.

    Und wenn ich einer Gruppe das Recht gebe, die Seiten zu bearbeiten. funktioniert das auch nicht. Wird nicht angezeigt im backend
    0 Mitglieder finden den Beitrag gut.
  15. #15
    User Pic
    BlackDrain Mitglied
    Registriert seit
    20.05.2018
    Beiträge
    2
    Beitragswertungen
    0 Beitragspunkte
    haben den selben Fehler, gibt es schon einen neuen Status?
    0 Mitglieder finden den Beitrag gut.
  16. #16
    User Pic
    MonkeyOnKeyboard Moderator
    Registriert seit
    10.02.2014
    Beiträge
    437
    Beitragswertungen
    20 Beitragspunkte
    moin, gibt es schon eine Lösung für das Rechte Problem?
    0 Mitglieder finden den Beitrag gut.
  17. #17
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Schau ich mir noch mal an. Ich melde mich dazu.
    0 Mitglieder finden den Beitrag gut.
  18. #18
    User Pic
    corian Entwickler
    Registriert seit
    16.06.2011
    Beiträge
    1.096
    Beitragswertungen
    122 Beitragspunkte
    Hey, bitte den Code so abändern und testen lächeln

    "application\libraries\Ilch\Layout\Helper\Menu\Model.php"
    <?php
    /**
     * @copyright Ilch 2.0
     * @package ilch
     */
    
    namespace Ilch\Layout\Helper\Menu;
    
    use Ilch\Layout\Base as Layout;
    use Modules\Admin\Models\MenuItem;
    
    class Model
    {
        /**
         * Id of the menu.
         *
         * @var integer
         */
        protected $id;
    
        /**
         * Title of the menu.
         *
         * @var string
         */
        protected $title;
    
        /**
         * @var \Modules\Admin\Mappers\Menu
         */
        protected $menuMapper;
        /**
         * @var \Modules\Admin\Mappers\Box
         */
        protected $boxMapper;
        /**
         * @var \Modules\Admin\Mappers\Page
         */
        protected $pageMapper;
        /**
         * @var string
         */
        protected $currentUrl;
    
        /**
         * Injects the layout.
         *
         * @param Layout $layout
         */
        public function __construct(Layout $layout)
        {
            $this->layout = $layout;
    
            $this->menuMapper = new \Modules\Admin\Mappers\Menu();
            $this->boxMapper = new \Modules\Admin\Mappers\Box();
            $this->pageMapper = new \Modules\Admin\Mappers\Page();
            $this->currentUrl = $layout->getCurrentUrl();
        }
    
        /**
         * Sets the menu id.
         *
         * @param integer $id
         */
        public function setId($id)
        {
            $this->id = (int)$id;
        }
    
        /**
         * Gets the menu id.
         *
         * @return integer
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * Sets the menu title.
         *
         * @param string $title
         */
        public function setTitle($title)
        {
            $this->title = (string)$title;
        }
    
        /**
         * Gets the menu title.
         *
         * @return string
         */
        public function getTitle()
        {
            return $this->title;
        }
    
        /**
         * Gets the menu items as html-string.
         *
         * @param string $tpl
         * @param array $options
         * @return string
         */
        public function getItems($tpl = '', $options = [])
        {
            $groupIds = [3];
            $adminAccess = '';
            if ($this->layout->getUser()) {
                $groupIds = [];
                foreach ($this->layout->getUser()->getGroups() as $groups) {
                    $groupIds[] = $groups->getId();
                }
    
                if($this->layout->getUser()->isAdmin()){
                    $adminAccess = true;
                }
            }
    
            $items = $this->menuMapper->getMenuItemsByParent($this->getId(), 0);
            if (empty($items)) {
                return '';
            }
    
            $config = \Ilch\Registry::get('config');
    
            $html = '';
            $locale = '';
    
            if ((bool)$config->get('multilingual_acp')) {
                if ($this->layout->getTranslator()->getLocale() != $config->get('content_language')) {
                    $locale = $this->layout->getTranslator()->getLocale();
                }
            }
    
            /** @var MenuItem $item */
            foreach ($items as $item) {
               if (array_group_access($groupIds, array_map('intval', explode(',', $item->getAccess()))) || $adminAccess) {
                    if ($item->isBox()) {
                        // Do not render boxes if boxes.render is set to false
                        if (array_dot($options, 'boxes.render') === false) {
                            continue;
                        }
                        if ($item->getBoxId()) {
                            $box = $this->boxMapper->getSelfBoxByIdLocale($item->getBoxId(), $locale);
                        } else {
                            $box = $this->loadBoxFromModule($item);
                        }
    
                        $contentHtml = $box->getContent();
                    } else { //is Menu
                        $subItems = $this->menuMapper->getMenuItems($item->getMenuId());
    
                        // prepare array with parent-child relations
                        $menuData = [
                            'items' => [],
                            'parents' => []
                        ];
    
                        foreach ($subItems as $subItem) {
                            $menuData['items'][$subItem->getId()] = $subItem;
                            $menuData['parents'][$subItem->getParentId()][] = $subItem->getId();
                        }
    
                        $contentHtml = '<ul' . $this->createClassAttribute(array_dot($options, 'menus.ul-class-root')) . '>';
                        $contentHtml .= $this->buildMenu($item->getId(), $menuData, $locale, $options, $item->getType());
                        $contentHtml .= '</ul>';
                    }
    
                    $html .= str_replace(['%s', '%c'], [$this->layout->escape($item->getTitle()), $contentHtml], $tpl);
                }
            }
    
            return $html;
        }
    
        /**
         * Gets the menu items as html-string.
         *
         * @param int $parentId
         * @param $menuData
         * @param $locale
         * @param array $options
         * @param int|null $parentType
         * @return string
         */
        protected function buildMenu($parentId, $menuData, $locale, $options = [], $parentType = null)
        {
            $html = '';
            $groupIds = [3];
            $adminAccess = '';
    
            if ($this->layout->getUser()) {
                $groupIds = [];
                foreach ($this->layout->getUser()->getGroups() as $groups) {
                    $groupIds[] = $groups->getId();
                }
    
                if($this->layout->getUser()->isAdmin()){
                    $adminAccess = true;
                }
            }
    
            if (isset($menuData['parents'][$parentId])) {
                foreach ($menuData['parents'][$parentId] as $itemId) {
                    $liClasses = [];
    
                    if ($parentType === $menuData['items'][$itemId]::TYPE_MENU || array_dot($options, 'menus.allow-nesting') === false) {
                        $liClasses[] = array_dot($options, 'menus.li-class-root');
                    } else {
                        $liClasses[] = array_dot($options, 'menus.li-class-child');
                    }
    
                    $target = '';
                    if ($menuData['items'][$itemId]->isPageLink()) {
                        $page = $this->pageMapper->getPageByIdLocale($menuData['items'][$itemId]->getSiteId(), $locale);
                        $href = $this->layout->getUrl($page->getPerma());
                    } elseif ($menuData['items'][$itemId]->isModuleLink()) {
                        $href = $this->layout->getUrl(
                            ['module' => $menuData['items'][$itemId]->getModuleKey(), 'action' => 'index', 'controller' => 'index']
                        );
                    } elseif ($menuData['items'][$itemId]->isLink()) {
                        $href = $menuData['items'][$itemId]->getHref();
                        $target = ' target="'.$menuData['items'][$itemId]->getTarget().'"';
                    } else {
                        return '';
                    }
    
                    // add active class if configured and the link matches the origin source
                    if ($href === $this->currentUrl) {
                        $liClasses[] = array_dot($options, 'menus.li-class-active');
                    }
    
                    if (array_group_access($groupIds, array_map('intval', explode(',', $menuData['items'][$itemId]->getAccess()))) || $adminAccess) {
                        $contentHtml = '<a href="' . $href . '"' . $target . '>' . $this->layout->escape($menuData['items'][$itemId]->getTitle()) . '</a>';
                        $subItemsHtml = '';
    
                        // find childitems recursively
                        $subItemsHtml = $this->buildMenu($itemId, $menuData, $locale, $options, $menuData['items'][$itemId]->getType());
    
                        if (!empty($subItemsHtml)) {
                            if (array_dot($options, 'menus.allow-nesting') === true) {
                                $liClasses[] = array_dot($options, 'menus.li-class-root-nesting');
                                $contentHtml .= '<ul' . $this->createClassAttribute(array_dot($options, 'menus.ul-class-child'))
                                    . '>' . $subItemsHtml . '</ul>';
                                $subItemsHtml = '';
                            }
                        }
    
                        $html .= '<li' . $this->createClassAttribute($liClasses) . '>' . $contentHtml . '</li>' . $subItemsHtml;
                    }
                }
            }
    
            return $html;
        }
    
        /**
         * @param array|string $classes
         * @return string
         */
        private function createClassAttribute($classes)
        {
            if (is_array($classes)) {
                $classes = array_filter($classes);
            }
    
            if (empty($classes)) {
                return '';
            }
    
            if (is_string($classes)) {
                $classes = [$classes];
            }
    
            return ' class="' . implode(' ', array_filter($classes)) . '"';
        }
    
        /**
         * @param MenuItem $item
         * @return \Modules\Admin\Models\Box
         */
        protected function loadBoxFromModule($item)
        {
            $parts = explode('_', $item->getBoxKey());
            $moduleKey = $parts[0];
            $boxKey = $parts[1];
    
            $class = '\\Modules\\' . ucfirst($moduleKey) . '\\Boxes\\' . ucfirst($boxKey);
            $view = new \Ilch\View($this->layout->getRequest(), $this->layout->getTranslator(), $this->layout->getRouter());
            $this->layout->getTranslator()->load(APPLICATION_PATH . '/modules/' . $moduleKey . '/translations');
            /** @var \Ilch\Box $boxObj */
            $boxObj = new $class(
                $this->layout,
                $view,
                $this->layout->getRequest(),
                $this->layout->getRouter(),
                $this->layout->getTranslator()
            );
            $boxObj->render();
    
            $layoutBoxFile = APPLICATION_PATH . '/' . dirname($this->layout->getFile()) . '/views/modules/'
                . $moduleKey . '/boxes/views/' . $boxKey . '.php';
            if (file_exists($layoutBoxFile)) {
                $viewPath = $layoutBoxFile;
            } else {
                $viewPath = APPLICATION_PATH . '/modules/' . $moduleKey . '/boxes/views/' . $boxKey . '.php';
            }
    
            $view->setLayoutKey($this->layout->getLayoutKey());
            $view->setBoxUrl('application/modules/' . $moduleKey);
    
            $output = $view->loadScript($viewPath);
            $box = new \Modules\Admin\Models\Box();
            $box->setContent($output);
            return $box;
        }
    }



    "application\libraries\Ilch\Functions.php"

    <?php
    /**
     * @copyright Ilch 2.0
     * @package ilch
     */
    
    use Modules\User\Models\User;
    
    /**
     * Improves "var_dump" function with pre - tags.
     */
    function dumpVar()
    {
        if (\Ilch\DebugBar::isInitialized()) {
            $debugBar = \Ilch\DebugBar::getInstance();
            $backtrace = debug_backtrace(0, 1);
            $fileAndLine = $backtrace[0]['file'] . ':' . $backtrace[0]['line'];
            foreach (func_get_args() as $arg) {
                $message = $debugBar['messages']->getDataFormatter()->formatVar($arg) . ' dumped on ' . $fileAndLine;
                $debugBar['messages']->addMessage($message, 'debug');
            }
    
            return;
        }
    
        echo '<pre>';
    
        foreach (func_get_args() as $arg) {
            var_dump($arg);
        }
    
        echo '</pre>';
    }
    
    /**
     * Improves "debug_backtrace" function for html dump.
     *
     * @param int $skipEntries
     * @return string
     */
    function debug_backtrace_html($skipEntries = 1)
    {
        $r = '';
    
        foreach (debug_backtrace() as $key => $t) {
            if ($key < $skipEntries) {
                continue;
            }
            $r .= "\t".'@ ';
    
            if (isset($t['file'])) {
                $r .= relativePath($t['file']) . ':' . $t['line'];
            } else {
                $r .= '<PHP inner-code>';
            }
    
            $r .= ' -- ';
    
            if (isset($t['class'])) {
                $r .= $t['class'] . $t['type'];
            }
    
            $r .= $t['function'];
    
            if (isset($t['args']) && sizeof($t['args']) > 0) {
                $r .= '(...)';
            } else {
                $r .= '()';
            }
    
             $r .= "\r\n";
        }
    
        return $r;
    }
    
    /**
     * Return the relative path
     * @param string $absolutePath
     * @param string $relativeToPath
     * @return string
     */
    function relativePath($absolutePath, $relativeToPath = ROOT_PATH)
    {
        if (strpos($absolutePath, $relativeToPath) === 0) {
            return substr($absolutePath, strlen($relativeToPath) + 1);
        }
        return $absolutePath;
    }
    
    /**
     * Delete directory recursive.
     *
     * @param string $dir
     */
    function removeDir($dir)
    {
        if (is_dir($dir)) {
            $dircontent = scandir($dir);
    
            foreach ($dircontent as $c) {
                if ($c != '.' && $c != '..' && is_dir($dir.'/'.$c)) {
                    removeDir($dir.'/'.$c);
                } elseif ($c != '.' && $c != '..') {
                    unlink($dir.'/'.$c);
                }
            }
    
            rmdir($dir);
        } else {
            unlink($dir);
        }
    }
    
    /**
     * Gets array data
     *
     * Supports 'dot' notation for arrays
     * e.g.
     *      foo.bar     > foo['bar']
     *      foo.bar.baz > foo['bar']['baz']
     *
     * @param array     $data       The array
     * @param string    $key        The key to look for
     * @param mixed     $default    A default value if $key is not found
     * @return mixed
     *
     * @copyright <Taylor Otwell>
     */
    function array_dot($data = [], $key = null, $default = null)
    {
        if ($key === null) {
            return $data;
        }
    
        if (isset($data[$key])) {
            return $data[$key];
        }
    
        foreach (explode('.', $key) as $seg) {
            if (!is_array($data) || !array_key_exists($seg, $data)) {
                return $default;
            }
    
            $data = $data[$seg];
        }
    
        return $data;
    }
    
    /**
     * Set an array item to a given value using "dot" notation.
     *
     * If no key is given to the method, the entire array will be replaced.
     *
     * @param  array   $array
     * @param  string  $key
     * @param  mixed   $value
     * @return array
     *
     * @copyright <Taylor Otwell>
     */
    function array_dot_set(&$array, $key, $value)
    {
        if (is_null($key)) {
            return $array = $value;
        }
    
        $keys = explode('.', $key);
    
        while (count($keys) > 1) {
            $key = array_shift($keys);
    
            // If the key doesn't exist at this depth, we will just create an empty array
            // to hold the next value, allowing us to create the arrays to hold final
            // values at the correct depth. Then we'll keep digging into the array.
            if (!isset($array[$key]) || ! is_array($array[$key])) {
                $array[$key] = [];
            }
    
            $array =& $array[$key];
        }
    
        $array[array_shift($keys)] = $value;
    
        return $array;
    }
    
    /**
     * Check if a needle is in a nested array (just one level)
     * @param mixed $needle
     * @param array|Traversable $haystack
     * @return bool
     */
    function is_in_array($needle, $haystack)
    {
        foreach ($needle as $stack) {
            if (in_array($stack, $haystack)) {
                 return true;
            }
        }
        return false;
    }
    
    /**
     * TEST FUNCTION
     */
    function array_group_access($groupId, $access) {
        foreach ($groupId as $key => $value) {
            if (in_array($key, $access)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * cUrl function, gets a url result
     *
     * @param string $url
     * @param bool $write_cache Set this to false if you don't want to write a cache file.
     * @param bool $ignoreCache Set this to true to ignore the cache and fetch from server.
     * @param integer $cache_time
     * @return mixed $data | FALSE
     */
    function url_get_contents($url, $write_cache = true, $ignoreCache = false, $cache_time = 21600)
    {
        if (!function_exists('curl_init')) {
            die('CURL is not installed!');
        }
    
        // settings
        $cachetime = $cache_time; //Default 6 hours
        $where = "cache";
        if (!is_dir($where)) {
            mkdir($where);
        }
    
        $hash = md5($url);
        $file = "$where/$hash.cache";
    
        // check the bloody file.
        $mtime = 0;
        if (file_exists($file)) {
            $mtime = filemtime($file);
        }
        $filetimemod = $mtime + $cachetime;
    
        // if the renewal date is smaller than now, return true; else false (no need for update)
        if ($filetimemod < time() || $ignoreCache) {
            $ch = curl_init($url);
            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => TRUE,
                CURLOPT_USERAGENT      => 'Ilch 2 (+http://www.ilch.de)',
                CURLOPT_FOLLOWLOCATION => TRUE,
                CURLOPT_MAXREDIRS      => 5,
                CURLOPT_CONNECTTIMEOUT => 15,
                CURLOPT_TIMEOUT        => 30,
                CURLOPT_SSL_VERIFYPEER => TRUE,
                CURLOPT_SSL_VERIFYHOST => 2,
                CURLOPT_CAINFO         => ROOT_PATH.'/certificate/cacert.pem',
                CURLOPT_URL            => $url,
            ]);
            $output = curl_exec($ch);
            curl_close($ch);
    
            // save the file if there's data
            if ($output && $write_cache) {
                file_put_contents($file, $output);
            }
        } else {
            $output = file_get_contents($file);
        }
    
        return $output;
    }
    
    /**
     * @param mixed $var
     * @param string $indent
     * @return string
     */
    function var_export_short_syntax($var, $indent = '')
    {
        switch (gettype($var)) {
            case "string":
                return '"' . addcslashes($var, "\\\$\"\r\n\t\v\f") . '"';
            case "array":
                $indexed = array_keys($var) === range(0, count($var) - 1);
                $r = [];
                foreach ($var as $key => $value) {
                    $r[] = "$indent    "
                        . ($indexed ? "" : var_export_short_syntax($key) . " => ")
                        . var_export_short_syntax($value, "$indent    ");
                }
                return "[\n" . implode(",\n", $r) . "\n" . $indent . "]";
            case "boolean":
                return $var ? "TRUE" : "FALSE";
            default:
                return var_export($var, true);
        }
    }
    
    /**
     * Checks if the current visitor is logged in.
     *
     * @return boolean
     */
    function loggedIn()
    {
        return !is_null(\Ilch\Registry::get('user'));
    }
    
    /**
     * Returns the currentUser or null
     *
     * @returns User model|null
     */
    function currentUser()
    {
        return \Ilch\Registry::get('user');
    }
    
    /**
     * Check if the guest or user needs to solve a captcha according to the setting
     * in the admincenter.
     *
     * @return bool
     */
    function captchaNeeded()
    {
        $user = \Ilch\Registry::get('user');
        $hideCaptchaFor = explode(',', \Ilch\Registry::get('config')->get('hideCaptchaFor'));
    
        if (empty($user)) {
            // 3 = group guest
            return !in_array(3, $hideCaptchaFor);
        }
    
        return !is_in_array(array_keys($user->getGroups()), $hideCaptchaFor);
    }
    
    /**
     * Check if email address is in blacklist.
     *
     * @param string $emailAddress
     * @return bool
     */
    function isEmailOnBlacklist($emailAddress)
    {
        if (empty($emailAddress)) {
            return false;
        }
    
        if (empty(trim(\Ilch\Registry::get('config')->get('emailBlacklist')))) {
            return false;
        }
    
        $emailBlacklist = explode(PHP_EOL, \Ilch\Registry::get('config')->get('emailBlacklist'));
        foreach ($emailBlacklist as $entry) {
            if (empty(trim($entry))) {
                continue;
            }
    
            if (strpos($emailAddress, trim($entry)) !== false) {
                return true;
            }
        }
    
        return false;
    }
    
    /**
     * Recursive glob()
     *
     * @param $pattern
     * @param int $flags
     * @return array|false
     */
    function glob_recursive($pattern, $flags = 0)
    {
        $files = glob($pattern, $flags);
    
        foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir){
            $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
        }
    
        return $files;
    }
    
    /**
     * Gets the file owner.
     *
     * @since 2.1.22
     *
     * @param string $file Path to the file.
     * @return string|false Username of the owner on success, false on failure.
     */
    function owner($file)
    {
        $owneruid = @fileowner($file);
    
        if (!$owneruid) {
            return false;
        }
    
        if (!function_exists('posix_getpwuid')) {
            return $owneruid;
        }
    
        $ownerarray = posix_getpwuid($owneruid);
        return $ownerarray['name'];
    }
    
    /**
     * Gets the permissions of the specified file or filepath in their octal format.
     *
     * @since 2.1.22
     *
     * @param string $file Path to the file.
     * @return string Mode of the file (the last 3 digits).
     */
    function getchmod($file)
    {
        return substr(decoct(@fileperms($file)), -3);
    }
    
    /**
     * Gets the file's group.
     *
     * @since 2.1.22
     *
     * @param string $file Path to the file.
     * @return string|false The group on success, false on failure.
     */
    function group($file)
    {
        $gid = @filegroup($file);
    
        if (!$gid) {
            return false;
        }
    
        if (!function_exists('posix_getgrgid')) {
            return $gid;
        }
    
        $grouparray = posix_getgrgid($gid);
        return $grouparray['name'];
    }
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten