summaryrefslogtreecommitdiffstats
path: root/db/foldermapper.php
blob: bce599b45dab0cc2de7ac661738e274bda51c663 (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
<?php
/**
 * ownCloud - News
 *
 * This file is licensed under the Affero General Public License version 3 or
 * later. See the COPYING file.
 *
 * @author Alessandro Cosentino <cosenal@gmail.com>
 * @author Bernhard Posselt <dev@bernhard-posselt.com>
 * @copyright Alessandro Cosentino 2012
 * @copyright Bernhard Posselt 2012, 2014
 */

namespace OCA\News\Db;

use \OCP\IDb;
use \OCP\AppFramework\Db\Entity;

class FolderMapper extends NewsMapper {

    public function __construct(IDb $db) {
        parent::__construct($db, 'news_folders', '\OCA\News\Db\Folder');
    }

    public function find($id, $userId){
        $sql = 'SELECT * FROM `*PREFIX*news_folders` ' .
            'WHERE `id` = ? ' .
            'AND `user_id` = ?';

        return $this->findEntity($sql, [$id, $userId]);
    }


    public function findAllFromUser($userId){
        $sql = 'SELECT * FROM `*PREFIX*news_folders` ' .
            'WHERE `user_id` = ? ' .
            'AND `deleted_at` = 0';
        $params = [$userId];

        return $this->findEntities($sql, $params);
    }


    public function findByName($folderName, $userId){
        $sql = 'SELECT * FROM `*PREFIX*news_folders` ' .
            'WHERE `name` = ? ' .
            'AND `user_id` = ?';
        $params = [$folderName, $userId];

        return $this->findEntities($sql, $params);
    }


    public function delete(Entity $entity){
        parent::delete($entity);

        // someone please slap me for doing this manually :P
        // we needz CASCADE + FKs please
        $sql = 'DELETE FROM `*PREFIX*news_feeds` WHERE `folder_id` = ?';
        $params = [$entity->getId()];
        $this->execute($sql, $params);

        $sql = 'DELETE FROM `*PREFIX*news_items` WHERE `feed_id` NOT IN '.
            '(SELECT `feeds`.`id` FROM `*PREFIX*news_feeds` `feeds`)';

        $this->execute($sql);
    }


    /**
     * @param int $deleteOlderThan if given gets all entries with a delete date
     * older than that timestamp
     * @param string $userId if given returns only entries from the given user
     * @return array with the database rows
     */
    public function getToDelete($deleteOlderThan=null, $userId=null) {
        $sql = 'SELECT * FROM `*PREFIX*news_folders` ' .
            'WHERE `deleted_at` > 0 ';
        $params = [];

        // sometimes we want to delete all entries
        if ($deleteOlderThan !== null) {
            $sql .= 'AND `deleted_at` < ? ';
            $params[] = $deleteOlderThan;
        }

        // we need to sometimes only delete feeds of a user
        if($userId !== null) {
            $sql .= 'AND `user_id` = ?';
            $params[] = $userId;
        }

        return $this->findEntities($sql, $params);
    }


    /**
     * Deletes all folders of a user
     * @param string $userId the name of the user
     */
    public function deleteUser($userId) {
        $sql = 'DELETE FROM `*PREFIX*news_folders` WHERE `user_id` = ?';
        $this->execute($sql, [$userId]);
    }


}
om updater such as the Python updater included in the app" : "Desactive isto se vostede executa un actualizador automático tal como o Python updater incluído na aplicación", "Purge interval" : "Intervalo de depuración", "Minimum amount of seconds after deleted feeds and folders are removed from the database; values below 60 seconds are ignored" : "Cantidade mínima de segundos após eliminar as fontes e cartafoles da base de datos; os valores menores de 60 segundos son ignorados", "Maximum read count per feed" : "Conta máxima de lidos por fonte", "Defines the maximum amount of articles that can be read per feed which won't be deleted by the cleanup job; if old articles reappear after being read, increase this value; negative values such as -1 will turn this feature off" : "Define o número máximo de artigos que pode ler por fonte os cales non serán eliminados polo traballo de limpeza; se os artigos antigos reaparecen após lidos, incremente este valor; os valores negativos como -1 desactivan esta función", "Maximum redirects" : "Redireccionamentos máximos", "How many redirects the feed fetcher should follow" : "Cantos redirecionamentos debe seguir o buscador de fontes", "Maximum feed page size" : "Tamaño máximo da páxina da fonte", "Maximum feed size in bytes. If the RSS/Atom page is bigger than this value, the update will be aborted" : "Tamaño máximo da fonte en bytes. Se a páxina RSS/Atom é maior que este valor, a actualización cancelarase", "Feed fetcher timeout" : "Caducidade do buscador", "Maximum number of seconds to wait for an RSS or Atom feed to load; if it takes longer the update will be aborted" : "Número máximo de segundos agardando por unha fonte RSS ou Atom para cargar; se lle leva máis tempo a actualización será cancelada", "Explore Service URL" : "Examinar o URL de servizo", "If given, this service's URL will be queried for displaying the feeds in the explore feed section. To fall back to the built in explore service, leave this input empty" : "Se é fornecido, este URL de servizo requirirase para amosar as fontes na sección de exame da fonte. Para amparar co servizo de exame propio, deixe baldeira esta entrada", "For more information check the wiki" : "Para obter máis información consulte a wiki", "Saved" : "Gardado", "Download" : "Descargar", "Close" : "Pechar", "filter" : "filtro", "Language" : "Idioma", "Subscribe" : "Subscribirse", "Got more awesome feeds? Share them with us!" : "Ten máis fontes moi interesantes? Compártaas connosco!", "No articles available" : "Non hai artigos dispoñíbeis", "No unread articles available" : "Non hai artigos sen ler dispoñíbeis", "Open website" : "Abrir sitio web", "Star article" : "Marcar artigo", "Unstar article" : "Desmarcar artigo", "Keep article unread" : "Manter o artigo como non lido", "Remove keep article unread" : "Retirar a marca de artigo sen ler", "by" : "por", "from" : "desde", "Play audio" : "Reproducir son", "Download video" : "Descargar video", "Download audio" : "Descargar son", "Keyboard shortcut" : "Atallo de teclado", "Description" : "Descrición", "right" : "dereita", "Jump to next article" : "Ir ao seguinte artigo", "left" : "esquerda", "Jump to previous article" : "Saltar ao artigo anterior", "Toggle star article" : "Amosar os artigos con estrela", "Star article and jump to next one" : "Destacar o artigo e ir ao seguinte", "Toggle keep current article unread" : "Manter o artigo actual como non lido", "Open article in new tab" : "Abrir o artigo nunha nova lapela", "Toggle expand article in compact view" : "Expandir o artigo en vista compacta", "Refresh" : "Actualizar", "Load next feed" : "Cargar a seguinte fonte", "Load previous feed" : "Cargar a fonte anterior", "Load next folder" : "Cargar o seguinte cartafol", "Load previous folder" : "Cargar o cartafol anterior", "Scroll to active navigation entry" : "Desprazar ata a entrada de navegación activa", "Focus search field" : "Campo de busca en foco", "Mark current article's feed/folder read" : "Marcar o actual artigo de fonte/cartafol como lido", "How to set up the operating system cron" : "Cómo configurar o cron do sistema operativo", "Install and set up a faster parallel updater that uses the News app's update API" : "Instala e configura un actualizador paralelo máis rápido que utiliza a API de actualización da aplicación News", "Non UTF-8 charset for MySQL/MariaDB database detected!" : "Detectouse un conxunto de caracteres non UTF-8 para a base de datos MySql/MariaDB!", "Learn how to convert your database to utf8mb4 (make a backup beforehand)" : "Descubra como converter a súa base de datos a utf8mb4 (faga previamente unha copia de seguridade)", "Web address" : "Enderezo web", "Feed exists already!" : "Esta fonte de novas xa existe!", "Folder" : "Cartafol", "No folder" : "Sen cartafol", "New folder" : "Novo cartafol", "Folder name" : "Nome do cartafol", "Go back" : "Volver", "Folder exists already!" : "Xa existe o cartafol!", "Advanced settings" : "Axustes avanzados", "Credentials" : "Credenciais", "HTTP Basic Auth credentials must be stored unencrypted! Everyone with access to the server or database will be able to access them!" : "As credenciais para HTTP Basic Auth deben estar gardadas sen cifrar! Calquera persoa con acceso ao servidor poderá acceder a elas!", "Username" : "Nome de usuario", "Password" : "Contrasinal", "New Folder" : "Novo cartafol", "Create" : "Crear", "Explore" : "Examinar", "Update failed more than 50 times" : "A actualización fallou máis de 50 veces.", "Deleted feed" : "Fonte eliminada", "Undo delete feed" : "Desfacer a eliminación da fonte", "Rename" : "Renomear", "Menu" : "Menú", "Mark read" : "Marcar como lido", "Unpin from top" : "Soltar de enriba", "Pin to top" : "Fixar enriba", "Newest first" : "Primeiro o máis recente", "Oldest first" : "Primeiro o máis antigo", "Default order" : "Orde predeterminado", "Enable full text" : "Activar o texto completo", "Disable full text" : "Desactivar o texto completo", "Unread updated" : "Actualización non lida", "Ignore updated" : "Ignorar actualizados", "Delete" : "Eliminar", "Dismiss" : "Desbotar", "Collapse" : "Contraer", "Deleted folder" : "Eliminar cartafol", "Undo delete folder" : "Desfacer a eliminación do cartafol", "Starred" : "Destacado", "Unread articles" : "Artigos sen ler", "All articles" : "Todos os artigos", "Settings" : "Axustes", "Disable mark read through scrolling" : "Desactivar o marcado como lido co desprazamento", "Compact view" : "Vista compacta", "Expand articles on key navigation" : "Expandir artigos na tecla de navegación", "Show all articles" : "Amosar todos os artigos", "Reverse ordering (oldest on top)" : "Ordenado inverso (máis vellos enriba)", "Subscriptions (OPML)" : "Subscricións (OPML)", "Import" : "Importar", "Export" : "Exportar", "Error when importing: File does not contain valid OPML" : "Erro durante a importación: O ficheiro non conten OPML correcto", "Error when importing: OPML is does neither contain feeds nor folders" : "Produciuse un erro ao importar: OPML non contén fontes ou cartafoles", "Unread/Starred Articles" : "Artigos destacados ou sen ler", "Error when importing: file does not contain valid JSON" : "Produciuse un erro ao importar: o ficheiro non contén un JSON correcto", "Help" : "Axuda", "Keyboard shortcuts" : "Atallos de teclado", "Documentation" : "Documentación", "Report a bug" : "Informar dunha falla" }, "nplurals=2; plural=(n != 1);");