Функция cot_import_list в Cotonti

Разбор функции cot_import_list
Функция cot_import_list используется для импорта данных из различных источников, причем она позволяет обрабатывать несколько переменных одновременно, применяя фильтры для каждой переменной. Она работает с массивом имен переменных и их соответствующими фильтрами, а также с несколькими источниками данных.

Код функции

/**
 * Imports data from the outer world by list of Variable names
 * Relies on cot_import function
 *
 * @param array|string $nameslist List of Variables names to import, can be:<br />
 *                 string 'name1, name2 , ...' - list of variable names comma separated.<br />
 *                 array('name1', 'name2', ...) - list of variable names only.
 *                 In that case $filter parameter must be specified.<br />
 *                 array('name1' => 'TYPE1', 'name2' => 'TYPE2' ,...) - list of variable names with their filter types
 * @param string $source Source type: G/GET, P/POST, C/COOKIE, R/REQUEST, PUT, DELETE or D/DIRECT (variable filtering)
 * @param array $origindata Array with origin data that will be extended with imported one
 * @param string $nameprefix Unified prefix for Variables names
 * @param string $filter Filter type, can be set as:<br />
 *                 string 'FLT' - single filter string for all Variables<br />
 *                 string 'FLT1, FLT2, ...' - comma separated string with filters corresponding to Variable names<br />
 *                 array('FLT1', 'FLT2', ...) - array of filters<br />
 *             Overrides Filter types specified in $nameslist. If passed as list - number of Filters must be equal to count of
 *             variables names in $nameslist.
 *
 * @param bool $arrayprefix Use $nameprefix for array fields
 * @param int $maxlen Length limit
 * @param bool $dieonerror Die with fatal error on wrong input
 * @param bool $buffer Try to load from input buffer (previously submitted) if current value is empty
 * @return ?array Returns combined array of data or NULL if wrong parameters set
 */
function cot_import_list(
    $nameslist = [],
    $source = 'P',
    $origindata = [],
    $nameprefix = '',
    $filter = null,
    $arrayprefix = false,
    $maxlen = 0,
    $dieonerror = false,
    $buffer = false
) {
    $direct = ($source == 'D' || $source == 'DIRECT');
    $filter = empty($filter) ? null : $filter;
    $nameslist = empty($nameslist) ? [] : $nameslist;
    $origindata = (empty($origindata) || !is_array($origindata)) ? [] : $origindata;

    if (empty($nameslist)) {
        $nameslist = [];
    } elseif (!is_array($nameslist)) {
        $nameslist = array_map('trim', explode(',', $nameslist));
    }

    if (!empty($filter) && !is_array($filter)) {
        if (strpos($filter, ',') !== false) {
            $filter = array_map('trim', explode(',', $filter));
        } else {
            $filter = array_fill(
                0,
                sizeof($direct && empty($nameslist) ? $origindata : $nameslist),
                $filter
            );
        }
    }

    if (!$direct && sizeof($nameslist) == 0) {
        // no proper name list
        return null;
    } elseif (sizeof($nameslist) == 0) {
        // direct by origin
        if (is_null($filter)) {
            return null;
        }
        foreach ($origindata as $key => $value) {
            $origindata[$key] = cot_import($value, 'D', array_shift($filter), $maxlen, $dieonerror);
        }
    } else {
        // namelist exists
        $index = array_keys($nameslist);
        $index = array_pop($index);
        $types_not_defined = (is_numeric($index) && is_int($index));

        if (
            (is_array($filter) && sizeof($filter) != sizeof($nameslist))
            || ($types_not_defined && is_null($filter))
        ) {
            // can't rely on filter or no filter exists
            return null;
        } elseif (is_array($filter)) {
            $nameslist = array_combine($types_not_defined ? $nameslist : array_keys($nameslist), $filter);
        }

        foreach ($nameslist as $name => $filtertype) {
            $origindata[($arrayprefix) ? $nameprefix . $name : $name] = cot_import(
                $direct ? $origindata[$nameprefix . $name] : $nameprefix . $name,
                $source,
                $filtertype,
                $maxlen,
                $dieonerror,
                $buffer
            );
        }
    }

    return $origindata;
}


Описание:

cot_import_list($nameslist, $source, $origindata, $nameprefix, $filter, $arrayprefix, $maxlen, $dieonerror, $buffer)


 

Параметры:
$nameslist: Список переменных для импорта:

Строка, содержащая через запятую имена переменных.
Массив, в котором значения — имена переменных.
Ассоциативный массив, где ключи — имена переменных, а значения — типы фильтров.
$source: Источник данных, из которого будет происходить импорт (например, 'GET', 'POST', 'COOKIE' и т.д.). По умолчанию используется 'POST'.

$origindata: Массив с исходными данными, в который будут добавляться данные после импорта.

$nameprefix: Префикс, который будет добавлен к именам переменных.

$filter: Тип фильтра, который будет применяться к переменным. Это может быть строка с одним фильтром для всех переменных или массив фильтров для каждой переменной по очереди.

$arrayprefix: Если установлено в true, будет добавлен префикс к массивам.

$maxlen: Ограничение длины для данных.

$dieonerror: Если установлено в true, при ошибке произойдет фатальная ошибка.

$buffer: Если установлено в true, функция будет использовать буферизацию данных.

Логика работы:

Инициализация переменных:

Проверяется параметр $source, чтобы определить, будет ли это прямой доступ к данным или будет использоваться одна из стандартных источников данных (например, $_GET, $_POST).
Проверяется, что список переменных в $nameslist не пуст.

Обработка фильтров:

Если фильтры переданы как строка, она делится на массив с помощью explode().
Если фильтры не переданы, то для каждого имени в списке переменных фильтр по умолчанию применяется ко всем переменным.

Прямой доступ к данным:

Если используется прямой доступ (например, D или DIRECT), то функция обрабатывает данные из массива $origindata напрямую, без использования глобальных массивов.

Обработка с использованием имен переменных:

Если передан список переменных с фильтрами, то для каждой переменной из списка вызывается функция cot_import с соответствующими параметрами. Результаты записываются в массив $origindata.

Возвращение результата:

Функция возвращает массив с результатами импорта, где данные объединены с исходными данными (массив $origindata).

Пример использования:

// Пример использования с массивом переменных и фильтров
$names = ['username' => 'TXT', 'age' => 'INT', 'email' => 'TXT'];
$data = cot_import_list($names, 'POST', [], 'user_', 'TXT');


// Пример использования с прямым импортом из GET с общим фильтром
$names = 'name, age, email';
$data = cot_import_list($names, 'GET', [], '', 'TXT');

 

Примечания:

Обработка с буфером:
Если в параметре $buffer установлено значение true, то функция будет пытаться загрузить данные из буфера (если они были отправлены ранее).

Поддержка нескольких фильтров:
Функция поддерживает фильтрацию каждого параметра по-разному. Если фильтр не указан для переменной, она будет обработана по умолчанию (например, как строка).

Прямой доступ:
Если необходимо использовать данные из массива, который уже существует (например, переданные данные в $origindata), можно использовать прямой доступ без обращения к глобальным массивам, передав 'D' в параметр $source.

Важные моменты:
Функция cot_import_list является более гибким инструментом для массового импорта и обработки данных, поскольку позволяет работать с несколькими переменными и фильтрами одновременно.

Она также поддерживает различные источники данных, что делает её универсальной в различных сценариях (например, работы с формами или запросами).

5 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Content author

Administrator

Offline

Administrator

Last logged: 2026-08-03 13:51

  • Page published: 2025-01-21 11:40
  • Last update: 2025-01-21 11:40