Kaynağa Gözat

fix calculation of feed counts in pref-feeds editor

Andrew Dolgov 11 yıl önce
ebeveyn
işleme
496195db4e
1 değiştirilmiş dosya ile 21 ekleme ve 6 silme
  1. 21 6
      classes/pref/feeds.php

+ 21 - 6
classes/pref/feeds.php

@@ -58,9 +58,10 @@ class Pref_Feeds extends Handler_Protected {
 
 			$cat['items'] = $this->get_category_items($line['id']);
 
-			$cat['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', count($cat['items'])), count($cat['items']));
+			$num_children = $this->calculate_children_count($cat);
+			$cat['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', $num_children), $num_children);
 
-			if (count($cat['items']) > 0 || $show_empty_cats)
+			if ($num_children > 0 || $show_empty_cats)
 				array_push($items, $cat);
 
 		}
@@ -206,9 +207,10 @@ class Pref_Feeds extends Handler_Protected {
 
 				$cat['items'] = $this->get_category_items($line['id']);
 
-				$cat['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', count($cat['items'])), count($cat['items']));
+				$num_children = $this->calculate_children_count($cat);
+				$cat['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', $num_children), $num_children);
 
-				if (count($cat['items']) > 0 || $show_empty_cats)
+				if ($num_children > 0 || $show_empty_cats)
 					array_push($root['items'], $cat);
 
 				$root['param'] += count($cat['items']);
@@ -255,8 +257,8 @@ class Pref_Feeds extends Handler_Protected {
 			if (count($cat['items']) > 0 || $show_empty_cats)
 				array_push($root['items'], $cat);
 
-			$root['param'] += count($cat['items']);
-			$root['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', count($cat['items'])), count($cat['items']));
+			$num_children = $this->calculate_children_count($root);
+			$root['param'] = vsprintf(_ngettext('(%d feed)', '(%d feeds)', $num_children), $num_children);
 
 		} else {
 			$feed_result = $this->dbh->query("SELECT id, title, last_error,
@@ -1937,6 +1939,19 @@ class Pref_Feeds extends Handler_Protected {
 			owner_uid = " . $_SESSION["uid"]);
 	}
 
+	private function calculate_children_count($cat) {
+		$c = 0;
+
+		foreach ($cat['items'] as $child) {
+			if ($child['type'] == 'category') {
+				$c += $this->calculate_children_count($child);
+			} else {
+				$c += 1;
+			}
+		}
+
+		return $c;
+	}
 
 }
 ?>