public function getlinkAction()
 {
     // Parameter auslesen
     $link_to_page_id = Request::postParam('linkToPageId');
     $link_to_language_id = Request::postParam('linkToLanguageId');
     $link_to_anchor_name = Request::postParam('linkToAnchorName');
     // Parameter überprüfen
     if (!is_numeric($link_to_page_id) || $link_to_language_id == '') {
         $this->error(self::RESULT_ERROR_BAD_REQUEST);
         return;
     }
     $pages = new Pages();
     // Die absolute URL auslesen
     $absolute_url = $pages->getPageUrl($link_to_page_id, $link_to_language_id);
     // eine zum Stammverzeichnis des CMS relative URL daraus machen
     $base_url = Config::get()->baseUrl;
     $relative_url = UTF8String::substr($absolute_url, UTF8String::strlen($base_url), UTF8String::strlen($absolute_url));
     if ($link_to_anchor_name != '') {
         if ($relative_url != '') {
             $relative_url = rtrim($relative_url, '/') . '/';
         }
         $relative_url .= '#' . $link_to_anchor_name;
     }
     // Zurückgeben
     $this->success($relative_url);
 }
/**
 * Function: smarty_make_timestamp<br>
 * Purpose:  used by other smarty functions to make a timestamp from a string.
 *
 * @author   Monte Ohrt <monte at ohrt dot com>
 *
 * @param DateTime|int|UTF8String $string date object, timestamp or string that can be converted using strtotime()
 *
 * @return int
 */
function smarty_make_timestamp($string)
{
    if (empty($string)) {
        // use "now":
        return time();
    } elseif ($string instanceof DateTime) {
        return $string->getTimestamp();
    } elseif (strlen($string) == 14 && ctype_digit($string)) {
        // it is mysql timestamp format of YYYYMMDDHHMMSS?
        return mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2), substr($string, 4, 2), substr($string, 6, 2), substr($string, 0, 4));
    } elseif (is_numeric($string)) {
        // it is a numeric string, we handle it as timestamp
        return (int) $string;
    } else {
        // strtotime should handle it
        $time = strtotime($string);
        if ($time == -1 || $time === false) {
            // strtotime() was not able to parse $string, use "now":
            return time();
        }
        return $time;
    }
}
    public function getHtml()
    {
        $userGroups = $this->userGroups->getAll();
        $html = '';
        $yes = Translate::get('Yes');
        $no = Translate::get('No');
        if ($userGroups !== false) {
            if (count($userGroups) > 0) {
                foreach ($userGroups as $userGroup) {
                    $modules_text = '';
                    $modules = $this->userGroups->getAclResources($userGroup['id']);
                    if ($modules !== false) {
                        if (count($modules) > 0) {
                            foreach ($modules as $module_acl_resource_id) {
                                $module_acl_resource = Acl::getResourceDataById($module_acl_resource_id);
                                if ($module_acl_resource !== false) {
                                    $modules_text .= ($modules_text != '' ? ', ' : '') . $module_acl_resource['description'];
                                }
                            }
                        }
                    }
                    if (UTF8String::strlen($modules_text) > 75) {
                        $modules_text = UTF8String::substr($modules_text, 0, 75) . '...';
                    }
                    $html .= '
							<tr data-id="' . $userGroup['id'] . '">
								<td><input type="checkbox" name="usergroups[' . $userGroup['id'] . ']" value="1" id="usergroup_' . $userGroup['id'] . '"></td>
								<td>' . $userGroup['name'] . '</td>
								<td>' . $userGroup['level'] . '</td>
								<td>' . ($userGroup['action-create'] > 0 ? $yes : $no) . '</td>
								<td>' . ($userGroup['action-edit'] > 0 ? $yes : $no) . '</td>
								<td>' . ($userGroup['action-publish'] > 0 ? $yes : $no) . '</td>
								<td>' . ($userGroup['action-delete'] > 0 ? $yes : $no) . '</td>
								<td>' . $modules_text . '</td>
							</tr>
						';
                }
            }
        }
        return $html;
    }
 public function getSearchResultForFrontend($search_string, $columns, $page_id, $language_id)
 {
     if (is_array($columns) && count($columns) == 0) {
         $columns = null;
     }
     if ($columns === null) {
         $columns = array();
         foreach ($this->fields as $field) {
             if (isset($field['dbFieldType'])) {
                 if ($field['dbFieldType'] == 'string') {
                     $columns[] = $field['id'];
                 }
             }
         }
     } else {
         $columns = array_map(function ($column_id) {
             return trim($column_id);
         }, $columns);
         $columns = array_filter($columns, function ($string) {
             return UTF8String::strlen($string) > 0;
         });
     }
     $sanitized_search_string = UTF8String::strtolower(trim($search_string));
     $search_array = array_filter(explode(' ', $sanitized_search_string), function ($string) {
         return UTF8String::strlen($string) > 0;
     });
     $result = array();
     if (count($columns) > 0 && count($search_array) > 0) {
         $rows = $this->getAllRowsForFrontend($page_id, $language_id);
         if ($rows !== false) {
             if (count($rows) > 0) {
                 foreach ($rows as $row) {
                     $row_contains_search_string = false;
                     foreach ($columns as $column_id) {
                         if (isset($row[$column_id])) {
                             if ($this->doesFieldValueContainSearchString($row[$column_id], $search_array)) {
                                 $row_contains_search_string = true;
                                 break;
                             }
                         }
                     }
                     if ($row_contains_search_string) {
                         $result[] = $row;
                     }
                 }
             }
         }
     }
     return $result;
 }
 public static function getCompleteUrl($uri, $protocol = null)
 {
     if ($protocol === null) {
         $protocol = Config::get()->standardProtocolForAbsoluteUrls;
     }
     $url = $uri;
     // Nur wenn Protokoll nicht angegeben ist...
     if (UTF8String::strpos($url, '://') === false) {
         // ggf. Server-Namen erg�nzen
         if (UTF8String::substr($url, 0, 1) == '/') {
             if ($_SERVER['HTTP_HOST'] !== '') {
                 $url = self::htmlEntities($_SERVER['HTTP_HOST']) . $url;
             } else {
                 $url = self::htmlEntities($_SERVER['SERVER_NAME']) . $url;
             }
         }
         // Protokoll erg�nzen
         $url = $protocol . $url;
     }
     return $url;
 }
 private function resizeImage($source, $parameters, $preview = false, $custom_settings = null)
 {
     // TODO *******
     //
     // Leider bietet diese drecks GD-Lib keine M�glichkeit, einen "out of memory"-Fehler zu umgehen,
     // oder vorauszusehen, wann ein Bild zu gro� f�r den Speicher ist.
     //
     // Daher sollte hier noch ein Mechanismus geschaffen werden, um voraus zu berechnen, wieviel Speicher
     // es brauchen wird, das Bild zu laden und einen Fehlercode zur�ckzugeben, falls der Speicher nicht reicht!
     // gew�nschte JPEG-Kompression feststellen
     $source_path_info = pathinfo($source);
     $source_ext = UTF8String::strtolower($source_path_info['extension']);
     if ($source_ext == 'jpg' || $source_ext == 'jpg' || $source_ext == 'jpe') {
         if ($this->isParameterPositiveNumber($parameters, 'jpegQuality')) {
             $jpeqQuality = $parameters['jpegQuality'];
         } else {
             $jpeqQuality = Config::get()->jpegQuality;
         }
     } else {
         $jpeqQuality = null;
     }
     // Erstmal keine Gr��en�nderung annehmen
     $mode = 'copy';
     // Pr�fen, ob maximal-Werte angegeben sind
     $max_width = 0;
     $max_height = 0;
     if ($this->isParameterPositiveNumber($parameters, 'maxWidth')) {
         $max_width = $parameters['maxWidth'];
     }
     if ($this->isParameterPositiveNumber($parameters, 'maxHeight')) {
         $max_height = $parameters['maxHeight'];
     }
     // Wenn Maximal-Werte gesetzt sind, Einpassung annehmen
     if ($max_width > 0 || $max_height > 0) {
         $mode = 'fitIn';
     }
     // Pr�fen, ob genaue Abmessungen gefordert sind
     $force_width = 0;
     $force_height = 0;
     if ($this->isParameterPositiveNumber($parameters, 'forceWidth')) {
         $force_width = $parameters['forceWidth'];
     }
     if ($this->isParameterPositiveNumber($parameters, 'forceHeight')) {
         $force_height = $parameters['forceHeight'];
     }
     // ggf. Benutzereingaben auswerten
     if ($custom_settings !== null) {
         // der Benutzer hat selbst eine Gr��e festgelegt...
         // diese Werte �berschreiben forceWidth und forceHeight
         if ($this->sanitizeBoolean($custom_settings['customSize'])) {
             if ($this->sanitizeInteger($custom_settings['width']) > 0) {
                 $force_width = $this->sanitizeInteger($custom_settings['width']);
             } else {
                 $force_width = 0;
             }
             if ($this->sanitizeInteger($custom_settings['height']) > 0) {
                 $force_height = $this->sanitizeInteger($custom_settings['height']);
             } else {
                 $force_height = 0;
             }
         }
         // der Benutzer hat einen Ausschnitt festgelegt oder die s/w option gew�hlt...
         if ($this->sanitizeBoolean($custom_settings['customCrop']) || $this->sanitizeBoolean($custom_settings['convertToBlackAndWhite'])) {
             $tmp_file = APPLICATION_ROOT . 'user-data/tmp/images/' . $this->getRandomFilenameWithTimeStamp($source);
             $tmp_image = WideImage::load($source);
             if ($this->sanitizeBoolean($custom_settings['customCrop'])) {
                 $tmp_image = $tmp_image->crop($this->sanitizeInteger($custom_settings['cropX1']), $this->sanitizeInteger($custom_settings['cropY1']), $this->sanitizeInteger($custom_settings['cropX2']) - $this->sanitizeInteger($custom_settings['cropX1']), $this->sanitizeInteger($custom_settings['cropY2']) - $this->sanitizeInteger($custom_settings['cropY1']));
             }
             if ($this->sanitizeBoolean($custom_settings['convertToBlackAndWhite'])) {
                 $tmp_image = $tmp_image->asGrayscale();
             }
             $this->saveImage($tmp_image, $tmp_file, $jpeqQuality);
             $tmp_image->destroy();
             $source = $tmp_file;
         }
     }
     // Wenn genaue Abmessungen gefordert sind, entsprechenden Modus setzen...
     if ($force_width > 0 && $force_height > 0) {
         $mode = 'exact';
     } elseif ($force_width > 0) {
         $mode = 'forceWidth';
     } elseif ($force_height > 0) {
         $mode = 'forceHeight';
     }
     // Tempor�ren Dateinamen erstellen
     $temp_file_name = $this->getRandomFilenameWithTimeStamp($source);
     $relative_path_to_dest_file = 'user-data/tmp/images/' . $temp_file_name;
     $absolute_path_to_dest_file = APPLICATION_ROOT . $relative_path_to_dest_file;
     // Je nach Modus Bild kopieren / ge�nderte Version speichern
     $result = true;
     try {
         switch ($mode) {
             case 'copy':
                 // keine Gr��en�nderung erfoderlich
                 $result = FileUtils::copyFile($source, $absolute_path_to_dest_file);
                 break;
             case 'exact':
                 // Gr��e genau vorgegeben
                 $image = WideImage::load($source);
                 $image_dimensions = $this->getDimensions($image);
                 $resized_image = $image->resize($force_width, $force_height, 'outside', 'any');
                 $resized_image_dimensions = $this->getDimensions($resized_image);
                 $image->destroy();
                 if ($resized_image->getWidth() > $force_width || $resized_image->getHeight() > $force_height) {
                     $crop_x = 0;
                     if ($resized_image->getWidth() > $force_width) {
                         $crop_x = floor(($resized_image->getWidth() - $force_width) / 2);
                     }
                     $crop_y = 0;
                     if ($resized_image->getHeight() > $force_height) {
                         $crop_y = floor(($resized_image->getHeight() - $force_height) / 2);
                     }
                     $cropped_image = $resized_image->crop($crop_x, $crop_y, $force_width, $force_height);
                     $resized_image->destroy();
                     $this->saveImage($cropped_image, $absolute_path_to_dest_file, $jpeqQuality);
                     $cropped_image->destroy();
                 } else {
                     if ($this->equalDimensions($image_dimensions, $resized_image_dimensions)) {
                         FileUtils::copyFile($source, $absolute_path_to_dest_file);
                     } else {
                         $this->saveImage($resized_image, $absolute_path_to_dest_file, $jpeqQuality);
                     }
                     $resized_image->destroy();
                 }
                 break;
             case 'forceWidth':
                 // Breite vorgegeben
                 $image = WideImage::load($source);
                 $image_dimensions = $this->getDimensions($image);
                 $resized_image = $image->resize($force_width, null, 'outside', 'any');
                 $resized_image_dimensions = $this->getDimensions($resized_image);
                 $image->destroy();
                 if ($max_height > 0 && $resized_image->getHeight() > $max_height) {
                     $crop_y = 0;
                     if ($resized_image->getHeight() > $max_height) {
                         $crop_y = floor(($resized_image->getHeight() - $max_height) / 2);
                     }
                     $cropped_image = $resized_image->crop(0, $crop_y, $force_width, $max_height);
                     $resized_image->destroy();
                     $this->saveImage($cropped_image, $absolute_path_to_dest_file, $jpeqQuality);
                     $cropped_image->destroy();
                 } else {
                     if ($this->equalDimensions($image_dimensions, $resized_image_dimensions)) {
                         FileUtils::copyFile($source, $absolute_path_to_dest_file);
                     } else {
                         $this->saveImage($resized_image, $absolute_path_to_dest_file, $jpeqQuality);
                     }
                     $resized_image->destroy();
                 }
                 break;
             case 'forceHeight':
                 // H�he vorgegeben
                 $image = WideImage::load($source);
                 $image_dimensions = $this->getDimensions($image);
                 $resized_image = $image->resize(null, $force_height, 'outside', 'any');
                 $resized_image_dimensions = $this->getDimensions($resized_image);
                 $image->destroy();
                 if ($max_width > 0 && $resized_image->getWidth() > $max_width) {
                     $crop_x = 0;
                     if ($resized_image->getWidth() > $max_width) {
                         $crop_x = floor(($resized_image->getWidth() - $max_width) / 2);
                     }
                     $cropped_image = $resized_image->crop($crop_x, 0, $max_width, $force_height);
                     $resized_image->destroy();
                     $this->saveImage($cropped_image, $absolute_path_to_dest_file, $jpeqQuality);
                     $cropped_image->destroy();
                 } else {
                     if ($this->equalDimensions($image_dimensions, $resized_image_dimensions)) {
                         FileUtils::copyFile($source, $absolute_path_to_dest_file);
                     } else {
                         $this->saveImage($resized_image, $absolute_path_to_dest_file, $jpeqQuality);
                     }
                     $resized_image->destroy();
                 }
                 break;
             case 'fitIn':
                 // in angegebenes Rechteck einpassen
                 $image = WideImage::load($source);
                 $image_dimensions = $this->getDimensions($image);
                 if ($max_width == 0) {
                     $max_width = null;
                 }
                 if ($max_height == 0) {
                     $max_height = null;
                 }
                 $resized_image = $image->resize($max_width, $max_height, 'inside', 'down');
                 $resized_image_dimensions = $this->getDimensions($resized_image);
                 $image->destroy();
                 if ($this->equalDimensions($image_dimensions, $resized_image_dimensions)) {
                     FileUtils::copyFile($source, $absolute_path_to_dest_file);
                 } else {
                     $this->saveImage($resized_image, $absolute_path_to_dest_file, $jpeqQuality);
                 }
                 $resized_image->destroy();
                 break;
         }
     } catch (WideImage_Exception $e) {
         $result = false;
     }
     // im Erfolgsfall zum Stammverzeichnis relativen Pfad zur�ckgeben
     if ($result) {
         // M�glicherweise wird das Bild nochmal von einem geladenen Plugin bearbeitet
         $plugin_parameters = array('source' => $source, 'parameters' => $parameters, 'preview' => $preview, 'customSettings' => $custom_settings);
         Plugins::call(Plugins::AFTER_IMAGE_RESIZE, $plugin_parameters, $relative_path_to_dest_file);
         return $relative_path_to_dest_file;
     } else {
         return false;
     }
 }
 public function sanitizeBoolean($boolish_string)
 {
     if (is_bool($boolish_string)) {
         return $boolish_string;
     } else {
         if (is_numeric($boolish_string)) {
             $boolish_int = (int) $boolish_string;
             if ($boolish_int != 0) {
                 return true;
             } else {
                 return false;
             }
         } else {
             $boolish_string = trim(UTF8String::strtolower($boolish_string));
             if ($boolish_string == 'true') {
                 return true;
             } else {
                 return false;
             }
         }
     }
 }
 public function onDataEditorPluginPrepareForOutput($parameters, &$data)
 {
     if ($parameters['fieldType'] == 'link') {
         $edit_data = null;
         if (isset($data)) {
             if (is_array($data)) {
                 if (isset($data['url'])) {
                     if (is_string($data['url'])) {
                         $edit_data = array('url' => $data['url']);
                         if (isset($data['newWindow'])) {
                             $edit_data['newWindow'] = $data['newWindow'];
                         } else {
                             $edit_data['newWindow'] = 'auto';
                         }
                         $edit_data['type'] = 'external';
                         $auto_link_target = '';
                         if (UTF8String::strtolower(UTF8String::substr($data['url'], 0, UTF8String::strlen('link://'))) == 'link://') {
                             $edit_data['type'] = 'internal';
                         } elseif (UTF8String::strtolower(UTF8String::substr($data['url'], 0, UTF8String::strlen('download://'))) == 'download://') {
                             $edit_data['type'] = 'download';
                         }
                         switch ($edit_data['type']) {
                             case 'external':
                                 $edit_data['url'] = $data['url'];
                                 $auto_link_target = '_blank';
                                 break;
                             case 'internal':
                                 $edit_data['url'] = Config::get()->baseUrl . UTF8String::substr($data['url'], UTF8String::strlen('link://'));
                                 $auto_link_target = '';
                                 break;
                             case 'download':
                                 $edit_data['url'] = Config::get()->baseUrl . 'user-data/downloads/' . UTF8String::substr($data['url'], UTF8String::strlen('download://'));
                                 $auto_link_target = '_blank';
                                 $edit_data['path'] = APPLICATION_ROOT . 'user-data/downloads/' . urldecode(UTF8String::substr($data['url'], UTF8String::strlen('download://')));
                                 $path_info = pathinfo($edit_data['path']);
                                 $edit_data['basename'] = isset($path_info['basename']) ? $path_info['basename'] : '';
                                 $edit_data['extension'] = isset($path_info['extension']) ? $path_info['extension'] : '';
                                 $edit_data['filename'] = isset($path_info['filename']) ? $path_info['filename'] : '';
                                 if (file_exists($edit_data['path'])) {
                                     $edit_data['filesize'] = @filesize($edit_data['path']);
                                 }
                                 break;
                             default:
                                 break;
                         }
                         switch ($edit_data['newWindow']) {
                             case 'yes':
                                 $edit_data['target'] = '_blank';
                                 break;
                             case 'no':
                                 $edit_data['target'] = '';
                                 break;
                             default:
                                 $edit_data['target'] = $auto_link_target;
                                 break;
                         }
                     }
                 }
             }
         }
         $data = $edit_data;
     }
 }
            $action = 'default';
        }
        $method = $action . 'Action';
        // Datei inkludieren
        require_once APPLICATION_ROOT . 'system/core/backend/controllers/' . $folder . '/' . $file;
        // Prüfen, ob Klasse existiert
        if (!class_exists($class)) {
            Helpers::fatalError('Page not found (class "' . $class . '" doesn\'t exist in system/core/backend/controllers/' . $folder . '/' . $file . ')!', true);
        }
        // Klasse instanziieren
        $controller = new $class($module);
        // Prüfen, ob Methode existiert
        if (!method_exists($controller, $method)) {
            Helpers::fatalError('Page not found (class-method "' . $method . '" doesn\'t exist in class "' . $class . '" ist in system/core/backend/controllers/' . $folder . '/' . $file . ')!', true);
        }
        // View erzeugen und mit Controller verbinden
        $view = new View();
        $view->assignTemplate(APPLICATION_ROOT . 'system/core/backend/views/' . $folder . '/' . UTF8String::strtolower($file));
        $view->assign('baseUrl', Config::get()->baseUrl);
        $view->assign('moduleUrl', Config::get()->baseUrl . 'admin/' . $folder . '/' . $module . '/');
        $view->assign('publicUrl', Config::get()->baseUrl . 'system/core/backend/public/');
        $view->assign('backendLanguage', $language_id);
        $controller->assignView($view);
        // Action-Methode ausführen
        $controller->callActionMethod($action);
        // Ausgabe des Views...
        if ($controller->getView() != null) {
            $controller->getView()->output();
        }
    }
}
 public function extract($path_string, &$data = null)
 {
     if ($data === null) {
         $data = $this->getArray();
     }
     if (!is_array($data)) {
         return null;
     }
     $path = $this->getPathFromString($path_string);
     $pointer =& $data;
     $counter = 0;
     if (count($path) > 0) {
         foreach ($path as $key) {
             $index = $key;
             if (UTF8String::substr($key, 0, 1) == '[') {
                 if (UTF8String::substr($key, -1, 1) == ']') {
                     $number = $this->extendedTrim(UTF8String::substr($key, 1, UTF8String::strlen($key) - 2));
                     if (is_numeric($number)) {
                         $index = (int) $number;
                     }
                 }
             }
             if (isset($pointer[$index])) {
                 $pointer =& $pointer[$index];
                 if ($counter == count($path) - 1) {
                     return $pointer;
                 }
             } else {
                 break;
             }
             $counter++;
         }
     }
     return null;
 }
 public static function parse()
 {
     if (!self::$parsed) {
         // Request String speichern
         self::$request_uri = $_SERVER['REQUEST_URI'];
         // Prüfen, ob HTTPs verwendet wird
         self::$request_secure = false;
         if (isset($_SERVER['HTTPS'])) {
             if ($_SERVER['HTTPS'] != '') {
                 self::$request_secure = true;
             }
         }
         // Den Teil, der von interesse ist, extrahieren
         // Wenn die baseUrl z.B. http://www.pixelproduction.de/cms/ lautet,
         // und der entsprechende Request-URI /cms/admin/bla/,
         // dann schneiden wir das /cms am Anfang heraus, da uns ja nur das /admin/bla/ interessiert...
         // So kann man das CMS in einem beliebigen Unter-Verzeichnis auf dem Server installieren
         // und alles funktioniert trotzdem :-)
         $base_request_string = self::extractRequestUri(Config::get()->baseUrl);
         if (UTF8String::substr(self::$request_uri, 0, UTF8String::strlen($base_request_string)) != $base_request_string) {
             die('Fehlerhafter REQUEST_URI oder fehlerhafte Konfiguration. Bitte wenden Sie sich an den Administrator dieser Website.');
         } else {
             self::$request_uri = UTF8String::substr(self::$request_uri, UTF8String::strlen($base_request_string), UTF8String::strlen(self::$request_uri));
         }
         // Die URI in ihre bestandteile (Pfad, Parameter, Anker) zerlegen
         // Laut PHP Doku muss es eine absolute, vollständige URL sein, ist aber egal, weil wir Protokoll und Server sowieso ignorieren,
         // also nehmen wir einfach irgeneinen Server an...
         $url = parse_url('http://www.pixelproduction.de/' . self::$request_uri);
         // Den Pfad auslesen und in seine Teile zerlegen und in Array ablegen
         self::$request_path = array();
         if (isset($url['path'])) {
             $url_path = trim($url['path'], '/');
             if ($url_path != '') {
                 self::$request_path = explode('/', $url_path);
             }
         }
         // ggf. die GET-Parameter in Array ablegen
         self::$request_parameters = array();
         if (isset($url['query'])) {
             $query = explode('&', $url['query']);
             if (is_array($query)) {
                 foreach ($query as $parameter) {
                     $key_value_pair = explode('=', $parameter);
                     if (is_array($key_value_pair)) {
                         if (isset($key_value_pair[0])) {
                             self::$request_parameters[$key_value_pair[0]] = '';
                             if (isset($key_value_pair[1])) {
                                 self::$request_parameters[$key_value_pair[0]] = $key_value_pair[1];
                             }
                         }
                     }
                 }
             }
         }
         // Herausfinden, ob das Frontend oder das Backend angefordert wird
         self::$front_end = true;
         if (count(self::$request_path) > 0) {
             // Wenn der erste Teil nach der Basis-URL "admin" ist, dann geht's zum Back-End, ansonsten zum Front-End
             $firstPathSegment = strtolower(self::$request_path[0]);
             self::$front_end = !in_array($firstPathSegment, array('admin', 'pm:api'));
             if ($firstPathSegment == 'admin') {
                 // Das "admin" braucht man nicht als ersten Teil, da man ja dann sowieso weiß, dass man sich im Backend befindet...
                 array_splice(self::$request_path, 0, 1);
             }
             if ($firstPathSegment == 'pm:api') {
                 self::$request_path[0] = 'api';
             }
         }
         self::$parsed = true;
     }
 }
 public function getUniqueName($parent_id, $preferred_name)
 {
     $preferred_name = $this->normalizeName($preferred_name);
     $pos_of_hyphen = UTF8String::strrpos($preferred_name, '-');
     if ($pos_of_hyphen !== false) {
         if ($pos_of_hyphen > 0) {
             $number_part = UTF8String::substr($preferred_name, $pos_of_hyphen + 1);
             if (is_numeric($number_part)) {
                 $preferred_name = UTF8String::substr($preferred_name, 0, $pos_of_hyphen);
             }
         }
     }
     if ($this->isValidName($preferred_name)) {
         if (!$this->nameExists($parent_id, $preferred_name)) {
             return $preferred_name;
         } else {
             $existing = Db::get('SELECT id, name FROM [prefix]pages WHERE `name` LIKE :pattern', array(':pattern' => $preferred_name . '-%'));
             $highest_number = 0;
             if ($existing !== false) {
                 if (count($existing) > 0) {
                     foreach ($existing as $element) {
                         $number_part = UTF8String::substr($element['name'], UTF8String::strlen($preferred_name . '-'));
                         if (is_numeric($number_part)) {
                             if ((int) $number_part > $highest_number) {
                                 $highest_number = (int) $number_part;
                             }
                         }
                     }
                 }
             }
             if ($highest_number < 2) {
                 $highest_number = 2;
             } else {
                 $highest_number++;
             }
             if (!$this->nameExists($parent_id, $preferred_name . '-' . $highest_number)) {
                 return $preferred_name . '-' . $highest_number;
             }
         }
     }
     return md5(uniqid(rand(0, 99999), true));
 }
 private function getRandomFilename($orig_filename)
 {
     $info = pathinfo($orig_filename);
     $ext = UTF8String::strtolower($info['extension']);
     return md5(uniqid() . time() . rand(1, 99999)) . '.' . $ext;
 }
/**
 * Simple function to demonstrate how to control file access using "accessControl" callback.
 * This method will disable accessing files/folders starting from  '.' (dot)
 *
 * @param  UTF8String $attr attribute name (read|write|locked|hidden)
 * @param  UTF8String $path file path relative to volume root directory started with directory separator
 *
 * @return bool|null
 **/
function access($attr, $path, $data, $volume)
{
    return UTF8String::strpos(basename($path), '.') === 0 ? !($attr == 'read' || $attr == 'write') : null;
    // else elFinder decide it itself
}