<commit_before><?php

namespace Difra\Plugins;

class Users {

	/**
	 * Выводит список пользователей с учетом фильтра
	 * @param \DOMNode $node
	 * @param int      $page
	 */
	public static function getListXML( \DOMNode $node, $page = 1 ) {

		$Users = new \Difra\Unify\Search( 'UsersUser' );

		$Users->setPage( intval( $page ) );
		$Users->setPerpage( 40 );

		$Filter = new \Difra\Plugins\Users\Filter();
		$Filter->setConditions( $Users );

		$Users->getListXML( $node );
	}

	/**
	 * Возвращает настройки работы с пользователями
	 * @return array|null
	 */
	public static function getSettings() {

		$settings = \Difra\Config::getInstance()->get( 'users_settings' );
		return $settings;
	}

	/**
	 * Устанавливает настройки работы с пользователями в xml
	 * @param \DOMNode $node
	 */
	public static function getSettingsXML( \DOMNode $node ) {

		$settings = self::getSettings();
		if( !empty( $settings ) ) {
			foreach( $settings as $key=>$value ) {
				$node->setAttribute( $key, $value );
			}
		}
	}

	/**
	 * Сохраняет настройки работы с пользователями
	 * @param array $settingsArray
	 */
	public static function saveSettings( array $settingsArray ) {

		\Difra\Config::getInstance()->set( 'users_settings', $settingsArray );
	}

}<commit_msg>Добавлен метод для вывода кастомных списков пользователей с основными и дополнительными полями.<commit_after><?php

namespace Difra\Plugins;

class Users {

	/**
	 * Выводит список пользователей с учетом фильтра
	 * @param \DOMNode $node
	 * @param int      $page
	 */
	public static function getListXML( \DOMNode $node, $page = 1 ) {

		$Users = new \Difra\Unify\Search( 'UsersUser' );

		$Users->setPage( intval( $page ) );
		$Users->setPerpage( 40 );

		$Filter = new \Difra\Plugins\Users\Filter();
		$Filter->setConditions( $Users );

		$Users->getListXML( $node );
	}

	/**
	 * Возвращает настройки работы с пользователями
	 * @return array|null
	 */
	public static function getSettings() {

		$settings = \Difra\Config::getInstance()->get( 'users_settings' );
		return $settings;
	}

	/**
	 * Устанавливает настройки работы с пользователями в xml
	 * @param \DOMNode $node
	 */
	public static function getSettingsXML( \DOMNode $node ) {

		$settings = self::getSettings();
		if( !empty( $settings ) ) {
			foreach( $settings as $key=>$value ) {
				$node->setAttribute( $key, $value );
			}
		}
	}

	/**
	 * Сохраняет настройки работы с пользователями
	 * @param array $settingsArray
	 */
	public static function saveSettings( array $settingsArray ) {

		\Difra\Config::getInstance()->set( 'users_settings', $settingsArray );
	}

	/**
	 * Возвращает полный список всех пользователей с их параметрами и выбранными дополнительными полями
	 * @param \DOMNode $node
	 * @param array    $fields
	 * @param array    $joinedFields
	 */
	public static function getCustomListXML( \DOMNode $node, array $fields = null, array $joinedFields = null ) {

		$db = \Difra\MySQL::getInstance();
		$mainFields = array();
		$mainFieldsString = '';
		$joinSelectFields = array();
		$joinSelectFieldsString = '';
		$joinString = '';

		if( !empty( $fields ) ) {
			foreach( $fields as $key ) {
				$mainFields[] = "u.`" . $key . "`";
			}
			$mainFieldsString = ', ' . implode( ', ', $mainFields );
		}

		if( !empty( $joinedFields ) ) {
			foreach( $joinedFields as $key ) {
				$joinSelectFields[] = "`uf_" . $key . "`.`value` AS `" . $key . "`";

				$joinString .= " LEFT JOIN `users_fields` AS `uf_" . $key .
							"` ON u.`id` = `uf_" . $key . "`.`id` AND `uf_" . $key . "`.`name`='" . $key . "' ";
			}
			$joinSelectFieldsString = ', ' . implode( ', ', $joinSelectFields );
		}

		$query = "SELECT u.`id`, u.`email`" . $mainFieldsString . $joinSelectFieldsString . " FROM `users` u " . $joinString;
		$res = $db->fetch( $query );

		if( !empty( $res ) ) {
			$usersNode = $node->appendChild( $node->ownerDocument->createElement( 'users' ) );
			foreach( $res as $k=>$data ) {
				$userNode = $usersNode->appendChild( $node->ownerDocument->createElement( 'user' ) );
				foreach( $data as $key=>$value ) {
					$userNode->setAttribute( $key, $value );
				}
			}
		}
	}

}
{'fraction_non_alphanumeric': 0.1650485436893204, 'fraction_numerical': 0.0014563106796116505, 'mean_word_length': 3.3747346072186835, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6786103', 'n_tokens_mistral': 1603, 'n_tokens_neox': 1487, 'n_words': 338}