mirror of
https://github.com/ZeJMaN/LBCAlerte_ynh.git
synced 2025-06-08 05:25:30 +02:00
124 lines
3.3 KiB
PHP
124 lines
3.3 KiB
PHP
<?php
|
|
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* @package log4php
|
|
*/
|
|
|
|
/**
|
|
* Contains various helper methods.
|
|
*
|
|
* @package log4php
|
|
* @subpackage helpers
|
|
* @since 2.3
|
|
*/
|
|
class LoggerUtils {
|
|
|
|
/**
|
|
* Splits a fully qualified class name into fragments delimited by the
|
|
* namespace separator (\).
|
|
*
|
|
* For backward compatibility, a dot (.) can be used as a delimiter as
|
|
* well.
|
|
*
|
|
* @param string $name
|
|
*
|
|
* @return array Class name split into fragments.
|
|
*/
|
|
public static function tokenizeClassName($name) {
|
|
$name = str_replace('.', '\\', $name);
|
|
$name = trim($name, ' \\');
|
|
$fragments = explode('\\', $name);
|
|
|
|
foreach($fragments as $key => $fragment) {
|
|
if (trim($fragment) === '') {
|
|
unset($fragments[$key]);
|
|
}
|
|
}
|
|
|
|
return $fragments;
|
|
}
|
|
|
|
/**
|
|
* Attempts to shorten the given class name to the desired length.
|
|
*
|
|
* This is done by separating the class name into fragments (delimited
|
|
* by \ or .) and trimming individual fragments, starting with the left,
|
|
* until desired length has been reached.
|
|
*
|
|
* The final fragment (i.e. class name) will never be shortened so the
|
|
* result may still be longer than given length.
|
|
*
|
|
* @param string $name The (qualified) class name.
|
|
* @param integer $length The length to shorten to. If null or 0 is given,
|
|
* the name will be returned without shortening.
|
|
*/
|
|
public static function shortenClassName($name, $length) {
|
|
if ($length === null || $length < 0) {
|
|
return $name;
|
|
}
|
|
|
|
$name = str_replace('.', '\\', $name);
|
|
$name = trim($name, ' \\');
|
|
|
|
// Check if any shortening is required
|
|
$currentLength = strlen($name);
|
|
if ($currentLength <= $length) {
|
|
return $name;
|
|
}
|
|
|
|
// Split name into fragments
|
|
$fragments = explode('\\', $name);
|
|
|
|
// If zero length is specified, return only last fragment
|
|
if ($length == 0) {
|
|
return array_pop($fragments);
|
|
}
|
|
|
|
// If the name splits to only one fragment, then it cannot be shortened
|
|
$count = count($fragments);
|
|
if ($count == 1) {
|
|
return $name;
|
|
}
|
|
|
|
foreach($fragments as $key => &$fragment) {
|
|
|
|
// Never shorten last fragment
|
|
if ($key == $count - 1) {
|
|
break;
|
|
}
|
|
|
|
// Check for empty fragments (shouldn't happen but it's possible)
|
|
$fragLen = strlen($fragment);
|
|
if ($fragLen <= 1) {
|
|
continue;
|
|
}
|
|
|
|
// Shorten fragment to one character and check if total length satisfactory
|
|
$fragment = substr($fragment, 0, 1);
|
|
$currentLength = $currentLength - $fragLen + 1;
|
|
|
|
if ($currentLength <= $length) {
|
|
break;
|
|
}
|
|
}
|
|
unset($fragment);
|
|
|
|
return implode('\\', $fragments);
|
|
}
|
|
}
|
|
|