summaryrefslogtreecommitdiff
path: root/opml.php
blob: c178211309b5c8c60bfffde9cc4f1c6bc91f88b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?
	// FIXME there are some brackets issues here

	$op = $_REQUEST["op"];
	if ($op == "Export") {
		header("Content-type: application/xml");
		print "<?xml version=\"1.0\"?>";
	}

	require_once "config.php";
	require_once "functions.php";

	$link = pg_connect(DB_CONN);

	pg_query($link, "set client_encoding = 'utf-8'");

	if ($op == "Export") {
		print "<opml version=\"1.0\">";
		print "<head><dateCreated>" . date("r", time()) . "</dateCreated></head>"; 
		print "<body>";

		$result = pg_query("SELECT * FROM ttrss_feeds ORDER BY title");

		while ($line = pg_fetch_assoc($result)) {
			$title = $line["title"];
			$url = $line["feed_url"];

			print "<outline text=\"$title\" xmlUrl=\"$url\"/>";
		}

		print "</body></opml>";
	}

	function startElement($parser, $name, $attrs) {
		if ($name == "OUTLINE") {
			$title = pg_escape_string($attrs['TEXT']);
			$url = pg_escape_string($attrs['XMLURL']);

			print "Feed <b>$title</b> ($url)... ";

			$result = pg_query("SELECT id FROM ttrss_feeds WHERE
				title = '$title' OR feed_url = '$url'");

			if (pg_num_rows($result) > 0) {
				
				print " Already imported.<br>";

			} else {

				$result = pg_query("INSERT INTO ttrss_feeds (title, feed_url) VALUES
					('$title', '$url')");

				print "<b>Done.</b><br>";

			}

		}
	}

	function endElement($parser, $name) {


	}

	if ($op == "Import") {

		print "<html>
			<head>
				<link rel=\"stylesheet\" href=\"opml.css\" type=\"text/css\">
			</head>
			<body><h1>Importing OPML...</h1>
			<div>";

		if (WEB_DEMO_MODE) {
			print "OPML import is disabled in demo-mode.";
			print "<p><a class=\"button\" href=\"prefs.php\">
			Return to preferences</a></div></body></html>";

			return;
		}

		if (is_file($_FILES['opml_file']['tmp_name'])) {
		 
			$xml_parser = xml_parser_create();

			xml_set_element_handler($xml_parser, "startElement", "endElement");

			$fp = fopen($_FILES['opml_file']['tmp_name'], "r");

			if ($fp) {

				while ($data = fread($fp, 4096)) {

					if (!xml_parse($xml_parser, $data, feof($fp))) {
						
						print sprintf("Unable to parse OPML file, XML error: %s at line %d",
							xml_error_string(xml_get_error_code($xml_parser)),
							xml_get_current_line_number($xml_parser));

						print "<p><a class=\"button\" href=\"prefs.php\">
							Return to preferences</a>";

						return;

					}
				}

				xml_parser_free($xml_parser);
				fclose($fp);

			} else {
				print("Error: Could not open OPML input.");
			}

		} else {	
			print "Error: please upload OPML file.";
		}

		print "<p><a class=\"button\" href=\"prefs.php\">
			Return to preferences</a>";

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

	}

	pg_close($link);

?>