mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-10-31 16:06:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			222 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * @package POT
 | |
|  * @version 0.1.3
 | |
|  * @author Wrzasq <wrzasq@gmail.com>
 | |
|  * @copyright 2007 - 2008 (C) by Wrzasq
 | |
|  * @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
 | |
|  */
 | |
| 
 | |
| use MyAAC\Cache\Cache;
 | |
| 
 | |
| /**
 | |
|  * List of groups.
 | |
|  *
 | |
|  * @package POT
 | |
|  * @version 0.1.3
 | |
|  */
 | |
| class OTS_Groups_List implements IteratorAggregate, Countable
 | |
| {
 | |
| /**
 | |
|  * Groups.
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
|     private $groups = array();
 | |
| 
 | |
| /**
 | |
|  * Loads group list.
 | |
|  *
 | |
|  * @param string $file Groups file name.
 | |
|  * @throws DOMException On DOM operation error.
 | |
|  */
 | |
|     public function __construct($file = '')
 | |
|     {
 | |
| 		global $db;
 | |
| 		if($db->hasTable('groups')) { // read groups from database
 | |
| 			foreach($db->query('SELECT `id`, `name`, `access` FROM `groups`;') as $group)
 | |
| 			{
 | |
| 				$info = array();
 | |
| 				$info['id'] = $group['id'];
 | |
| 				$info['name'] = $group['name'];
 | |
| 				$info['access'] = $group['name'];
 | |
| 				$this->groups[$group['id']] = new OTS_Group($info);
 | |
| 			}
 | |
| 
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		if(!isset($file[0]))
 | |
| 		{
 | |
| 			global $config;
 | |
| 			$file = $config['data_path'] . 'XML/groups.xml';
 | |
| 		}
 | |
| 
 | |
| 		if(!@file_exists($file)) {
 | |
| 			error('Error: Cannot load groups.xml. More info in system/logs/error.log file.');
 | |
| 			log_append('error.log', '[OTS_Groups_List.php] Fatal error: Cannot load groups.xml (' . $file . '). It doesnt exist.');
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$cache = Cache::getInstance();
 | |
| 
 | |
| 		$data = array();
 | |
| 		if($cache->enabled())
 | |
| 		{
 | |
| 			$tmp = '';
 | |
| 			if($cache->fetch('groups', $tmp))
 | |
| 				$data = unserialize($tmp);
 | |
| 			else
 | |
| 			{
 | |
| 				$groups = new DOMDocument();
 | |
| 				if(!@$groups->load($file)) {
 | |
| 					error('Error: Cannot load groups.xml. More info in system/logs/error.log file.');
 | |
| 					log_append('error.log', '[OTS_Groups_List.php] Fatal error: Cannot load groups.xml (' . $file . '). Error: ' . print_r(error_get_last(), true));
 | |
| 					return;
 | |
| 				}
 | |
| 
 | |
| 				// loads groups
 | |
| 				foreach( $groups->getElementsByTagName('group') as $group)
 | |
| 				{
 | |
| 					$data[$group->getAttribute('id')] = array(
 | |
| 						'id' => $group->getAttribute('id'),
 | |
| 						'name' => $group->getAttribute('name'),
 | |
| 						'access' => $group->getAttribute('access')
 | |
| 					);
 | |
| 				}
 | |
| 
 | |
| 				$cache->set('groups', serialize($data), 120);
 | |
| 			}
 | |
| 
 | |
| 			foreach($data as $id => $info)
 | |
| 				$this->groups[ $id ] = new OTS_Group($info);
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			// loads DOM document
 | |
| 			$groups = new DOMDocument();
 | |
| 			if(!@$groups->load($file)) {
 | |
| 				error('Error: Cannot load groups.xml. More info in system/logs/error.log file.');
 | |
| 				log_append('error.log', '[OTS_Groups_List.php] Fatal error: Cannot load groups.xml (' . $file . '). Error: ' . print_r(error_get_last(), true));
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			// loads groups
 | |
| 			foreach($groups->getElementsByTagName('group') as $group)
 | |
| 			{
 | |
| 				$data[$group->getAttribute('id')] = array(
 | |
| 					'id' => $group->getAttribute('id'),
 | |
| 					'name' => $group->getAttribute('name'),
 | |
| 					'access' => $group->getAttribute('access')
 | |
| 				);
 | |
| 
 | |
| 				$this->groups[ $group->getAttribute('id') ] = new OTS_Group($data[$group->getAttribute('id')]);
 | |
| 				//echo $this->getGroup(1)->getName();
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns given group.
 | |
|  *
 | |
|  * @version 0.1.3
 | |
|  * @param int $id Group id.
 | |
|  * @return OTS_Group group wrapper.
 | |
|  * @throws OutOfBoundsException If group does not exist.
 | |
|  */
 | |
|     public function getGroup($id)
 | |
|     {
 | |
|         if( isset($this->groups[$id]) )
 | |
|         {
 | |
|             return $this->groups[$id];
 | |
|         }
 | |
| 
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
| /**
 | |
|  * Returns all groups.
 | |
|  *
 | |
|  * @version 0.1.3
 | |
|  * @return array with OTS_Group group wrappers.
 | |
|  * @throws OutOfBoundsException If group does not exist.
 | |
|  */
 | |
|     public function getGroups()
 | |
|     {
 | |
|         if( isset($this->groups) )
 | |
|         {
 | |
|             return $this->groups;
 | |
|         }
 | |
| 
 | |
|         throw new OutOfBoundsException();
 | |
|     }
 | |
| 
 | |
| 	public function getHighestId()
 | |
| 	{
 | |
| 		$group_id = 0;
 | |
| 		foreach($this->groups as $id => $group) {
 | |
| 			if($id > $group_id)
 | |
| 				$group_id = $id;
 | |
| 		}
 | |
| 
 | |
| 		return $group_id;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns string representation of object.
 | |
|  *
 | |
|  * <p>
 | |
|  * If any display driver is currently loaded then it uses it's method.
 | |
|  * </p>
 | |
|  *
 | |
|  * @version 0.1.3
 | |
|  * @since 0.1.0
 | |
|  * @return string String representation of object.
 | |
|  */
 | |
|     public function __toString()
 | |
|     {
 | |
|         $ots = POT::getInstance();
 | |
| 
 | |
|         // checks if display driver is loaded
 | |
|         if( $ots->isDisplayDriverLoaded() )
 | |
|         {
 | |
|             return $ots->getDisplayDriver()->displayGroupsList($this);
 | |
|         }
 | |
| 
 | |
|         return (string) $this->count();
 | |
|     }
 | |
| 
 | |
| /**
 | |
|  * Iterator for all groups.
 | |
|  *
 | |
|  * <p>
 | |
|  * Returned object will continousely iterate through all kind of groups.
 | |
|  * </p>
 | |
|  *
 | |
|  * @version 0.1.5
 | |
|  * @since 0.1.5
 | |
|  * @return AppendIterator Iterator for all groups.
 | |
|  */
 | |
| 	#[\ReturnTypeWillChange]
 | |
|     public function getIterator()
 | |
|     {
 | |
|         $iterator = new AppendIterator();
 | |
|         $iterator->append( new ArrayIterator($this->groups) );
 | |
|         return $iterator;
 | |
|     }
 | |
| 
 | |
| /**
 | |
|  * Number of all loaded groups.
 | |
|  *
 | |
|  * @version 0.1.5
 | |
|  * @since 0.1.5
 | |
|  * @return int Amount of all groups.
 | |
|  */
 | |
|     public function count(): int
 | |
|     {
 | |
|         return count($this->groups);
 | |
|     }
 | |
| }
 | |
| ?>
 | 
