summaryrefslogtreecommitdiffstats
path: root/lib/foldermapper.php
blob: 925726ab826ab0aca9bae7b3d36459b10b699f1a (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
129
130
131
<?php
/**
* ownCloud - News app
*
* @author Alessandro Cosentino
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
* 
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file
* 
*/

/**
 * This class maps a feed to an entry in the feeds table of the database.
 */
class OC_News_FolderMapper {

	const tableName = '*PREFIX*news_folders';
	
	private $userid;

	public function __construct($userid){
		$this->userid = $userid;
	}
	
	public function root(){
		$root = new OC_News_Folder('All feeds');
		$stmt = OCP\DB::prepare('SELECT * 
					FROM ' . self::tableName . 
					' WHERE user_id = ? AND parent_id = ?');
		$result = $stmt->execute(array($this->userid, 0));
		
		while( $row = $result->fetchRow()){
			$child = new OC_News_Folder($row['name'], $row['id']);
			$root->addChild($child);
		}

		return $root;
	}
	
	/**
	 * @brief Retrieve a folder from the database
	 * @param id The id of the folder in the database table.
	 * @returns  an instance of OC_News_Folder
	 */
	public function find($id){
		$stmt = OCP\DB::prepare('SELECT * 
					FROM ' . self::tableName . 
					' WHERE user_id = ? AND id = ?');
		$result = $stmt->execute(array($this->userid, 0));
		
		while( $row = $result->fetchRow()){
			$child = new OC_News_Folder($row['name'], $row['id']);
			$root->addChild($child);
		}

		return $root;
	}

	/**
	 * @brief Retrieve a feed and all its items from the database
	 * @param id The id of the feed in the database table.
	 * @returns 
	 */
	public function findWithItems($id){
		$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
		$result = $stmt->execute(array($id));
		$row = $result->fetchRow();
		$url = $row['url'];
		$title = $row['title'];
		$feed = new OC_News_Feed($url, $title, null,$id);

		$itemMapper = new OC_News_ItemMapper($feed);
		$items = $itemMapper->findAll();
		$feed->setItems($items);
		
		return $feed;
	}

	/**
	 * @brief Store the folder and all its feeds into the database
	 * @param folder the folder to be saved
	 * @returns The id of the folder in the database table.
	 */
	public function save(OC_News_Folder $folder){
		$query = OCP\DB::prepare('
			INSERT INTO ' . self::tableName .
			'(name, parent_id, user_id)
			VALUES (?, ?, ?)
			');
		
		$name = $folder->getName();

		if(empty($name)) {
			$l = OC_L10N::get('news');
			$name = $l->t('no name');
		}

		$parentid = $folder->getParentId();

		$params=array(
		htmlspecialchars_decode($name),
		$parentid,
		$this->userid
		);
		$query->execute($params);
		$folderid = OCP\DB::insertid(self::tableName);

		$folder->setId($folderid);

	}
	
	//TODO: replace it with a DELETE INNER JOIN operation
	public function delete(OC_News_Folder $folder){
		$id = $folder->getId();
	
		$stmt = OCP\DB::prepare("
			DELETE FROM " . self::tableName . 
			"WHERE id = $id
			");

		$result = $stmt->execute();
		
		$feedMapper = new OC_News_FeedMapper();
		//TODO: handle the value that the execute returns
		$feedMapper->deleteAll($id);
		
		return true;
	}
	
}