Обновление количества комментов к фотографиям

В админке движка есть раздел, где можно пересчитать имеющиеся "предметы", например, фотографии пользователей, или количество блогов. Это довольно полезная "вещ", представьте, что произошел сбой, не важно какой, не важно по какой причине, но он привел к тому, что счетчики фотографий отображают неверное количество фоток. Идем в админку и простым нажатием на кнопку "Пересчитать", обновляем все счетчики, после чего все счетчики показывают правильно. Удобно!

Сегодня я заметил, что у некоторых фотографиях, счетчики комментов показывают неверное количество, сразу загорелось написать примочку, которая будет исправлять эту ошибку. Я впилил в админку пересчет комментов к фотографиям, туда, где и все пересчетчики. Вот, что я сделал: Во первых добавил новую языковую фразу:
Ключ - photo.update_comments_photo
Русский язык - Обновление количества комментов к фото
Английский язык - Update the number of comments on the photo
После открываю файл "module/photo/include/service/callback.class.php" и полностью переписываю функцию updateCounterList, вот так:
	public function updateCounterList()
	{
		return [
			[
				'name' => phpfox::getPhrase('photo.update_comments_photo'),
				'id'   => 'photo-comment'
			],
			[
				'name' => phpfox::getPhrase('photo.update_photo_thumbnails'),
				'id'   => 'photo-thumbnail'
			],
			[
				'name' => phpfox::getPhrase('photo.update_user_photo_count'),
				'id'   => 'photo-count'
			],
			[
				'name' => phpfox::getPhrase('photo.update_profile_photos'),
				'id'   => 'photo-profile'
			],
			[
				'name' => phpfox::getPhrase('photo.photo_count_for_photo_albums'),
				'id'   => 'photo-album'
			]
		];
	}

Как видите, в моей функции нет пункта (элемента массива) пересчета тегов к фото, я вырезал теги, мне они не к чему. Если у вас этот пункт есть, оставьте его.
Дальше, в функции updateCounter, после: условия - пересчета photo-count, добавляю следующий код:
		else if ($id == 'photo-comment')
		{
			$cnt = $this->database()
				->select('COUNT(*)')
				->from(phpfox::getT('photo'))
				->execute('getSlaveField');

			$rows = $this->database()
				->select('photo_id')
				->from(phpfox::getT('photo'))
				->limit($page, $pageLimit, $cnt)
				->execute('getSlaveRows');

			foreach ($rows as $row)
			{
				$total = $this->database()
					->select('COUNT(*)')
					->from(phpfox::getT('comment'))
					->where('type_id = \'photo\' AND parent_id = 0 AND item_id = ' . (int) $row['photo_id'])
					->execute('getSlaveField');

				$this->database()
					->update(phpfox::getT('photo'), [
						'total_comment' => $total
					], 'photo_id = ' . (int) $row['photo_id']
				);
			}
		}

Моя функция updateCounter в целом выглядит так:
	public function updateCounter($id, $page, $pageLimit)
	{
		if ($id == 'photo-profile')
		{
			$cnt = $this->database()
			    ->select('COUNT(*)')
				->from(phpfox::getT('photo'), 'p')
				->join(phpfox::getT('photo_album'), 'pa', 'pa.album_id = p.album_id AND pa.profile_id > 0')
				->execute('getSlaveField');
				
			$rows = $this->database()
			    ->select('p.photo_id')
				->from(phpfox::getT('photo'), 'p')
				->join(phpfox::getT('photo_album'), 'pa', 'pa.album_id = p.album_id AND pa.profile_id > 0')
				->limit($page, $pageLimit, $cnt)
				->execute('getSlaveRows');				
			
			foreach ($rows as $row)
			{
				$this->database()
					->update(phpfox::getT('photo'), [
						'is_profile_photo' => '1'
					], 'photo_id = ' . $row['photo_id']
				);
			}			
		}		
		else if ($id == 'photo-thumbnail')
		{
			ini_set('memory_limit', '100M');
			
			$cnt = $this->database()
			    ->select('COUNT(*)')
				->from(phpfox::getT('photo'))
				->where($this->database()->isNotNull('destination'))
				->execute('getSlaveField');			
				
			$rows = $this->database()
			    ->select('photo_id, destination')
				->from(phpfox::getT('photo'))
				->where($this->database()->isNotNull('destination'))
				->limit($page, $pageLimit, $cnt)
				->execute('getSlaveRows');		
		
			$image = phpfox::getLib('image');
			foreach ($rows as $row)
			{				
				if (preg_match("/\{file\/pic\/(.*)\/(.*)\.jpg\}/i", $row['destination'], $matches))
				{
					$path = PHPFOX_DIR;
					$fileName = str_replace(['{', '.jpg}'], ['', '%s.jpg'], $row['destination']);			
				}
				else 
				{
					$path = phpfox::getParam('photo.dir_photo');
					$fileName = $row['destination'];
				}							
				
				if (file_exists($path . sprintf($fileName, '')))
				{					
					foreach (phpfox::getParam('photo.photo_pic_sizes') as $size)
					{					
						if ($image->createThumbnail($path . sprintf($fileName, ''), $path . sprintf($fileName, '_' . $size), $size, $size) === false)
						{							
							continue;
						}						
						
						if (phpfox::getParam('photo.enabled_watermark_on_photos'))
						{
						 	$image->addMark($path . sprintf($fileName, '_' . $size));
						}					
					}
					
					if (phpfox::getParam('photo.enabled_watermark_on_photos'))					
					{						
					 	$image->addMark($path . sprintf($fileName, ''));
					}
				}				
			}
		}	
		else if ($id == 'photo-count')
		{
			$cnt = $this->database()
			    ->select('COUNT(*)')
				->from(phpfox::getT('user'))
				->execute('getSlaveField');					

			$rows = $this->database()
			    ->select('u.user_id')
				->from(phpfox::getT('user'), 'u')
				->limit($page, $pageLimit, $cnt)
				->group('u.user_id')
				->execute('getSlaveRows');

			foreach ($rows as $row)
			{
				$totalPhotos = $this->database()
				    ->select('COUNT(f.photo_id)')
					->from(phpfox::getT('photo'), 'f')
					->where('f.view_id = 0 AND f.group_id = 0 AND f.type_id = 0 AND f.privacy = 0 AND f.user_id = ' . (int) $row['user_id'])
					->execute('getSlaveField');		

				$this->database()
					->update(phpfox::getT('user_field'), [
						'total_photo' => $totalPhotos
					], 'user_id = ' . $row['user_id']
				);			
			}			
		}
		else if ($id == 'photo-comment')
		{
			$cnt = $this->database()
				->select('COUNT(*)')
				->from(phpfox::getT('photo'))
				->execute('getSlaveField');

			$rows = $this->database()
				->select('photo_id')
				->from(phpfox::getT('photo'))
				->limit($page, $pageLimit, $cnt)
				->execute('getSlaveRows');

			foreach ($rows as $row)
			{
				$total = $this->database()
					->select('COUNT(*)')
					->from(phpfox::getT('comment'))
					->where('type_id = \'photo\' AND parent_id = 0 AND item_id = ' . (int) $row['photo_id'])
					->execute('getSlaveField');

				$this->database()
					->update(phpfox::getT('photo'), [
						'total_comment' => $total
					], 'photo_id = ' . (int) $row['photo_id']
				);
			}
		}
		else if ($id == 'photo-album')
		{
			$cnt = $this->database()
				->select('COUNT(*)')
				->from(phpfox::getT('photo_album'))
				->execute('getSlaveField');
			
			$rows = $this->database()
				->select('g.album_id, COUNT(gi.photo_id) AS total_items')
				->from(phpfox::getT('photo_album'), 'g')
				->leftJoin(phpfox::getT('photo'), 'gi', 'gi.album_id = g.album_id')
				->group('g.album_id')
				->limit($page, $pageLimit, $cnt)
				->execute('getSlaveRows');
			
			foreach ($rows as $row)
			{
				$this->database()
					->update(phpfox::getT('photo_album'), [
						'total_photo' => $row['total_items']
					], 'album_id = ' . (int) $row['album_id']
				);
			}
		}

		return $cnt;
	}

Готово. Теперь в админке можно пересчитать количество комментов к фотографиям.

При копировании моего кода, будьте внимательны, названия моих переменных отличаются от стандарта phpFox.