<commit_before><?php
class Opml extends Handler_Protected {

	function csrf_ignore($method) {
		$csrf_ignored = array("export", "import");

		return array_search($method, $csrf_ignored) !== false;
	}

	function export() {
		$output_name = $_REQUEST["filename"];
		if (!$output_name) $output_name = "TinyTinyRSS.opml";

		$show_settings = $_REQUEST["settings"];

		$owner_uid = $_SESSION["uid"];
		return $this->opml_export($output_name, $owner_uid, false, ($show_settings == 1));
	}

	function import() {
		$owner_uid = $_SESSION["uid"];

		header('Content-Type: text/html; charset=utf-8');

		print "<html>
			<head>
				<link rel=\"stylesheet\" href=\"utility.css\" type=\"text/css\">
				<title>".__("OPML Utility")."</title>
				<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
			</head>
			<body>
			<div class=\"floatingLogo\"><img src=\"images/logo_wide.png\"></div>
			<h1>".__('OPML Utility')."</h1>";

		add_feed_category($this->link, "Imported feeds");

		$this->opml_notice(__("Importing OPML..."));
		$this->opml_import($owner_uid);

		print "<br><form method=\"GET\" action=\"prefs.php\">
			<input type=\"submit\" value=\"".__("Return to preferences")."\">
			</form>";

		print "</body></html>";


	}

	// Export

	private function opml_export_category($owner_uid, $cat_id, $hide_private_feeds=false) {

		if ($cat_id) {
			$cat_qpart = "parent_cat = '$cat_id'";
			$feed_cat_qpart = "cat_id = '$cat_id'";
		} else {
			$cat_qpart = "parent_cat IS NULL";
			$feed_cat_qpart = "cat_id IS NULL";
		}

		if ($hide_private_feeds)
			$hide_qpart = "(private IS false AND auth_login = '' AND auth_pass = '')";
		else
			$hide_qpart = "true";

		$out = "";

		if ($cat_id) {
			$result = db_query($this->link, "SELECT title FROM ttrss_feed_categories WHERE id = '$cat_id'
				AND owner_uid = '$owner_uid'");
			$cat_title = db_fetch_result($result, 0, "title");
		}

		if ($cat_title) $out .= "<outline title=\"$cat_title\">\n";

		$result = db_query($this->link, "SELECT id,title
			FROM ttrss_feed_categories WHERE
			$cat_qpart AND owner_uid = '$owner_uid' ORDER BY order_id, title");

		while ($line = db_fetch_assoc($result)) {
			$title = htmlspecialchars($line["title"]);
			$out .= $this->opml_export_category($owner_uid, $line["id"], $hide_private_feeds);
		}

		$feeds_result = db_query($this->link, "select title, feed_url, site_url
				from ttrss_feeds where $feed_cat_qpart AND owner_uid = '$owner_uid' AND $hide_qpart
				order by order_id, title");

		while ($fline = db_fetch_assoc($feeds_result)) {
			$title = htmlspecialchars($fline["title"]);
			$url = htmlspecialchars($fline["feed_url"]);
			$site_url = htmlspecialchars($fline["site_url"]);

			if ($site_url) {
				$html_url_qpart = "htmlUrl=\"$site_url\"";
			} else {
				$html_url_qpart = "";
			}

			$out .= "<outline text=\"$title\" xmlUrl=\"$url\" $html_url_qpart/>\n";
		}

		if ($cat_title) $out .= "</outline>\n";

		return $out;
	}

	function opml_export($name, $owner_uid, $hide_private_feeds=false, $include_settings=true) {
		if (!$owner_uid) return;

		if (!isset($_REQUEST["debug"])) {
			header("Content-type: application/xml+opml");
			header("Content-Disposition: attachment; filename=" . $name );
		} else {
			header("Content-type: text/xml");
		}

		$out = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">";

		$out .= "<opml version=\"1.0\">";
		$out .= "<head>
			<dateCreated>" . date("r", time()) . "</dateCreated>
			<title>Tiny Tiny RSS Feed Export</title>
		</head>";
		$out .= "<body>";

		$out .= $this->opml_export_category($owner_uid, false, $hide_private_feeds);

		# export tt-rss settings

		if ($include_settings) {
			$out .= "<outline title=\"tt-rss-prefs\" schema-version=\"".SCHEMA_VERSION."\">";

			$result = db_query($this->link, "SELECT pref_name, value FROM ttrss_user_prefs WHERE
			   profile IS NULL AND owner_uid = " . $_SESSION["uid"] . " ORDER BY pref_name");

			while ($line = db_fetch_assoc($result)) {
				$name = $line["pref_name"];
				$value = htmlspecialchars($line["value"]);

				$out .= "<outline pref-name=\"$name\" value=\"$value\"/>";
			}

			$out .= "</outline>";

			$out .= "<outline title=\"tt-rss-labels\" schema-version=\"".SCHEMA_VERSION."\">";

			$result = db_query($this->link, "SELECT * FROM ttrss_labels2 WHERE
				owner_uid = " . $_SESSION['uid']);

			while ($line = db_fetch_assoc($result)) {
				$name = htmlspecialchars($line['caption']);
				$fg_color = htmlspecialchars($line['fg_color']);
				$bg_color = htmlspecialchars($line['bg_color']);

				$out .= "<outline label-name=\"$name\" label-fg-color=\"$fg_color\" label-bg-color=\"$bg_color\"/>";

			}

			$out .= "</outline>";

			$out .= "<outline title=\"tt-rss-filters\" schema-version=\"".SCHEMA_VERSION."\">";

			$result = db_query($this->link, "SELECT * FROM ttrss_filters2
				WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY id");

			while ($line = db_fetch_assoc($result)) {
				foreach (array('enabled', 'match_any_rule') as $b) {
					$line[$b] = sql_bool_to_bool($line[$b]);
				}

				$line["rules"] = array();
				$line["actions"] = array();

				$tmp_result = db_query($this->link, "SELECT * FROM ttrss_filters2_rules
					WHERE filter_id = ".$line["id"]);

				while ($tmp_line = db_fetch_assoc($tmp_result)) {
					unset($tmp_line["id"]);
					unset($tmp_line["filter_id"]);

					$cat_filter = sql_bool_to_bool($tmp_line["cat_filter"]);

					if ($cat_filter && $tmp_line["cat_id"] || $tmp_line["feed_id"]) {
						$tmp_line["feed"] = getFeedTitle($this->link,
							$cat_filter ? $tmp_line["cat_id"] : $tmp_line["feed_id"],
							$cat_filter);
					} else {
						$tmp_line["feed"] = "";
					}

					unset($tmp_line["feed_id"]);
					unset($tmp_line["cat_id"]);

					array_push($line["rules"], $tmp_line);
				}

				$tmp_result = db_query($this->link, "SELECT * FROM ttrss_filters2_actions
					WHERE filter_id = ".$line["id"]);

				while ($tmp_line = db_fetch_assoc($tmp_result)) {
					unset($tmp_line["id"]);
					unset($tmp_line["filter_id"]);

					array_push($line["actions"], $tmp_line);
				}

				unset($line["id"]);
				unset($line["owner_uid"]);
				$filter = json_encode($line);

				$out .= "<outline filter-type=\"2\">$filter</outline>";

			}

<commit_msg>opml: fix cat_filter type<commit_after><?php
class Opml extends Handler_Protected {

	function csrf_ignore($method) {
		$csrf_ignored = array("export", "import");

		return array_search($method, $csrf_ignored) !== false;
	}

	function export() {
		$output_name = $_REQUEST["filename"];
		if (!$output_name) $output_name = "TinyTinyRSS.opml";

		$show_settings = $_REQUEST["settings"];

		$owner_uid = $_SESSION["uid"];
		return $this->opml_export($output_name, $owner_uid, false, ($show_settings == 1));
	}

	function import() {
		$owner_uid = $_SESSION["uid"];

		header('Content-Type: text/html; charset=utf-8');

		print "<html>
			<head>
				<link rel=\"stylesheet\" href=\"utility.css\" type=\"text/css\">
				<title>".__("OPML Utility")."</title>
				<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
			</head>
			<body>
			<div class=\"floatingLogo\"><img src=\"images/logo_wide.png\"></div>
			<h1>".__('OPML Utility')."</h1>";

		add_feed_category($this->link, "Imported feeds");

		$this->opml_notice(__("Importing OPML..."));
		$this->opml_import($owner_uid);

		print "<br><form method=\"GET\" action=\"prefs.php\">
			<input type=\"submit\" value=\"".__("Return to preferences")."\">
			</form>";

		print "</body></html>";


	}

	// Export

	private function opml_export_category($owner_uid, $cat_id, $hide_private_feeds=false) {

		if ($cat_id) {
			$cat_qpart = "parent_cat = '$cat_id'";
			$feed_cat_qpart = "cat_id = '$cat_id'";
		} else {
			$cat_qpart = "parent_cat IS NULL";
			$feed_cat_qpart = "cat_id IS NULL";
		}

		if ($hide_private_feeds)
			$hide_qpart = "(private IS false AND auth_login = '' AND auth_pass = '')";
		else
			$hide_qpart = "true";

		$out = "";

		if ($cat_id) {
			$result = db_query($this->link, "SELECT title FROM ttrss_feed_categories WHERE id = '$cat_id'
				AND owner_uid = '$owner_uid'");
			$cat_title = db_fetch_result($result, 0, "title");
		}

		if ($cat_title) $out .= "<outline title=\"$cat_title\">\n";

		$result = db_query($this->link, "SELECT id,title
			FROM ttrss_feed_categories WHERE
			$cat_qpart AND owner_uid = '$owner_uid' ORDER BY order_id, title");

		while ($line = db_fetch_assoc($result)) {
			$title = htmlspecialchars($line["title"]);
			$out .= $this->opml_export_category($owner_uid, $line["id"], $hide_private_feeds);
		}

		$feeds_result = db_query($this->link, "select title, feed_url, site_url
				from ttrss_feeds where $feed_cat_qpart AND owner_uid = '$owner_uid' AND $hide_qpart
				order by order_id, title");

		while ($fline = db_fetch_assoc($feeds_result)) {
			$title = htmlspecialchars($fline["title"]);
			$url = htmlspecialchars($fline["feed_url"]);
			$site_url = htmlspecialchars($fline["site_url"]);

			if ($site_url) {
				$html_url_qpart = "htmlUrl=\"$site_url\"";
			} else {
				$html_url_qpart = "";
			}

			$out .= "<outline text=\"$title\" xmlUrl=\"$url\" $html_url_qpart/>\n";
		}

		if ($cat_title) $out .= "</outline>\n";

		return $out;
	}

	function opml_export($name, $owner_uid, $hide_private_feeds=false, $include_settings=true) {
		if (!$owner_uid) return;

		if (!isset($_REQUEST["debug"])) {
			header("Content-type: application/xml+opml");
			header("Content-Disposition: attachment; filename=" . $name );
		} else {
			header("Content-type: text/xml");
		}

		$out = "<?xml version=\"1.0\" encoding=\"utf-8\"?".">";

		$out .= "<opml version=\"1.0\">";
		$out .= "<head>
			<dateCreated>" . date("r", time()) . "</dateCreated>
			<title>Tiny Tiny RSS Feed Export</title>
		</head>";
		$out .= "<body>";

		$out .= $this->opml_export_category($owner_uid, false, $hide_private_feeds);

		# export tt-rss settings

		if ($include_settings) {
			$out .= "<outline title=\"tt-rss-prefs\" schema-version=\"".SCHEMA_VERSION."\">";

			$result = db_query($this->link, "SELECT pref_name, value FROM ttrss_user_prefs WHERE
			   profile IS NULL AND owner_uid = " . $_SESSION["uid"] . " ORDER BY pref_name");

			while ($line = db_fetch_assoc($result)) {
				$name = $line["pref_name"];
				$value = htmlspecialchars($line["value"]);

				$out .= "<outline pref-name=\"$name\" value=\"$value\"/>";
			}

			$out .= "</outline>";

			$out .= "<outline title=\"tt-rss-labels\" schema-version=\"".SCHEMA_VERSION."\">";

			$result = db_query($this->link, "SELECT * FROM ttrss_labels2 WHERE
				owner_uid = " . $_SESSION['uid']);

			while ($line = db_fetch_assoc($result)) {
				$name = htmlspecialchars($line['caption']);
				$fg_color = htmlspecialchars($line['fg_color']);
				$bg_color = htmlspecialchars($line['bg_color']);

				$out .= "<outline label-name=\"$name\" label-fg-color=\"$fg_color\" label-bg-color=\"$bg_color\"/>";

			}

			$out .= "</outline>";

			$out .= "<outline title=\"tt-rss-filters\" schema-version=\"".SCHEMA_VERSION."\">";

			$result = db_query($this->link, "SELECT * FROM ttrss_filters2
				WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY id");

			while ($line = db_fetch_assoc($result)) {
				foreach (array('enabled', 'match_any_rule') as $b) {
					$line[$b] = sql_bool_to_bool($line[$b]);
				}

				$line["rules"] = array();
				$line["actions"] = array();

				$tmp_result = db_query($this->link, "SELECT * FROM ttrss_filters2_rules
					WHERE filter_id = ".$line["id"]);

				while ($tmp_line = db_fetch_assoc($tmp_result)) {
					unset($tmp_line["id"]);
					unset($tmp_line["filter_id"]);

					$cat_filter = sql_bool_to_bool($tmp_line["cat_filter"]);

					if ($cat_filter && $tmp_line["cat_id"] || $tmp_line["feed_id"]) {
						$tmp_line["feed"] = getFeedTitle($this->link,
							$cat_filter ? $tmp_line["cat_id"] : $tmp_line["feed_id"],
							$cat_filter);
					} else {
						$tmp_line["feed"] = "";
					}

					$tmp_line["cat_filter"] = sql_bool_to_bool($tmp_line["cat_filter"]);

					unset($tmp_line["feed_id"]);
					unset($tmp_line["cat_id"]);

					array_push($line["rules"], $tmp_line);
				}

				$tmp_result = db_query($this->link, "SELECT * FROM ttrss_filters2_actions
					WHERE filter_id = ".$line["id"]);

				while ($tmp_line = db_fetch_assoc($tmp_result)) {
					unset($tmp_line["id"]);
					unset($tmp_line["filter_id"]);

					array_push($line["actions"], $tmp_line);
				}

				unset($line["id"]);
				unset($line["owner_uid"]);
				$filter = json_encode($line);

				$out .= "<outline filter-type=\"2\">$filter</outline>";

			}


{'fraction_non_alphanumeric': 0.2073490813648294, 'fraction_numerical': 0.00254513640340412, 'mean_word_length': 3.9916633584755856, 'pattern_counts': {'":': 0, '<': 85, '<?xml version=': 2, '>': 113, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 8}, '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': '3168336', 'n_tokens_mistral': 5294, 'n_tokens_neox': 4527, 'n_words': 803}