• Модуль: xmpp
  • Путь к файлу: ~/bitrix/modules/xmpp/classes/factory.php
  • Класс: CXMPPFactory
  • Вызов: CXMPPFactory::Initialize
private function Initialize()
{
	if ($this->isInitialized)
		return;

	CModule::IncludeModule('socialnetwork');
	CModule::IncludeModule('iblock');

	$this->arReceiveClasses = array();
	$this->arProcessServerClasses = array();
	$this->arClearCacheClasses = array();

	if ($handle = @opendir($_SERVER["DOCUMENT_ROOT"].$this->classesDir))
	{
		while (($file = readdir($handle)) !== false)
		{
			if ($file == "." || $file == "..")
				continue;

			if (!is_file($_SERVER["DOCUMENT_ROOT"].$this->classesDir."/".$file))
				continue;

			$className = "";
			$classVersion = 1;
			include($_SERVER["DOCUMENT_ROOT"].$this->classesDir."/".$file);

			if ($className == '')
				continue;

			$c = new $className();
			$c->Initialize();

			if (is_subclass_of($c, "CXMPPFactoryHandler"))
			{
				if ($c instanceof IXMPPFactoryHandler)
					$this->arReceiveClasses[] = $c;
				if ($c instanceof IXMPPFactoryServerHandler)
					$this->arProcessServerClasses[] = $c;
				if ($c instanceof IXMPPFactoryCleanableHandler)
					$this->arClearCacheClasses[] = $c;
			}
			else
			{
				if (method_exists($c, "ReceiveMessage"))
					$this->arReceiveClasses[] = $c;
				if (method_exists($c, "ProcessServerMessage"))
					$this->arProcessServerClasses[] = $c;
				if (method_exists($c, "ClearCaches"))
					$this->arClearCacheClasses[] = $c;
			}
		}

		closedir($handle);
	}

	$cnt = count($this->arReceiveClasses);
	for ($i = 0; $i < $cnt - 1; $i++)
	{
		for ($j = $i + 1; $j < $cnt; $j++)
		{
			$ix1 = (is_subclass_of($this->arReceiveClasses[$i], "CXMPPFactoryHandler") ? $this->arReceiveClasses[$i]->GetIndex() : $this->arReceiveClasses[$i]->receiveMessageIndex);
			$ix2 = (is_subclass_of($this->arReceiveClasses[$j], "CXMPPFactoryHandler") ? $this->arReceiveClasses[$j]->GetIndex() : $this->arReceiveClasses[$j]->receiveMessageIndex);
			if ($ix1 > $ix2)
			{
				$t = $this->arReceiveClasses[$i];
				$this->arReceiveClasses[$i] = $this->arReceiveClasses[$j];
				$this->arReceiveClasses[$j] = $t;
			}
		}
	}

	$cnt = count($this->arProcessServerClasses);
	for ($i = 0; $i < $cnt - 1; $i++)
	{
		for ($j = $i + 1; $j < $cnt; $j++)
		{
			$ix1 = (is_subclass_of($this->arProcessServerClasses[$i], "CXMPPFactoryHandler") ? $this->arProcessServerClasses[$i]->GetServerIndex() : $this->arProcessServerClasses[$i]->processServerMessageIndex);
			$ix2 = (is_subclass_of($this->arProcessServerClasses[$j], "CXMPPFactoryHandler") ? $this->arProcessServerClasses[$j]->GetServerIndex() : $this->arProcessServerClasses[$j]->processServerMessageIndex);
			if ($ix1 > $ix2)
			{
				$t = $this->arProcessServerClasses[$i];
				$this->arProcessServerClasses[$i] = $this->arProcessServerClasses[$j];
				$this->arProcessServerClasses[$j] = $t;
			}
		}
	}

	$this->isInitialized = true;
}