*
*/
+//no apps or filesystem
+$RUNTIME_NOSETUPFS=true;
+
+
+
// Check if we are a user
OCP\JSON::checkLoggedIn();
- OCP\JSON::checkAppEnabled('bookmarks');
OCP\JSON::callCheck();
- require_once(OC::$APPSROOT . '/apps/bookmarks/bookmarksHelper.php');
+ OCP\JSON::checkAppEnabled('bookmarks');
+
+ require_once(OC_App::getAppPath('bookmarks').'/bookmarksHelper.php');
$id = addBookmark($_POST['url'], $_POST['title'], $_POST['tags']);
- OCP\JSON::success(array('data' => $id));
+ OCP\JSON::success(array('data' => $id));
*
*/
- //no apps or filesystem
- $RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
+ OCP\JSON::callCheck();
+
OCP\JSON::checkAppEnabled('bookmarks');
+OCP\JSON::callCheck();
$id = $_POST['id'];
if (!OC_Bookmarks_Bookmarks::deleteUrl($id)){
$result = $query->execute();
return true;
}
-}
+}
- ?>
case 'list':
break;
default:
-- OCP\JSON::error(array('message'=>'unexspected parameter: ' . $view));
++ OCP\JSON::error(array('message'=>'unexpected parameter: ' . $view));
exit;
}
OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'currentview', $view);
"Interval" => "Interval",
"End" => "Afslutning",
"occurrences" => "forekomster",
- "Import a calendar file" => "Importer en kalenderfil",
- "Please choose the calendar" => "Vælg venligst kalender",
"create a new calendar" => "opret en ny kalender",
+ "Import a calendar file" => "Importer en kalenderfil",
+ "Please choose a calendar" => "Vælg en kalender",
"Name of new calendar" => "Navn på ny kalender",
+ "A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med dette navn findes allerede. Hvis du fortsætter alligevel, vil disse kalendere blive sammenlagt.",
"Import" => "Importer",
+"Importing calendar" => "Importerer kalender",
+"Calendar imported successfully" => "Kalender importeret korrekt",
"Close Dialog" => "Luk dialog",
"Create a new event" => "Opret en ny begivenhed",
"View an event" => "Vis en begivenhed",
"Interval" => "Intervall",
"End" => "Ende",
"occurrences" => "Termine",
- "Import a calendar file" => "Kalenderdatei Importieren",
- "Please choose the calendar" => "Bitte wählen Sie den Kalender.",
"create a new calendar" => "Neuen Kalender anlegen",
+ "Import a calendar file" => "Kalenderdatei importieren",
+ "Please choose a calendar" => "Wählen Sie bitte einen Kalender.",
"Name of new calendar" => "Kalendername",
+ "Take an available name!" => "Wählen Sie einen verfügbaren Namen.",
+ "A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ein Kalender mit diesem Namen existiert bereits. Sollten Sie fortfahren, werden die beiden Kalender zusammengeführt.",
"Import" => "Importieren",
+"Importing calendar" => "Kalender wird importiert.",
+"Calendar imported successfully" => "Kalender erfolgreich importiert",
"Close Dialog" => "Dialog schließen",
"Create a new event" => "Neues Ereignis",
"View an event" => "Termin öffnen",
"No categories selected" => "Keine Kategorie ausgewählt",
+"Select category" => "Kategorie auswählen",
"of" => "von",
"at" => "um",
+ "General" => "Allgemein",
"Timezone" => "Zeitzone",
- "Check always for changes of the timezone" => "immer die Zeitzone überprüfen",
- "Timeformat" => "Zeitformat",
- "24h" => "24h",
- "12h" => "12h",
- "First day of the week" => "erster Wochentag",
- "Calendar CalDAV syncing address:" => "Kalender CalDAV Synchronisationsadresse:",
- "Users" => "Nutzer",
- "select users" => "Nutzer auswählen",
+ "Update timezone automatically" => "Zeitzone automatisch aktualisieren",
+ "Time format" => "Zeitformat",
+ "24h" => "24 Stunden",
+ "12h" => "12 Stunden",
+ "Start week on" => "Erster Wochentag",
+ "Cache" => "Zwischenspeicher",
+ "Clear cache for repeating events" => "Lösche den Zwischenspeicher für wiederholende Veranstaltungen",
+ "URLs" => "URLs",
+ "Calendar CalDAV syncing addresses" => "CalDAV-Kalender gleicht Adressen ab",
+ "more info" => "weitere Informationen",
+ "Primary address (Kontact et al)" => "Primäre Adresse (Kontakt u.a.)",
+ "iOS/OS X" => "iOS/OS X",
+ "Read only iCalendar link(s)" => "Nur lesende(r) iCalender-Link(s)",
+ "Users" => "Benutzer",
+ "select users" => "Benutzer auswählen",
"Editable" => "editierbar",
"Groups" => "Gruppen",
"select groups" => "Gruppen auswählen",
"Interval" => "Intervalo",
"End" => "Fin",
"occurrences" => "acontecementos",
+ "create a new calendar" => "crear un novo calendario",
"Import a calendar file" => "Importar un ficheiro de calendario",
+"Please choose the calendar" => "Por favor, seleccione o calendario",
+"create a new calendar" => "crear un novo calendario",
"Name of new calendar" => "Nome do novo calendario",
"Import" => "Importar",
+"Importing calendar" => "Importar calendario",
+"Calendar imported successfully" => "Calendario importado correctamente",
"Close Dialog" => "Pechar diálogo",
"Create a new event" => "Crear un novo evento",
"View an event" => "Ver un evento",
"of" => "de",
"at" => "a",
"Timezone" => "Fuso horario",
+"Check always for changes of the timezone" => "Comprobar sempre cambios de fuso horario",
+"Timeformat" => "Formato de hora",
"24h" => "24h",
"12h" => "12h",
- "First day of the week" => "Primeiro día da semana",
- "Calendar CalDAV syncing address:" => "Enderezo de sincronización do calendario CalDAV:",
"Users" => "Usuarios",
"select users" => "escoller usuarios",
"Editable" => "Editable",
"of" => "od",
"at" => "na",
"Timezone" => "Vremenska zona",
- "Check always for changes of the timezone" => "Provjerite uvijek za promjene vremenske zone",
+"Timeformat" => "Format vremena",
"24h" => "24h",
"12h" => "12h",
- "First day of the week" => "Prvi dan tjedna",
- "Calendar CalDAV syncing address:" => "Adresa za CalDAV sinkronizaciju kalendara:",
"Users" => "Korisnici",
"select users" => "odaberi korisnike",
"Editable" => "Može se uređivati",
"by day and month" => "月と日で指定",
"Date" => "日付",
"Cal." => "カレンダー",
+ "Sun." => "日",
+ "Mon." => "月",
+ "Tue." => "火",
+ "Wed." => "水",
+ "Thu." => "木",
+ "Fri." => "金",
+ "Sat." => "土",
+ "Jan." => "1月",
+ "Feb." => "2月",
+ "Mar." => "3月",
+ "Apr." => "4月",
+ "May." => "5月",
+ "Jun." => "6月",
+ "Jul." => "7月",
+ "Aug." => "8月",
+ "Sep." => "9月",
+ "Oct." => "10月",
+ "Nov." => "11月",
+ "Dec." => "12月",
"All day" => "終日",
- "New Calendar" => "新しくカレンダーを作成",
++"New Calendar" => "新しくカレンダーを作成する",
"Missing fields" => "項目がありません",
"Title" => "タイトル",
"From Date" => "開始日",
"Select weeks" => "Pasirinkite savaites",
"Interval" => "Intervalas",
"End" => "Pabaiga",
+ "create a new calendar" => "sukurti naują kalendorių",
"Import a calendar file" => "Importuoti kalendoriaus failą",
+"Please choose the calendar" => "Pasirinkite kalendorių",
+"create a new calendar" => "sukurti naują kalendorių",
"Name of new calendar" => "Naujo kalendoriaus pavadinimas",
"Import" => "Importuoti",
+"Importing calendar" => "Importuojamas kalendorius",
+"Calendar imported successfully" => "Kalendorius sėkmingai importuotas",
"Close Dialog" => "Uždaryti",
"Create a new event" => "Sukurti naują įvykį",
"View an event" => "Peržiūrėti įvykį",
"No categories selected" => "Nepasirinktos jokios katagorijos",
- "Select category" => "Pasirinkite kategoriją",
"Timezone" => "Laiko juosta",
+"Check always for changes of the timezone" => "Visada tikrinti laiko zonos pasikeitimus",
+"Timeformat" => "Laiko formatas",
"24h" => "24val",
"12h" => "12val",
- "Calendar CalDAV syncing address:" => "CalDAV kalendoriaus synchronizavimo adresas:",
"Users" => "Vartotojai",
"select users" => "pasirinkti vartotojus",
"Editable" => "Redaguojamas",
"Interval" => "Intervall",
"End" => "Slutt",
"occurrences" => "forekomster",
+ "create a new calendar" => "Lag en ny kalender",
"Import a calendar file" => "Importer en kalenderfil",
+"Please choose the calendar" => "Vennligst velg kalenderen",
+"create a new calendar" => "Lag en ny kalender",
"Name of new calendar" => "Navn på ny kalender:",
"Import" => "Importer",
+"Importing calendar" => "Importerer kalender",
+"Calendar imported successfully" => "Kalenderen ble importert uten feil",
"Close Dialog" => "Lukk dialog",
"Create a new event" => "Opprett en ny hendelse",
"View an event" => "Se på hendelse",
"No categories selected" => "Ingen kategorier valgt",
+"Select category" => "Velg kategori",
"Timezone" => "Tidssone",
+"Check always for changes of the timezone" => "Se alltid etter endringer i tidssone",
+"Timeformat" => "Tidsformat:",
"24h" => "24 t",
"12h" => "12 t",
- "Calendar CalDAV syncing address:" => "Synkroniseringsadresse fo kalender CalDAV:",
+"First day of the week" => "Ukens første dag",
++"Calendar CalDAV syncing address:" => "Kalender CalDAV synkroniseringsadresse",
"Users" => "Brukere",
"select users" => "valgte brukere",
"Editable" => "Redigerbar",
"Interval" => "Interwał",
"End" => "Koniec",
"occurrences" => "wystąpienia",
- "Import a calendar file" => "Zaimportuj plik kalendarza",
- "Please choose the calendar" => "Proszę wybrać kalendarz",
"create a new calendar" => "stwórz nowy kalendarz",
+ "Import a calendar file" => "Zaimportuj plik kalendarza",
+ "Please choose a calendar" => "Proszę wybierz kalendarz",
"Name of new calendar" => "Nazwa kalendarza",
"Import" => "Import",
+"Importing calendar" => "Importuje kalendarz",
+"Calendar imported successfully" => "Zaimportowano kalendarz",
"Close Dialog" => "Zamknij okno",
"Create a new event" => "Tworzenie nowego wydarzenia",
"View an event" => "Zobacz wydarzenie",
"of" => "z",
"at" => "w",
"Timezone" => "Strefa czasowa",
+"Check always for changes of the timezone" => "Zawsze sprawdzaj zmiany strefy czasowej",
+"Timeformat" => "Format czasu",
"24h" => "24h",
"12h" => "12h",
- "First day of the week" => "Pierwszy dzień tygodnia",
- "Calendar CalDAV syncing address:" => "Adres synchronizacji kalendarza CalDAV:",
+ "more info" => "więcej informacji",
+ "iOS/OS X" => "iOS/OS X",
+ "Read only iCalendar link(s)" => "Odczytać tylko linki iCalendar",
"Users" => "Użytkownicy",
"select users" => "wybierz użytkowników",
"Editable" => "Edytowalne",
"Interval" => "Intervalo",
"End" => "Fim",
"occurrences" => "ocorrências",
- "Import a calendar file" => "Importar um ficheiro de calendário",
- "Please choose the calendar" => "Por favor escolhe o calendário",
"create a new calendar" => "criar novo calendário",
+ "Import a calendar file" => "Importar um ficheiro de calendário",
+ "Please choose a calendar" => "Escolha um calendário por favor",
"Name of new calendar" => "Nome do novo calendário",
+ "Take an available name!" => "Escolha um nome disponível!",
+ "A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Já existe um Calendário com esse nome. Se mesmo assim continuar, esses calendários serão fundidos.",
"Import" => "Importar",
+"Importing calendar" => "A importar calendário",
+"Calendar imported successfully" => "Calendário importado com sucesso",
"Close Dialog" => "Fechar diálogo",
"Create a new event" => "Criar novo evento",
"View an event" => "Ver um evento",
"Interval" => "Interval",
"End" => "Sfârșit",
"occurrences" => "repetiții",
+ "create a new calendar" => "crează un calendar nou",
"Import a calendar file" => "Importă un calendar",
+"Please choose the calendar" => "Alegeți calendarul",
+"create a new calendar" => "crează un calendar nou",
"Name of new calendar" => "Numele noului calendar",
"Import" => "Importă",
+"Importing calendar" => "Importă calendar",
+"Calendar imported successfully" => "Calendarul a fost importat cu succes",
"Close Dialog" => "Închide",
"Create a new event" => "Crează un eveniment nou",
"View an event" => "Vizualizează un eveniment",
"of" => "din",
"at" => "la",
"Timezone" => "Fus orar",
+"Check always for changes of the timezone" => "Verifică mereu pentru schimbări ale fusului orar",
+"Timeformat" => "Forma de afișare a orei",
"24h" => "24h",
"12h" => "12h",
- "First day of the week" => "Prima zi a săptămînii",
- "Calendar CalDAV syncing address:" => "Adresa pentru sincronizarea calendarului CalDAV",
"Users" => "Utilizatori",
"select users" => "utilizatori selectați",
"Editable" => "Editabil",
"Interval" => "Интервал",
"End" => "Окончание",
"occurrences" => "повторений",
- "Import a calendar file" => "Импортировать календарь из файла",
- "Please choose the calendar" => "Пожалуйста, выберите календарь",
"create a new calendar" => "Создать новый календарь",
+ "Import a calendar file" => "Импортировать календарь из файла",
+ "Please choose a calendar" => "Пожалуйста, выберите календарь",
"Name of new calendar" => "Название нового календаря",
+ "Take an available name!" => "Возьмите разрешенное имя!",
+ "A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Календарь с таким именем уже существует. Если вы продолжите, одноименный календарь будет удален.",
"Import" => "Импортировать",
+"Importing calendar" => "Импортируется календарь",
+"Calendar imported successfully" => "Календарь успешно импортирован",
"Close Dialog" => "Закрыть Сообщение",
"Create a new event" => "Создать новое событие",
"View an event" => "Показать событие",
"Interval" => "Hur ofta",
"End" => "Slut",
"occurrences" => "Händelser",
- "Import a calendar file" => "Importera en kalenderfil",
- "Please choose the calendar" => "Välj kalender",
"create a new calendar" => "skapa en ny kalender",
+ "Import a calendar file" => "Importera en kalenderfil",
+ "Please choose a calendar" => "Välj en kalender",
"Name of new calendar" => "Namn på ny kalender",
+ "Take an available name!" => "Ta ett ledigt namn!",
+ "A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med detta namn finns redan. Om du fortsätter ändå så kommer dessa kalendrar att slås samman.",
"Import" => "Importera",
+"Importing calendar" => "Importerar kalender",
+"Calendar imported successfully" => "Kalender importerades utan problem",
"Close Dialog" => "Stäng ",
"Create a new event" => "Skapa en ny händelse",
"View an event" => "Visa en händelse",
"of" => "av",
"at" => "på",
"Timezone" => "Tidszon",
+"Check always for changes of the timezone" => "Kontrollera alltid ändringar i tidszon.",
+"Timeformat" => "Tidsformat",
"24h" => "24h",
"12h" => "12h",
- "First day of the week" => "Första dagen av veckan",
- "Calendar CalDAV syncing address:" => "Synkroniseringsadress för CalDAV kalender:",
+ "Cache" => "Cache",
+ "Clear cache for repeating events" => "Töm cache för upprepade händelser",
+ "Calendar CalDAV syncing addresses" => "Kalender CalDAV synkroniserar adresser",
+ "more info" => "mer info",
+ "Primary address (Kontact et al)" => "Primary address (Kontact et al)",
+ "iOS/OS X" => "iOS/OS X",
+ "Read only iCalendar link(s)" => "Read only iCalendar link(s)",
"Users" => "Användare",
"select users" => "välj användare",
"Editable" => "Redigerbar",
"Interval" => "间隔",
"End" => "结束",
"occurrences" => "次",
+ "create a new calendar" => "创建新日历",
"Import a calendar file" => "导入日历文件",
+"Please choose the calendar" => "请选择日历",
+"create a new calendar" => "创建新日历",
"Name of new calendar" => "新日历名称",
"Import" => "导入",
+"Importing calendar" => "导入日历",
+"Calendar imported successfully" => "导入日历成功",
"Close Dialog" => "关闭对话框",
"Create a new event" => "创建新事件",
"View an event" => "查看事件",
"Interval" => "間隔",
"End" => "結束",
"occurrences" => "事件",
+ "create a new calendar" => "建立新日曆",
"Import a calendar file" => "匯入日曆檔案",
+"Please choose the calendar" => "請選擇日曆",
+"create a new calendar" => "建立新日曆",
"Name of new calendar" => "新日曆名稱",
"Import" => "匯入",
+"Importing calendar" => "匯入日曆",
+"Calendar imported successfully" => "已成功匯入日曆",
"Close Dialog" => "關閉對話",
"Create a new event" => "建立一個新事件",
"View an event" => "觀看一個活動",
"of" => "於",
"at" => "於",
"Timezone" => "時區",
+"Check always for changes of the timezone" => "總是檢查是否變更了時區",
+"Timeformat" => "日期格式",
"24h" => "24小時制",
"12h" => "12小時制",
- "First day of the week" => "每週的第一天",
+"Calendar CalDAV syncing address:" => "CalDAV 的日曆同步地址:",
"Users" => "使用者",
"select users" => "選擇使用者",
"Editable" => "可編輯",
/**
* @brief Returns the list of calendars for a specific user.
* @param string $uid User ID
- * @param boolean $active Only return calendars with this $active state, default(=null) is don't care
+ * @param boolean $active Only return calendars with this $active state, default(=false) is don't care
* @return array
*/
- public static function allCalendars($uid, $active=null){
+ public static function allCalendars($uid, $active=false){
$values = array($uid);
$active_where = '';
- if ($active){
- $active_where = ' AND active = ?';
+ if (!is_null($active) && $active){
+ $active_where = ' AND `active` = ?';
$values[] = $active;
}
- $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*calendar_calendars WHERE userid = ?' . $active_where );
+ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*calendar_calendars` WHERE `userid` = ?' . $active_where );
$result = $stmt->execute($values);
$calendars = array();
$uri = self::createURI($name, $uris );
- $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
+ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*calendar_calendars` (`userid`,`displayname`,`uri`,`ctag`,`calendarorder`,`calendarcolor`,`timezone`,`components`) VALUES(?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
- return OCP\DB::insertid('*PREFIX*calendar_calendars');
+ $insertid = OCP\DB::insertid('*PREFIX*calendar_calendars');
+ OCP\Util::emitHook('OC_Calendar', 'addCalendar', $insertid);
+
+ return $insertid;
}
/**
public static function addCalendarFromDAVData($principaluri,$uri,$name,$components,$timezone,$order,$color){
$userid = self::extractUserID($principaluri);
- $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*calendar_calendars (userid,displayname,uri,ctag,calendarorder,calendarcolor,timezone,components) VALUES(?,?,?,?,?,?,?,?)' );
+ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*calendar_calendars` (`userid`,`displayname`,`uri`,`ctag`,`calendarorder`,`calendarcolor`,`timezone`,`components`) VALUES(?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
- return OCP\DB::insertid('*PREFIX*calendar_calendars');
+ $insertid = OCP\DB::insertid('*PREFIX*calendar_calendars');
+ OCP\Util::emitHook('OC_Calendar', 'addCalendar', $insertid);
+
+ return $insertid;
}
/**
if(is_null($order)) $order = $calendar['calendarorder'];
if(is_null($color)) $color = $calendar['calendarcolor'];
- $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*calendar_calendars SET displayname=?,calendarorder=?,calendarcolor=?,timezone=?,components=?,ctag=ctag+1 WHERE id=?' );
+ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*calendar_calendars` SET `displayname`=?,`calendarorder`=?,`calendarcolor`=?,`timezone`=?,`components`=?,`ctag`=`ctag`+1 WHERE `id`=?' );
$result = $stmt->execute(array($name,$order,$color,$timezone,$components,$id));
+ OCP\Util::emitHook('OC_Calendar', 'editCalendar', $id);
return true;
}
* @return boolean
*/
public static function deleteCalendar($id){
- $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*calendar_calendars WHERE id = ?' );
+ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_calendars` WHERE `id` = ?' );
$stmt->execute(array($id));
- $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*calendar_objects WHERE calendarid = ?' );
+ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `calendarid` = ?' );
$stmt->execute(array($id));
+ OCP\Util::emitHook('OC_Calendar', 'deleteCalendar', $id);
+ if(count(self::allCalendars(OCP\USER::getUser())) == 0) {
+ self::addCalendar(OCP\USER::getUser(),'Default calendar');
+ }
+
return true;
}
-
+
+ /**
+ * @brief merges two calendars
+ * @param integer $id1
+ * @param integer $id2
+ * @return boolean
+ */
+ public static function mergeCalendar($id1, $id2){
- $stmt = OCP\DB::prepare('UPDATE *PREFIX*calendar_objects SET calendarid = ? WHERE calendarid = ?');
++ $stmt = OCP\DB::prepare('UPDATE `*PREFIX*calendar_objects` SET `calendarid` = ? WHERE `calendarid` = ?');
+ $stmt->execute(array($id1, $id2));
+ self::touchCalendar($id1);
+ self::deleteCalendar($id2);
+ }
+
/**
* @brief Creates a URI for Calendar
* @param string $name name of the calendar
*/
public static function delete($id){
$oldobject = self::find($id);
- $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*calendar_objects WHERE id = ?' );
+ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `id` = ?' );
$stmt->execute(array($id));
OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']);
+ OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $id);
return true;
}
* @return boolean
*/
public static function deleteFromDAVData($cid,$uri){
- $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*calendar_objects WHERE calendarid = ? AND uri=?' );
+ $oldobject = self::findWhereDAVDataIs($cid, $uri);
+ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `calendarid`= ? AND `uri`=?' );
$stmt->execute(array($cid,$uri));
OC_Calendar_Calendar::touchCalendar($cid);
+ OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $oldobject['id']);
return true;
}
class OC_Calendar_Share{
const CALENDAR = 'calendar';
const EVENT = 'event';
- /*
+ /**
* @brief: returns informations about all calendar or events which users are sharing with the user - userid
- * @param: (string) $userid - id of the user
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return: (array) $return - information about calendars
+ * @param: string $userid - id of the user
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return: array $return - information about calendars
*/
public static function allSharedwithuser($userid, $type, $active=null, $permission=null){
- $group_where = self::group_sql(OC_Group::getUserGroups($userid));
- $permission_where = self::permission_sql($permission);
- if($type == self::CALENDAR){
- $active_where = self::active_sql($active);
- }else{
- $active_where = '';
- }
- $stmt = OCP\DB::prepare("SELECT * FROM `*PREFIX*calendar_share_" . $type . "` WHERE ((`share` = ? AND `sharetype` = 'user') " . $group_where . ") AND `owner` <> ? " . $permission_where . " " . $active_where);
- $result = $stmt->execute(array($userid, $userid));
- $return = array();
- while( $row = $result->fetchRow()){
- $return[] = $row;
+ $format = OC_Share_Backend_Calendar::FORMAT_CALENDAR;
+ if ($type == self::EVENT) {
+ $format = OC_Share_Backend_Event::FORMAT_EVENT;
}
+ $return = OCP\Share::getItemsSharedWith($type,
+ $format,
+ array(
+ 'active' => $active,
+ 'permissions' => $permission,
+ ));
return $return;
}
- /*
+ /**
* @brief: returns all users a calendar / event is shared with
- * @param: (int) id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return: (array) $users - information about users a calendar / event is shared with
+ * @param: integer id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return: array $users - information about users a calendar / event is shared with
*/
public static function allUsersSharedwith($id, $type){
- $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE ' . $type . 'id = ? ORDER BY share');
+ $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE `' . $type . 'id` = ? ORDER BY `share`');
$result = $stmt->execute(array($id));
$users = array();
while( $row = $result->fetchRow()){
return true;
}
}
- /*
+ /**
* @brief: stops sharing a calendar / event
- * @param: (string) $owner - userid of the owner
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $sharetype - type of sharing (can be: user/group/public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $owner - userid of the owner
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $sharetype - type of sharing (can be: user/group/public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function unshare($owner, $share, $sharetype, $id, $type){
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_share_' . $type . ' WHERE owner = ? ' . (($sharetype != 'public')?'AND share = ?':'') . ' AND sharetype = ? AND ' . $type . 'id = ?');
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_' . $type . '` WHERE `owner` = ? ' . (($sharetype != 'public')?'AND `share` = ?':'') . ' AND `sharetype` = ? AND `' . $type . 'id` = ?');
if($sharetype != 'public'){
$stmt->execute(array($owner,$share,$sharetype,$id));
}else{
$token = md5($string);
return substr($token, rand(0,16), 15);
}
- /*
+ /**
* @brief: checks if it is already shared
- * @param: (string) $owner - userid of the owner
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $sharetype - type of sharing (can be: user/group/public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $owner - userid of the owner
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $sharetype - type of sharing (can be: user/group/public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function is_already_shared($owner, $share, $sharetype, $id, $type){
- $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*calendar_share_' . $type . ' WHERE owner = ? AND share = ? AND sharetype = ? AND ' . $type . 'id = ?');
+ $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE `owner` = ? AND `share` = ? AND `sharetype` = ? AND `' . $type . 'id` = ?');
$result = $stmt->execute(array($owner, $share, $sharetype, $id));
if($result->numRows() > 0){
return true;
*/
public static function check_access($share, $id, $type){
$group_where = self::group_sql(OC_Group::getUserGroups($share));
- $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share`_' . $type . '` WHERE (`' . $type . 'id` = ? AND (`share` = ? AND `sharetype` = \'user\') ' . $group_where . ')');
- $stmt = OCP\DB::prepare("SELECT * FROM *PREFIX*calendar_share_" . $type . " WHERE (" . $type . "id = ? AND (share = ? AND sharetype = 'user') " . $group_where . ")");
++ $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE (`' . $type . 'id` = ? AND (`share` = ? AND `sharetype` = \'user\') ' . $group_where . ')');
$result = $stmt->execute(array($id,$share));
$rows = $result->numRows();
if($rows > 0){
return $return;
}
- /*
+ /**
* @brief sets the active status of the calendar
- * @param (string) $
+ * @param string
*/
public static function set_active($share, $id, $active){
- $stmt = OCP\DB::prepare("UPDATE *PREFIX*calendar_share_calendar SET active = ? WHERE share = ? AND sharetype = 'user' AND calendarid = ?");
+ $stmt = OCP\DB::prepare("UPDATE `*PREFIX*calendar_share_calendar` SET `active` = ? WHERE `share` = ? AND `sharetype` = 'user' AND `calendarid` = ?");
$stmt->execute(array($active, $share, $id));
}
- /*
- * @brief delete all shared calendars / events after a user was deleted
- * @param (string) $userid
- * @return (bool)
+ /**
+ * @brief deletes all shared calendars / events after a user was deleted
+ * @param string $userid
+ * @return boolean
*/
public static function post_userdelete($userid){
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_share_calendar WHERE owner = ?');
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `owner` = ?');
$stmt->execute(array($userid));
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_share_event WHERE owner = ?');
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_event` WHERE `owner` = ?');
$stmt->execute(array($userid));
- $stmt = OCP\DB::prepare("DELETE FROM *PREFIX*calendar_share_calendar WHERE share = ? AND sharetype = 'user'");
+ $stmt = OCP\DB::prepare("DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `share` = ? AND `sharetype` = 'user'");
$stmt->execute(array($userid));
- $stmt = OCP\DB::prepare("DELETE FROM *PREFIX*calendar_share_event WHERE share = ? AND sharetype = 'user'");
+ $stmt = OCP\DB::prepare("DELETE FROM `*PREFIX*calendar_share_event` WHERE `share` = ? AND `sharetype` = 'user'");
$stmt->execute(array($userid));
return true;
}
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_share_calendar WHERE calendarid = ?');
+
+ /**
+ * @brief deletes all shared events of a calendar
+ * @param integer $calid
+ * @return boolean
+ */
+ public static function post_caldelete($calid){
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_share_event WHERE eventid = ?');
++ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `calendarid` = ?');
+ $stmt->execute(array($calid));
+ return true;
+ }
+
+ /**
+ * @brief deletes all shares of an event
+ * @param integer $eventid
+ * @return boolean
+ */
+ public static function post_eventdelete($eventid){
++ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_event` WHERE `eventid` = ?');
+ $stmt->execute(array($eventid));
+ return true;
+ }
}
$adr_types = OC_Contacts_App::getTypesOfProperty('ADR');
$phone_types = OC_Contacts_App::getTypesOfProperty('TEL');
$email_types = OC_Contacts_App::getTypesOfProperty('EMAIL');
+ $impp_types = OC_Contacts_App::getTypesOfProperty('IMPP');
+ $ims = OC_Contacts_App::getIMOptions();
+ $im_protocols = array();
+ foreach($ims as $name => $values) {
+ $im_protocols[$name] = $values['displayname'];
+ }
- $tmpl = new OCP\Template('contacts','part.contact');
+ $tmpl = new OCP\Template('contacts', 'part.contact');
$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
+$tmpl->assign('requesttoken', $_SERVER['HTTP_REQUESTTOKEN']);
$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
- $tmpl->assign('adr_types',$adr_types);
- $tmpl->assign('phone_types',$phone_types);
- $tmpl->assign('email_types',$email_types);
- $tmpl->assign('id','');
+ $tmpl->assign('adr_types', $adr_types);
+ $tmpl->assign('phone_types', $phone_types);
+ $tmpl->assign('email_types', $email_types);
+ $tmpl->assign('impp_types', $impp_types, false);
+ $tmpl->assign('im_protocols', $im_protocols, false);
+ $tmpl->assign('requesttoken', $requesttoken);
+ $tmpl->assign('id', '');
$page = $tmpl->fetchPage();
OCP\JSON::success(array('data' => array( 'page' => $page )));
"Please choose the addressbook" => "Escolliu la llibreta d'adreces",
"create a new addressbook" => "crea una llibreta d'adreces nova",
"Name of new addressbook" => "Nom de la nova llibreta d'adreces",
- "Import" => "Importa",
"Importing contacts" => "S'estan important contactes",
++"Contacts imported successfully" => "Els contactes s'han importat correctament",
++"Close Dialog" => "Tanca el diàleg",
++"Import Addressbook" => "Importa la llibreta d'adreces",
+"Select address book to import to:" => "Seleccioneu la llibreta d'adreces a la que voleu importar:",
++"Drop a VCF file to import contacts." => "Elimina un fitxer VCF per importar contactes.",
+"Select from HD" => "Selecciona de HD",
"You have no contacts in your addressbook." => "No teniu contactes a la llibreta d'adreces.",
"Add contact" => "Afegeix un contacte",
- "Configure addressbooks" => "Configura les llibretes d'adreces",
+ "Select Address Books" => "Selecccioneu llibretes d'adreces",
+ "Enter name" => "Escriviu un nom",
+ "Enter description" => "Escriviu una descripció",
"CardDAV syncing addresses" => "Adreces de sincronització CardDAV",
"more info" => "més informació",
"Primary address (Kontact et al)" => "Adreça primària (Kontact i al)",
"Please choose the addressbook" => "Prosím zvolte adresář",
"create a new addressbook" => "vytvořit nový adresář",
"Name of new addressbook" => "Jméno nového adresáře",
- "Import" => "Import",
"Importing contacts" => "Importování kontaktů",
++"Contacts imported successfully" => "Kontakty úspěšně importovány",
++"Close Dialog" => "Zavírací dialog",
++"Import Addressbook" => "Importovat adresář",
+"Select address book to import to:" => "Vyberte adresář do kterého chcete importovat:",
++"Drop a VCF file to import contacts." => "Pro import kontaktů sem přetáhněte soubor VCF",
+"Select from HD" => "Vybrat z disku",
"You have no contacts in your addressbook." => "Nemáte žádné kontakty v adresáři.",
"Add contact" => "Přidat kontakt",
- "Configure addressbooks" => "Nastavit adresář",
+ "Select Address Books" => "Vybrat Adresář",
+ "Enter name" => "Vložte jméno",
+ "Enter description" => "Vložte popis",
"CardDAV syncing addresses" => "Adresa pro synchronizaci pomocí CardDAV:",
"more info" => "víc informací",
"Primary address (Kontact et al)" => "Hlavní adresa (Kontakt etc)",
"Please choose the addressbook" => "Παρακαλώ επέλεξε βιβλίο διευθύνσεων",
"create a new addressbook" => "Δημιουργία νέου βιβλίου διευθύνσεων",
"Name of new addressbook" => "Όνομα νέου βιβλίου διευθύνσεων",
- "Import" => "Εισαγωγή",
"Importing contacts" => "Εισαγωγή επαφών",
++"Contacts imported successfully" => "Οι επαφές εισήχθησαν επιτυχώς",
++"Close Dialog" => "Κλείσιμο διαλόγου",
++"Import Addressbook" => "Εισαγωγή βιβλίου διευθύνσεων",
+"Select address book to import to:" => "Επέλεξε σε ποιο βιβλίο διευθύνσεων για εισαγωγή:",
++"Drop a VCF file to import contacts." => "Εισάγεται ένα VCF αρχείο για εισαγωγή επαφών",
+"Select from HD" => "Επιλογή από HD",
"You have no contacts in your addressbook." => "Δεν έχεις επαφές στο βιβλίο διευθύνσεων",
"Add contact" => "Προσθήκη επαφής",
- "Configure addressbooks" => "Ρύθμισε το βιβλίο διευθύνσεων",
+ "Select Address Books" => "Επέλεξε βιβλίο διευθύνσεων",
+ "Enter name" => "Εισαγωγή ονόματος",
+ "Enter description" => "Εισαγωγή περιγραφής",
"CardDAV syncing addresses" => "συγχρονισμός διευθύνσεων μέσω CardDAV ",
"more info" => "περισσότερες πληροφορίες",
"Primary address (Kontact et al)" => "Κύρια διεύθυνση",
"Please choose the addressbook" => "Por favor escoge la agenda",
"create a new addressbook" => "crear una nueva agenda",
"Name of new addressbook" => "Nombre de la nueva agenda",
- "Import" => "Importar",
"Importing contacts" => "Importando contactos",
++"Contacts imported successfully" => "Contactos importados correctamente",
++"Close Dialog" => "Cerrar Diálogo",
++"Import Addressbook" => "Importar agenda",
+"Select address book to import to:" => "Selecciona una agenda para importar a:",
++"Drop a VCF file to import contacts." => "Suelta un archivo VCF para importar contactos.",
+"Select from HD" => "Seleccionar del disco duro",
"You have no contacts in your addressbook." => "No hay contactos en tu agenda.",
"Add contact" => "Añadir contacto",
- "Configure addressbooks" => "Configurar agenda",
+ "Enter name" => "Introducir nombre",
+ "Enter description" => "Introducir descripción",
"CardDAV syncing addresses" => "Sincronizando direcciones",
"more info" => "más información",
"Primary address (Kontact et al)" => "Dirección primaria (Kontact et al)",
"Please choose the addressbook" => "Palun vali aadressiraamat",
"create a new addressbook" => "loo uus aadressiraamat",
"Name of new addressbook" => "Uue aadressiraamatu nimi",
- "Import" => "Impordi",
"Importing contacts" => "Kontaktide importimine",
++"Contacts imported successfully" => "Kontaktid on imporditud",
++"Close Dialog" => "Sulge dialoog",
++"Import Addressbook" => "Impordi aadressiraamat",
+"Select address book to import to:" => "Vali aadressiraamat, millesse importida:",
++"Drop a VCF file to import contacts." => "Lohista siia VCF-fail, millest kontakte importida.",
+"Select from HD" => "Vali kõvakettalt",
"You have no contacts in your addressbook." => "Sinu aadressiraamatus pole ühtegi kontakti.",
"Add contact" => "Lisa kontakt",
- "Configure addressbooks" => "Seadista aadressiraamatuid",
"CardDAV syncing addresses" => "CardDAV sünkroniseerimise aadressid",
"more info" => "lisainfo",
"Primary address (Kontact et al)" => "Peamine aadress",
"Please choose the addressbook" => "Mesedez, aukeratu helbide liburua",
"create a new addressbook" => "sortu helbide liburu berria",
"Name of new addressbook" => "Helbide liburuaren izena",
- "Import" => "Inportatu",
"Importing contacts" => "Kontaktuak inportatzen",
++"Contacts imported successfully" => "Kontaktuak ongi inportatu dira",
++"Close Dialog" => "Dialogoa itxi",
++"Import Addressbook" => "Inporatu helbide liburua",
+"Select address book to import to:" => "Hautau helburuko helbide liburua:",
++"Drop a VCF file to import contacts." => "Askatu VCF fitxategia kontaktuak inportatzeko.",
+"Select from HD" => "Hautatu disko gogorretik",
"You have no contacts in your addressbook." => "Ez duzu kontakturik zure helbide liburuan.",
"Add contact" => "Gehitu kontaktua",
- "Configure addressbooks" => "Konfiguratu helbide liburuak",
+ "Select Address Books" => "Hautatu helbide-liburuak",
+ "Enter name" => "Sartu izena",
+ "Enter description" => "Sartu deskribapena",
"CardDAV syncing addresses" => "CardDAV sinkronizazio helbideak",
"more info" => "informazio gehiago",
"Primary address (Kontact et al)" => "Helbide nagusia",
"Please choose the addressbook" => "لطفا یک کتابچه نشانی انتخاب کنید",
"create a new addressbook" => "یک کتابچه نشانی بسازید",
"Name of new addressbook" => "نام کتابچه نشانی جدید",
- "Import" => "وارد کردن",
"Importing contacts" => "وارد کردن اشخاص",
++"Contacts imported successfully" => "اشخاص با موفقیت افزوده شدند",
++"Close Dialog" => "بستن دیالوگ",
++"Import Addressbook" => "وارد کردن کتابچه نشانی",
+"Select address book to import to:" => "یک کتابچه نشانی انتخاب کنید تا وارد شود",
++"Drop a VCF file to import contacts." => "یک پرونده VCF را به اینجا بکشید تا اشخاص افزوده شوند",
+"Select from HD" => "انتخاب از دیسک سخت",
"You have no contacts in your addressbook." => "شماهیچ شخصی در کتابچه نشانی خود ندارید",
"Add contact" => "افزودن اطلاعات شخص مورد نظر",
- "Configure addressbooks" => "پیکربندی کتابچه ی نشانی ها",
"CardDAV syncing addresses" => "CardDAV syncing addresses ",
"more info" => "اطلاعات بیشتر",
"Primary address (Kontact et al)" => "نشانی اولیه",
"Please choose the addressbook" => "Choisissez le carnet d'adresses SVP",
"create a new addressbook" => "Créer un nouveau carnet d'adresses",
"Name of new addressbook" => "Nom du nouveau carnet d'adresses",
- "Import" => "Importer",
"Importing contacts" => "Importation des contacts",
++"Contacts imported successfully" => "Contacts importés avec succes",
++"Close Dialog" => "Fermer la boite de dialogue",
++"Import Addressbook" => "Importer un carnet d'adresses.",
+"Select address book to import to:" => "Selectionner le carnet d'adresses à importer vers:",
++"Drop a VCF file to import contacts." => "Glisser un fichier VCF pour importer des contacts.",
+"Select from HD" => "Selectionner depuis le disque dur",
"You have no contacts in your addressbook." => "Il n'y a pas de contact dans votre carnet d'adresses.",
"Add contact" => "Ajouter un contact",
- "Configure addressbooks" => "Paramétrer carnet d'adresses",
+ "Select Address Books" => "Choix du carnet d'adresses",
+ "Enter name" => "Saisissez le nom",
+ "Enter description" => "Saisissez une description",
"CardDAV syncing addresses" => "Synchronisation des contacts CardDAV",
"more info" => "Plus d'infos",
"Primary address (Kontact et al)" => "Adresse principale",
"Please choose the addressbook" => "Per favor selige le adressario",
"create a new addressbook" => "Crear un nove adressario",
"Name of new addressbook" => "Nomine del nove gruppo:",
+"Import" => "Importar",
++"Contacts imported successfully" => "Contactos importate con successo.",
++"Close Dialog" => "Clauder dialogo",
++"Import Addressbook" => "Importar adressario.",
"Add contact" => "Adder adressario",
"more info" => "plus info",
- "iOS/OS X" => "iOS/OS X"
+ "iOS/OS X" => "iOS/OS X",
+ "Download" => "Discargar",
+ "Edit" => "Modificar",
+ "New Address Book" => "Nove adressario",
+ "Save" => "Salveguardar",
+ "Cancel" => "Cancellar"
);
"Please choose the addressbook" => "Scegli la rubrica",
"create a new addressbook" => "crea una nuova rubrica",
"Name of new addressbook" => "Nome della nuova rubrica",
- "Import" => "Importa",
"Importing contacts" => "Importazione contatti",
++"Contacts imported successfully" => "Contatti importati correttamente",
++"Close Dialog" => "Chiudi finestra",
++"Import Addressbook" => "Importa rubrica",
+"Select address book to import to:" => "Seleziona la rubrica di destinazione:",
++"Drop a VCF file to import contacts." => "Rilascia un file VCF per importare i contatti.",
+"Select from HD" => "Seleziona da disco",
"You have no contacts in your addressbook." => "Non hai contatti nella rubrica.",
"Add contact" => "Aggiungi contatto",
- "Configure addressbooks" => "Configura rubriche",
+ "Select Address Books" => "Seleziona rubriche",
+ "Enter name" => "Inserisci il nome",
+ "Enter description" => "Inserisci una descrizione",
"CardDAV syncing addresses" => "Indirizzi di sincronizzazione CardDAV",
"more info" => "altre informazioni",
"Primary address (Kontact et al)" => "Indirizzo principale (Kontact e altri)",
"Please choose the addressbook" => "Ве молам изберете адресар",
"create a new addressbook" => "креирај нов адресар",
"Name of new addressbook" => "Име на новиот адресар",
- "Import" => "Внеси",
"Importing contacts" => "Внесување контакти",
++"Contacts imported successfully" => "Контаките беа внесени успешно",
++"Close Dialog" => "Дијалог за затварање",
++"Import Addressbook" => "Внеси адресар",
+"Select address book to import to:" => "Изберете адресар да се внесе:",
++"Drop a VCF file to import contacts." => "Довлечкај VCF датотека да се внесат контакти.",
+"Select from HD" => "Изберете од хард диск",
"You have no contacts in your addressbook." => "Немате контакти во Вашиот адресар.",
"Add contact" => "Додади контакт",
- "Configure addressbooks" => "Уреди адресари",
"CardDAV syncing addresses" => "Адреса за синхронизација со CardDAV",
"more info" => "повеќе информации",
"Primary address (Kontact et al)" => "Примарна адреса",
"Ph.D." => "Stipendiat",
"Jr." => "Jr.",
"Sn." => "Sr.",
- "Submit" => "Lagre",
+"New Addressbook" => "Ny adressebok",
+"Edit Addressbook" => "Endre adressebok",
+"Displayname" => "Visningsnavn",
+"Active" => "Aktiv",
+"Save" => "Lagre",
++"Submit" => "Send inn",
+"Cancel" => "Avbryt",
"Import a contacts file" => "Importer en fil med kontakter.",
"Please choose the addressbook" => "Vennligst velg adressebok",
"create a new addressbook" => "Lag ny adressebok",
"Please choose the addressbook" => "Kies een adresboek",
"create a new addressbook" => "Maak een nieuw adresboek",
"Name of new addressbook" => "Naam van nieuw adresboek",
- "Import" => "Importeer",
"Importing contacts" => "Importeren van contacten",
++"Contacts imported successfully" => "Contacten zijn geïmporteerd",
++"Close Dialog" => "Sluit venster",
++"Import Addressbook" => "Importeer adresboek",
+"Select address book to import to:" => "Selecteer adresboek voor import:",
++"Drop a VCF file to import contacts." => "Sleep een VCF bestand om de contacten te importeren.",
+"Select from HD" => "Selecteer van schijf",
"You have no contacts in your addressbook." => "Je hebt geen contacten in je adresboek",
"Add contact" => "Contactpersoon toevoegen",
- "Configure addressbooks" => "Bewerken adresboeken",
"CardDAV syncing addresses" => "CardDAV synchroniseert de adressen",
"more info" => "meer informatie",
"Primary address (Kontact et al)" => "Standaardadres",
"Please choose the addressbook" => "Prosím zvolte adresár",
"create a new addressbook" => "vytvoriť nový adresár",
"Name of new addressbook" => "Meno nového adresára",
- "Import" => "Importovať",
"Importing contacts" => "Importovanie kontaktov",
++"Contacts imported successfully" => "Kontakty úspešne importované",
++"Close Dialog" => "Zatvoriť ponuku",
++"Import Addressbook" => "Importovanie adresára",
+"Select address book to import to:" => "Vyberte adresár, do ktorého chcete importovať:",
++"Drop a VCF file to import contacts." => "Pretiahnite VCF súbor pre import kontaktov.",
+"Select from HD" => "Vyberte z pevného disku",
"You have no contacts in your addressbook." => "Nemáte žiadne kontakty v adresári.",
"Add contact" => "Pridať kontakt",
- "Configure addressbooks" => "Nastaviť adresáre",
+ "Enter name" => "Zadaj meno",
"CardDAV syncing addresses" => "Adresy pre synchronizáciu s CardDAV",
"more info" => "viac informácií",
"Primary address (Kontact et al)" => "Predvolená adresa (Kontakt etc)",
"Please choose the addressbook" => "Prosimo, če izberete imenik",
"create a new addressbook" => "Ustvari nov imenik",
"Name of new addressbook" => "Ime novega imenika",
- "Import" => "Uvozi",
"Importing contacts" => "Uvažam stike",
++"Contacts imported successfully" => "Stiki so bili uspešno uvoženi",
++"Close Dialog" => "Zapri dialog",
++"Import Addressbook" => "Uvozi imenik",
+"Select address book to import to:" => "Izberite imenik v katerega boste uvažali:",
++"Drop a VCF file to import contacts." => "Za uvoz stikov spustite VCF datoteko tukaj.",
+"Select from HD" => "Izberi iz HD",
"You have no contacts in your addressbook." => "V vašem imeniku ni stikov.",
"Add contact" => "Dodaj stik",
- "Configure addressbooks" => "Nastavi imenike",
+ "Select Address Books" => "Izberite adresarje",
+ "Enter name" => "Vnesite ime",
+ "Enter description" => "Vnesite opis",
"CardDAV syncing addresses" => "CardDAV naslovi za sinhronizacijo",
"more info" => "več informacij",
"Primary address (Kontact et al)" => "Primarni naslov (za kontakt et al)",
"Please choose the addressbook" => "กรุณาเลือกสมุดบันทึกที่อยู่",
"create a new addressbook" => "สร้างสมุดบันทึกที่อยู่ใหม่",
"Name of new addressbook" => "กำหนดชื่อของสมุดที่อยู่ที่สร้างใหม่",
- "Import" => "นำเข้า",
"Importing contacts" => "นำเข้าข้อมูลการติดต่อ",
++"Contacts imported successfully" => "ข้อมูลการติดต่อถูกนำเข้าข้อมูลเรียบร้อยแล้ว",
++"Close Dialog" => "ปิดกล่องข้อความ",
++"Import Addressbook" => "นำเข้าข้อมูลสมุดบันทึกที่อยู่",
+"Select address book to import to:" => "เลือกสมุดบันทึกที่อยู่ที่ต้องการนำเข้า:",
++"Drop a VCF file to import contacts." => "วางไฟล์ VCF ที่ต้องการนำเข้าข้อมูลการติดต่อ",
+"Select from HD" => "เลือกจากฮาร์ดดิส",
"You have no contacts in your addressbook." => "คุณยังไม่มีข้อมูลการติดต่อใดๆในสมุดบันทึกที่อยู่ของคุณ",
"Add contact" => "เพิ่มชื่อผู้ติดต่อ",
- "Configure addressbooks" => "กำหนดค่าสมุดบันทึกที่อยู่",
+ "Select Address Books" => "เลือกสมุดบันทึกที่อยู่",
+ "Enter name" => "กรอกชื่อ",
+ "Enter description" => "กรอกคำอธิบาย",
"CardDAV syncing addresses" => "ที่อยู่ที่ใช้เชื่อมข้อมูลกับ CardDAV",
"more info" => "ข้อมูลเพิ่มเติม",
"Primary address (Kontact et al)" => "ที่อยู่หลัก (สำหรับติดต่อ)",
"Please choose the addressbook" => "Yeni adres defterini seç",
"create a new addressbook" => "Yeni adres defteri oluştur",
"Name of new addressbook" => "Yeni adres defteri için isim",
- "Import" => "İçe aktar",
"Importing contacts" => "Bağlantıları içe aktar",
++"Contacts imported successfully" => "Bağlantılar başarıyla içe aktarıldı",
++"Close Dialog" => "Diyaloğu kapat",
++"Import Addressbook" => "Adres defterini içeri aktar",
+"Select address book to import to:" => "İçe aktarılacak adres defterini seçin:",
++"Drop a VCF file to import contacts." => "Bağlantıları içe aktarmak için bir VCF dosyası bırakın.",
+"Select from HD" => "HD'den seç",
"You have no contacts in your addressbook." => "Adres defterinizde hiç bağlantı yok.",
"Add contact" => "Bağlatı ekle",
- "Configure addressbooks" => "Adres defterini yapılandır",
+ "Select Address Books" => "Adres deftelerini seçiniz",
+ "Enter name" => "İsim giriniz",
+ "Enter description" => "Tanım giriniz",
"CardDAV syncing addresses" => "CardDAV adresleri eşzamanlıyor",
"more info" => "daha fazla bilgi",
"Primary address (Kontact et al)" => "Birincil adres (Bağlantı ve arkadaşları)",
"There was an error adding the contact." => "添加通訊錄發生錯誤",
"Cannot add empty property." => "不可添加空白內容",
"At least one of the address fields has to be filled out." => "至少必須填寫一欄地址",
- "No contacts found." => "沒有找到聯絡人",
- "Missing ID" => "遺失ID",
+"Error adding contact property." => "添加通訊錄內容中發生錯誤",
+"No ID provided" => "未提供 ID",
+"Error adding addressbook." => "添加電話簿中發生錯誤",
+"Error activating addressbook." => "啟用電話簿中發生錯誤",
"Information about vCard is incorrect. Please reload the page." => "有關 vCard 的資訊不正確,請重新載入此頁。",
- "Error deleting contact property." => "刪除通訊錄內容中發生錯誤",
- "Error updating contact property." => "更新通訊錄內容中發生錯誤",
- "Error updating addressbook." => "電話簿更新中發生錯誤",
+ "Missing ID" => "遺失ID",
"No file was uploaded" => "沒有已上傳的檔案",
"Contacts" => "通訊錄",
- "Addressbook not found." => "找不到通訊錄",
"This is not your addressbook." => "這不是你的電話簿",
"Contact could not be found." => "通訊錄未發現",
- "Address" => "地址",
- "Telephone" => "電話",
- "Email" => "電子郵件",
- "Organization" => "組織",
"Work" => "公司",
"Home" => "住宅",
"Mobile" => "行動電話",
/**
* @brief Returns the list of addressbooks for a specific user.
* @param string $uid
- * @return array
+ * @param boolean $active Only return addressbooks with this $active state, default(=false) is don't care
+ * @return array or false.
*/
- public static function all($uid){
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `userid` = ? ORDER BY `displayname`' );
- $result = $stmt->execute(array($uid));
+ public static function all($uid, $active=false) {
+ $values = array($uid);
+ $active_where = '';
+ if ($active) {
- $active_where = ' AND active = ?';
++ $active_where = ' AND `active` = ?';
+ $values[] = 1;
+ }
+ try {
- $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE userid = ? ' . $active_where . ' ORDER BY displayname' );
++ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `userid` = ? ' . $active_where . ' ORDER BY `displayname`' );
+ $result = $stmt->execute($values);
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' uid: '.$uid, OCP\Util::DEBUG);
+ return false;
+ }
$addressbooks = array();
- while( $row = $result->fetchRow()){
+ while( $row = $result->fetchRow()) {
$addressbooks[] = $row;
}
-
+ $addressbooks = array_merge($addressbooks, OCP\Share::getItemsSharedWith('addressbook', OC_Share_Backend_Addressbook::FORMAT_ADDRESSBOOKS));
+ if(!$active && !count($addressbooks)) {
+ $id = self::addDefault($uid);
+ return array(self::find($id),);
+ }
return $addressbooks;
}
/**
* @brief Gets the data of one address book
* @param integer $id
- * @return associative array
+ * @return associative array or false.
*/
- public static function find($id){
+ public static function find($id) {
try {
- $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_addressbooks WHERE id = ?' );
+ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?' );
$result = $stmt->execute(array($id));
+ return $result->fetchRow();
} catch(Exception $e) {
OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', id: '.$id, OCP\Util::DEBUG);
* @param string $description
* @return insertid
*/
- public static function add($userid,$name,$description=''){
- $all = self::all($userid);
+ public static function add($uid,$name,$description='') {
+ try {
- $stmt = OCP\DB::prepare( 'SELECT uri FROM *PREFIX*contacts_addressbooks WHERE userid = ? ' );
++ $stmt = OCP\DB::prepare( 'SELECT `uri` FROM `*PREFIX*contacts_addressbooks` WHERE `userid` = ? ' );
+ $result = $stmt->execute(array($uid));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' uid: '.$uid, OCP\Util::DEBUG);
+ return false;
+ }
$uris = array();
- foreach($all as $i){
- $uris[] = $i['uri'];
+ while($row = $result->fetchRow()){
+ $uris[] = $row['uri'];
}
$uri = self::createURI($name, $uris );
-
- $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)' );
- $result = $stmt->execute(array($userid,$name,$uri,$description,1));
+ try {
- $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)' );
++ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)' );
+ $result = $stmt->execute(array($uid,$name,$uri,$description,1));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', uid: '.$uid, OCP\Util::DEBUG);
+ return false;
+ }
return OCP\DB::insertid('*PREFIX*contacts_addressbooks');
}
* @param string $uri
* @param string $name
* @param string $description
- * @return insertid
+ * @return insertid or false
*/
- public static function addFromDAVData($principaluri,$uri,$name,$description){
- $userid = self::extractUserID($principaluri);
+ public static function addFromDAVData($principaluri,$uri,$name,$description) {
+ $uid = self::extractUserID($principaluri);
- $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)' );
- $result = $stmt->execute(array($userid,$name,$uri,$description,1));
+ try {
- $stmt = OCP\DB::prepare('INSERT INTO *PREFIX*contacts_addressbooks (userid,displayname,uri,description,ctag) VALUES(?,?,?,?,?)');
++ $stmt = OCP\DB::prepare('INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)');
+ $result = $stmt->execute(array($uid,$name,$uri,$description,1));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', uid: '.$uid, OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', uri: '.$uri, OCP\Util::DEBUG);
+ return false;
+ }
return OCP\DB::insertid('*PREFIX*contacts_addressbooks');
}
* @param string $description
* @return boolean
*/
- public static function edit($id,$name,$description){
+ public static function edit($id,$name,$description) {
// Need these ones for checking uri
$addressbook = self::find($id);
-
- if(is_null($name)){
- $name = $addressbook['name'];
- }
- if(is_null($description)){
- $description = $addressbook['description'];
- }
-
- $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_addressbooks` SET `displayname`=?,`description`=?, `ctag`=`ctag`+1 WHERE `id`=?' );
- $result = $stmt->execute(array($name,$description,$id));
-
- return true;
- }
-
- public static function cleanArray($array, $remove_null_number = true){
- $new_array = array();
-
- $null_exceptions = array();
-
- foreach ($array as $key => $value){
- $value = trim($value);
-
- if($remove_null_number){
- $null_exceptions[] = '0';
- }
-
- if(!in_array($value, $null_exceptions) && $value != "") {
- $new_array[] = $value;
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $id);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ return false;
}
}
- return $new_array;
- }
-
- /**
- * @brief Get active addressbooks for a user.
- * @param integer $uid User id. If null current user will be used.
- * @return array
- */
- public static function activeIds($uid = null){
- if(is_null($uid)){
- $uid = OCP\USER::getUser();
- }
- $prefbooks = OCP\Config::getUserValue($uid,'contacts','openaddressbooks',null);
- $prefbooks = explode(';',$prefbooks);
- for ($i = 0; $i < count($prefbooks); $i++) {
- if(!$prefbooks[$i] || !self::find($prefbooks[$i])) {
- unset($prefbooks[$i]);
- }
+ if(is_null($name)) {
+ $name = $addressbook['name'];
}
- if(!$prefbooks){
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:activeIds:, No active addressbooks',OCP\Util::DEBUG);
- $addressbooks = OC_Contacts_Addressbook::all($uid);
- if(count($addressbooks) == 0){
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:activeIds:, No addressbooks',OCP\Util::DEBUG);
- $id = self::add($uid,'default','Default Address Book');
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:activeIds:, Created addressbook: '.$id,OCP\Util::DEBUG);
- self::setActive($id, true);
- $addressbooks = OC_Contacts_Addressbook::all($uid);
- }
- $prefbooks[] = $addressbooks[0]['id'];
- OCP\Config::setUserValue($uid,'contacts','openaddressbooks',implode(';',$prefbooks));
+ if(is_null($description)) {
+ $description = $addressbook['description'];
}
- return $prefbooks;
- }
- /**
- * @brief Returns the list of active addressbooks for a specific user.
- * @param string $uid
- * @return array
- */
- public static function active($uid){
- $active = self::activeIds($uid);
- $addressbooks = array();
- if(!$active) {
- return $addressbooks;
- }
- $ids_sql = join(',', array_fill(0, count($active), '?'));
- $prep = 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `id` IN ('.$ids_sql.') ORDER BY `displayname`';
try {
- $stmt = OCP\DB::prepare( $prep );
- $result = $stmt->execute($active);
- while( $row = $result->fetchRow()){
- $addressbooks[] = $row;
- }
- $stmt = OCP\DB::prepare('UPDATE *PREFIX*contacts_addressbooks SET displayname=?,description=?, ctag=ctag+1 WHERE id=?');
++ $stmt = OCP\DB::prepare('UPDATE `*PREFIX*contacts_addressbooks` SET `displayname`=?,`description`=?, `ctag`=`ctag`+1 WHERE `id`=?');
+ $result = $stmt->execute(array($name,$description,$id));
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:active:, exception: '.$e->getMessage(),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:active, ids: '.join(',', $active),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook::active, SQL:'.$prep,OCP\Util::DEBUG);
- return array();
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', id: '.$id, OCP\Util::DEBUG);
+ return false;
}
- return $addressbooks;
+ return true;
}
/**
* @brief Activates an addressbook
* @param integer $id
- * @param integer $name
+ * @param boolean $active
* @return boolean
*/
- public static function setActive($id,$active=true){
- // Need these ones for checking uri
- //$addressbook = self::find($id);
-
- if(is_null($id)){
- $id = 0;
- }
-
- $openaddressbooks = self::activeIds();
- if($active) {
- if(!in_array($id, $openaddressbooks)) {
- $openaddressbooks[] = $id;
- }
- } else {
- if(in_array($id, $openaddressbooks)) {
- unset($openaddressbooks[array_search($id, $openaddressbooks)]);
- }
+ public static function setActive($id,$active) {
- $sql = 'UPDATE *PREFIX*contacts_addressbooks SET active = ? WHERE id = ?';
++ $sql = 'UPDATE `*PREFIX*contacts_addressbooks` SET `active` = ? WHERE `id` = ?';
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', id: '.$id.', active: '.intval($active), OCP\Util::ERROR);
+ try {
+ $stmt = OCP\DB::prepare($sql);
+ $stmt->execute(array(intval($active), $id));
+ return true;
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception for '.$id.': '.$e->getMessage(), OCP\Util::ERROR);
+ return false;
}
- // NOTE: Ugly hack...
- $openaddressbooks = self::cleanArray($openaddressbooks, false);
- sort($openaddressbooks, SORT_NUMERIC);
- // FIXME: I alway end up with a ';' prepending when imploding the array..?
- OCP\Config::setUserValue(OCP\USER::getUser(),'contacts','openaddressbooks',implode(';', $openaddressbooks));
-
- return true;
}
/**
* @param integer $id ID of the address book.
* @return boolean
*/
- public static function isActive($id){
- //OCP\Util::writeLog('contacts','OC_Contacts_Addressbook::isActive('.$id.'):'.in_array($id, self::activeIds()), OCP\Util::DEBUG);
- return in_array($id, self::activeIds());
+ public static function isActive($id) {
- $sql = 'SELECT active FROM *PREFIX*contacts_addressbooks WHERE id = ?';
++ $sql = 'SELECT `active` FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?';
+ try {
+ $stmt = OCP\DB::prepare( $sql );
+ $result = $stmt->execute(array($id));
+ $row = $result->fetchRow();
+ return (bool)$row['active'];
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ }
}
/**
* @param integer $id
* @return boolean
*/
- public static function delete($id){
- // FIXME: There's no error checking at all.
+ public static function delete($id) {
+ $addressbook = self::find($id);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $id);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ return false;
+ }
+ }
self::setActive($id, false);
- $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?' );
- $stmt->execute(array($id));
+ try {
- $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*contacts_addressbooks WHERE id = ?' );
++ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?' );
+ $stmt->execute(array($id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception for '.$id.': '.$e->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
$cards = OC_Contacts_VCard::all($id);
foreach($cards as $card){
* @param integer $id
* @return boolean
*/
- public static function touch($id){
+ public static function touch($id) {
- $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET ctag = ctag + 1 WHERE id = ?' );
+ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_addressbooks` SET `ctag` = `ctag` + 1 WHERE `id` = ?' );
$stmt->execute(array($id));
return true;
* @return array
*/
static public function createUser($parameters) {
- OC_Contacts_Addressbook::add($parameters['uid'],'default','Default Address Book');
+ OC_Contacts_Addressbook::addDefault($parameters['uid']);
return true;
}
-
+
/**
* @brief Deletes all Addressbooks of a certain user
* @param paramters parameters from postDeleteUser-Hook
* The cards are associative arrays. You'll find the original vCard in
* ['carddata']
*/
- public static function all($id){
+ public static function all($id, $start=null, $num=null){
++ //FIXME jfd: use limit & offset as OC_DB::prepare parameters for oracle support
+ $limitsql = '';
+ if(!is_null($num)) {
+ $limitsql = ' LIMIT '.$num;
+ }
+ if(!is_null($start) && !is_null($num)) {
+ $limitsql .= ' OFFSET '.$start.' ';
+ }
$result = null;
- if(is_array($id) && count($id) > 1) {
+ if(is_array($id) && count($id)) {
$id_sql = join(',', array_fill(0, count($id), '?'));
- $prep = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` IN ('.$id_sql.') ORDER BY `fullname`';
- $prep = 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid IN ('.$id_sql.') ORDER BY fullname '.$limitsql;
++ $prep = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` IN ('.$id_sql.') ORDER BY `fullname`'.$limitsql;
try {
$stmt = OCP\DB::prepare( $prep );
$result = $stmt->execute($id);
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all:, exception: '.$e->getMessage(),OCP\Util::ERROR);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all, ids: '.count($id).' '.join(',', $id),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','SQL:'.$prep,OCP\Util::DEBUG);
- }
- } elseif($id) {
- if(is_array($id)) {
- if(count($id) == 0) {
- return array();
- }
- $id = $id[0];
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', ids: '.join(',', $id), OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.'SQL:'.$prep, OCP\Util::DEBUG);
+ return false;
}
+ } elseif(is_int($id) || is_string($id)) {
try {
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? ORDER BY `fullname`' );
- $sql = 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? ORDER BY fullname'.$limitsql;
++ $sql = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? ORDER BY `fullname`'.$limitsql;
+ $stmt = OCP\DB::prepare( $sql );
$result = $stmt->execute(array($id));
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all:, exception: '.$e->getMessage(),OCP\Util::ERROR);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all, id: '. $id,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', ids: '. $id, OCP\Util::DEBUG);
+ return false;
}
} else {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all: No ID given.',OCP\Util::ERROR);
- return array();
+ OCP\Util::writeLog('contacts', __METHOD__.'. Addressbook id(s) argument is empty: '. print_r($id, true), OCP\Util::DEBUG);
+ return false;
}
$cards = array();
if(!is_null($result)) {
/**
* @brief Returns a card
* @param integer $id
- * @return associative array
+ * @return associative array or false.
*/
public static function find($id){
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `id` = ?' );
- $result = $stmt->execute(array($id));
+ try {
- $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE id = ?' );
++ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `id` = ?' );
+ $result = $stmt->execute(array($id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id: '. $id, OCP\Util::DEBUG);
+ return false;
+ }
return $result->fetchRow();
}
* @brief finds a card by its DAV Data
* @param integer $aid Addressbook id
* @param string $uri the uri ('filename')
- * @return associative array
+ * @return associative array or false.
*/
public static function findWhereDAVDataIs($aid,$uri){
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri` = ?' );
- $result = $stmt->execute(array($aid,$uri));
+ try {
- $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' );
++ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri` = ?' );
+ $result = $stmt->execute(array($aid,$uri));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uri'.$uri, OCP\Util::DEBUG);
+ return false;
+ }
return $result->fetchRow();
}
* @returns true if the UID has been changed.
*/
protected static function trueUID($aid, &$uid) {
- $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' );
+ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri` = ?' );
$uri = $uid.'.vcf';
- $result = $stmt->execute(array($aid,$uri));
- if($result->numRows() > 0){
+ try {
+ $result = $stmt->execute(array($aid,$uri));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uid'.$uid, OCP\Util::DEBUG);
+ return false;
+ }
+ if($result->numRows() > 0) {
while(true) {
- $tmpuid = substr(md5(rand().time()),0,10);
+ $tmpuid = substr(md5(rand().time()), 0, 10);
$uri = $tmpuid.'.vcf';
- $result = $stmt->execute(array($aid,$uri));
- if($result->numRows() > 0){
+ $result = $stmt->execute(array($aid, $uri));
+ if($result->numRows() > 0) {
continue;
} else {
$uid = $tmpuid;
}
$data = $card->serialize();
- $stmt = OCP\DB::prepare( 'INSERT INTO *PREFIX*contacts_cards (addressbookid,fullname,carddata,uri,lastmodified) VALUES(?,?,?,?,?)' );
+ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_cards` (`addressbookid`,`fullname`,`carddata`,`uri`,`lastmodified`) VALUES(?,?,?,?,?)' );
- $result = $stmt->execute(array($aid,$fn,$data,$uri,time()));
+ try {
+ $result = $stmt->execute(array($aid,$fn,$data,$uri,time()));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uri'.$uri, OCP\Util::DEBUG);
+ return false;
+ }
$newid = OCP\DB::insertid('*PREFIX*contacts_cards');
OC_Contacts_Addressbook::touch($aid);
$card->setString('REV', $now->format(DateTime::W3C));
$data = $card->serialize();
- $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_cards SET fullname = ?,carddata = ?, lastmodified = ? WHERE id = ?' );
+ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_cards` SET `fullname` = ?,`carddata` = ?, `lastmodified` = ? WHERE `id` = ?' );
- $result = $stmt->execute(array($fn,$data,time(),$id));
+ try {
+ $result = $stmt->execute(array($fn,$data,time(),$id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '
+ . $e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id'.$id, OCP\Util::DEBUG);
+ return false;
+ }
OC_Contacts_Addressbook::touch($oldcard['addressbookid']);
-
+ OC_Hook::emit('OC_Contacts_VCard', 'post_updateVCard', $id);
return true;
}
* @return boolean
*/
public static function delete($id){
- // FIXME: Add error checking.
- $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_cards` WHERE `id` = ?' );
- $stmt->execute(array($id));
+ $card = self::find($id);
+ if (!$card) {
+ return false;
+ }
+ $addressbook = OC_Contacts_Addressbook::find($card['addressbookid']);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact',
+ $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact
+ || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ throw new Exception(
+ OC_Contacts_App::$l10n->t(
+ 'You do not have the permissions to delete this contact.'
+ )
+ );
+ }
+ }
+ OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard',
+ array('aid' => null, 'id' => $id, 'uri' => null)
+ );
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*contacts_cards WHERE id = ?');
++ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*contacts_cards` WHERE `id` = ?');
+ try {
+ $stmt->execute(array($id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.
+ ', exception: ' . $e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id: '
+ . $id, OCP\Util::DEBUG);
+ return false;
+ }
return true;
}
* @return boolean
*/
public static function deleteFromDAVData($aid,$uri){
- // FIXME: Add error checking. Deleting a card gives an Kontact/Akonadi error.
+ $addressbook = OC_Contacts_Addressbook::find($aid);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $query = OCP\DB::prepare( 'SELECT id FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' );
+ $id = $query->execute(array($aid, $uri))->fetchOne();
+ if (!$id) {
+ return false;
+ }
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ return false;
+ }
+ }
+ OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard', array('aid' => $aid, 'id' => null, 'uri' => $uri));
- $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri=?' );
+ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri`=?' );
- $stmt->execute(array($aid,$uri));
+ try {
+ $stmt->execute(array($aid,$uri));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uri: '.$uri, OCP\Util::DEBUG);
+ return false;
+ }
OC_Contacts_Addressbook::touch($aid);
return true;
* @return boolean
*
*/
- public static function moveToAddressBook($aid, $id){
+ public static function moveToAddressBook($aid, $id, $isAddressbook = false) {
OC_Contacts_App::getAddressbook($aid); // check for user ownership.
+ $addressbook = OC_Contacts_Addressbook::find($aid);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $aid);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_CREATE)) {
+ return false;
+ }
+ }
if(is_array($id)) {
+ foreach ($id as $index => $cardId) {
+ $card = self::find($cardId);
+ if (!$card) {
+ unset($id[$index]);
+ }
+ $oldAddressbook = OC_Contacts_Addressbook::find($card['addressbookid']);
+ if ($oldAddressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $cardId, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ unset($id[$index]);
+ }
+ }
+ }
$id_sql = join(',', array_fill(0, count($id), '?'));
- $prep = 'UPDATE *PREFIX*contacts_cards SET addressbookid = ? WHERE id IN ('.$id_sql.')';
+ $prep = 'UPDATE `*PREFIX*contacts_cards` SET `addressbookid` = ? WHERE `id` IN ('.$id_sql.')';
try {
$stmt = OCP\DB::prepare( $prep );
//$aid = array($aid);
return false;
}
} else {
- try {
+ $stmt = null;
+ if($isAddressbook) {
- $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_cards SET addressbookid = ? WHERE addressbookid = ?' );
++ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_cards` SET `addressbookid` = ? WHERE `addressbookid` = ?' );
+ } else {
+ $card = self::find($id);
+ if (!$card) {
+ return false;
+ }
+ $oldAddressbook = OC_Contacts_Addressbook::find($card['addressbookid']);
+ if ($oldAddressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ return false;
+ }
+ }
- $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_cards SET addressbookid = ? WHERE id = ?' );
+ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_cards` SET `addressbookid` = ? WHERE `id` = ?' );
+ }
+ try {
$result = $stmt->execute(array($aid, $id));
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook:, exception: '.$e->getMessage(),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook, id: '.$id,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.' id: '.$id, OCP\Util::DEBUG);
return false;
}
}
"Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!",
"Name" => "الاسم",
"Download" => "تحميل",
++"Size" => "حجم",
++"Modified" => "معدل",
+"Delete" => "محذوف",
"Upload too large" => "حجم الترفيع أعلى من المسموح",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
);
"The uploaded file was only partially uploaded" => "Файлът е качен частично",
"No file was uploaded" => "Фахлът не бе качен",
"Missing a temporary folder" => "Липсва временната папка",
+ "Failed to write to disk" => "Грешка при запис на диска",
"Files" => "Файлове",
+ "Delete" => "Изтриване",
+ "Upload Error" => "Грешка при качване",
+ "Upload cancelled." => "Качването е отменено.",
+ "Invalid name, '/' is not allowed." => "Неправилно име – \"/\" не е позволено.",
"Size" => "Размер",
"Modified" => "Променено",
+ "folder" => "папка",
+ "folders" => "папки",
+ "file" => "файл",
"Maximum upload size" => "Макс. размер за качване",
+ "0 is unlimited" => "0 означава без ограничение",
+ "New" => "Нов",
+ "Text file" => "Текстов файл",
+ "Folder" => "Папка",
+ "From url" => "От url-адрес",
"Upload" => "Качване",
+ "Cancel upload" => "Отказване на качването",
"Nothing in here. Upload something!" => "Няма нищо, качете нещо!",
"Name" => "Име",
+ "Share" => "Споделяне",
"Download" => "Изтегляне",
++"Size" => "Размер",
++"Modified" => "Променено",
+"Delete" => "Изтриване",
"Upload too large" => "Файлът е прекалено голям",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файловете които се опитвате да качите са по-големи от позволеното за сървъра."
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файловете които се опитвате да качите са по-големи от позволеното за сървъра.",
+ "Files are being scanned, please wait." => "Файловете се претърсват, изчакайте."
);
"Name" => "Nom",
"Share" => "Comparteix",
"Download" => "Baixa",
++"Size" => "Mida",
++"Modified" => "Modificat",
++"Delete all" => "Esborra-ho tot",
+"Delete" => "Suprimeix",
"Upload too large" => "La pujada és massa gran",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
"Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu",
"Name" => "Název",
"Share" => "Sdílet",
"Download" => "Stáhnout",
++"Size" => "Velikost",
++"Modified" => "Změněno",
++"Delete all" => "Smazat vše",
+"Delete" => "Vymazat",
"Upload too large" => "Příliš velký soubor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte uložit, překračují maximální velikosti uploadu na tomto serveru.",
"Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.",
"Name" => "Navn",
"Share" => "Del",
"Download" => "Download",
++"Size" => "Størrelse",
++"Modified" => "Ændret",
+"Delete" => "Slet",
"Upload too large" => "Upload for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.",
"Files are being scanned, please wait." => "Filerne bliver indlæst, vent venligst.",
"Name" => "Name",
"Share" => "Teilen",
"Download" => "Herunterladen",
++"Size" => "Größe",
++"Modified" => "Bearbeitet",
++"Delete all" => "Alle löschen",
+"Delete" => "Löschen",
"Upload too large" => "Upload zu groß",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
- "Files are being scanned, please wait." => "Daten werden gescannt, bitte warten.",
+ "Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
"Current scanning" => "Scannen"
);
"Name" => "Όνομα",
"Share" => "Διαμοίρασε",
"Download" => "Λήψη",
++"Size" => "Μέγεθος",
++"Modified" => "Τροποποιήθηκε",
++"Delete all" => "Διαγραφή όλων",
+"Delete" => "Διαγραφή",
"Upload too large" => "Πολύ μεγάλο το αρχείο προς μεταφόρτωση",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος μεταφόρτωσης αρχείων σε αυτόν το διακομιστή.",
"Files are being scanned, please wait." => "Τα αρχεία ανιχνεύονται, παρακαλώ περιμένετε",
"Name" => "Nomo",
"Share" => "Kunhavigi",
"Download" => "Elŝuti",
++"Size" => "Grando",
++"Modified" => "Modifita",
++"Delete all" => "Forigi ĉion",
+"Delete" => "Forigi",
"Upload too large" => "Elŝuto tro larĝa",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
"Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.",
"Name" => "Nombre",
"Share" => "Compartir",
"Download" => "Descargar",
++"Size" => "Tamaño",
++"Modified" => "Modificado",
++"Delete all" => "Eliminar todo",
+"Delete" => "Eliminado",
"Upload too large" => "El archivo es demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor.",
"Files are being scanned, please wait." => "Se están escaneando los archivos, por favor espere.",
"Name" => "Nimi",
"Share" => "Jaga",
"Download" => "Lae alla",
++"Size" => "Suurus",
++"Modified" => "Muudetud",
++"Delete all" => "Kustuta kõik",
+"Delete" => "Kustuta",
"Upload too large" => "Üleslaadimine on liiga suur",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
"Files are being scanned, please wait." => "Faile skannitakse, palun oota",
"Name" => "Izena",
"Share" => "Elkarbanatu",
"Download" => "Deskargatu",
++"Size" => "Tamaina",
++"Modified" => "Aldatuta",
++"Delete all" => "Ezabatu dena",
+"Delete" => "Ezabatu",
"Upload too large" => "Igotakoa handiegia da",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.",
"Files are being scanned, please wait." => "Fitxategiak eskaneatzen ari da, itxoin mezedez.",
"Name" => "نام",
"Share" => "به اشتراک گذاری",
"Download" => "بارگیری",
++"Size" => "اندازه",
++"Modified" => "تغییر یافته",
++"Delete all" => "پاک کردن همه",
+"Delete" => "پاک کردن",
"Upload too large" => "حجم بارگذاری بسیار زیاد است",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
"Files are being scanned, please wait." => "پرونده ها در حال بازرسی هستند لطفا صبر کنید",
"Name" => "Nom",
"Share" => "Partager",
"Download" => "Téléchargement",
++"Size" => "Taille",
++"Modified" => "Modifié",
++"Delete all" => "Supprimer tout",
+"Delete" => "Supprimer",
"Upload too large" => "Fichier trop volumineux",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
"Files are being scanned, please wait." => "Les fichiers sont analysés, patientez svp.",
"Name" => "Nome",
"Share" => "Compartir",
"Download" => "Descargar",
++"Size" => "Tamaño",
++"Modified" => "Modificado",
+"Delete" => "Eliminar",
"Upload too large" => "Envío demasiado grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor",
"Files are being scanned, please wait." => "Estanse analizando os ficheiros, espere por favor.",
"Name" => "שם",
"Share" => "שיתוף",
"Download" => "הורדה",
++"Size" => "גודל",
++"Modified" => "זמן שינוי",
+"Delete" => "מחיקה",
"Upload too large" => "העלאה גדולה מידי",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.",
"Files are being scanned, please wait." => "הקבצים נסרקים, נא להמתין.",
"Name" => "Naziv",
"Share" => "podjeli",
"Download" => "Preuzmi",
++"Size" => "Veličina",
++"Modified" => "Zadnja promjena",
+"Delete" => "Briši",
"Upload too large" => "Prijenos je preobiman",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju.",
"Files are being scanned, please wait." => "Datoteke se skeniraju, molimo pričekajte.",
"Name" => "Név",
"Share" => "Megosztás",
"Download" => "Letöltés",
++"Size" => "Méret",
++"Modified" => "Módosítva",
++"Delete all" => "Mindent töröl",
+"Delete" => "Törlés",
"Upload too large" => "Feltöltés túl nagy",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A fájlokat amit próbálsz feltölteni meghaladta a legnagyobb fájlméretet ezen a szerveren.",
"Files are being scanned, please wait." => "File-ok vizsgálata, kis türelmet",
"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
"Name" => "Nomine",
"Download" => "Discargar",
++"Size" => "Dimension",
++"Modified" => "Modificate",
+"Delete" => "Deler",
"Upload too large" => "Incargamento troppo longe"
);
"Name" => "Nama",
"Share" => "Bagikan",
"Download" => "Unduh",
++"Size" => "Ukuran",
++"Modified" => "Dimodifikasi",
+"Delete" => "Hapus",
"Upload too large" => "Unggahan terlalu besar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini.",
"Files are being scanned, please wait." => "Berkas sedang dipindai, silahkan tunggu.",
"Name" => "Nome",
"Share" => "Condividi",
"Download" => "Scarica",
++"Size" => "Dimensione",
++"Modified" => "Modificato",
++"Delete all" => "Elimina tutto",
+"Delete" => "Elimina",
"Upload too large" => "Il file caricato è troppo grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
"Files are being scanned, please wait." => "Scansione dei file in corso, attendi",
"Name" => "名前",
"Share" => "共有",
"Download" => "ダウンロード",
++"Size" => "サイズ",
++"Modified" => "更新日時",
+"Delete" => "削除",
"Upload too large" => "ファイルサイズが大きすぎます",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードしようとしているファイルは、サーバで規定された最大サイズを超えています。",
"Files are being scanned, please wait." => "ファイルをスキャンしています、しばらくお待ちください。",
"Name" => "이름",
"Share" => "공유",
"Download" => "다운로드",
++"Size" => "크기",
++"Modified" => "수정됨",
++"Delete all" => "모두 삭제",
+"Delete" => "삭제",
"Upload too large" => "업로드 용량 초과",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
"Files are being scanned, please wait." => "파일을 검색중입니다, 기다려 주십시오.",
"Name" => "Numm",
"Share" => "Share",
"Download" => "Eroflueden",
++"Size" => "Gréisst",
++"Modified" => "Geännert",
+"Delete" => "Läschen",
"Upload too large" => "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
"Files are being scanned, please wait." => "Fichieren gi gescannt, war weg.",
"Name" => "Pavadinimas",
"Share" => "Dalintis",
"Download" => "Atsisiųsti",
++"Size" => "Dydis",
++"Modified" => "Pakeista",
+"Delete" => "Ištrinti",
"Upload too large" => "Įkėlimui failas per didelis",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje"
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje",
+ "Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.",
+ "Current scanning" => "Šiuo metu skenuojama"
);
"Name" => "Име",
"Share" => "Сподели",
"Download" => "Преземи",
++"Size" => "Големина",
++"Modified" => "Променето",
++"Delete all" => "Избриши сѐ",
+"Delete" => "Избриши",
"Upload too large" => "Датотеката е премногу голема",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
"Files are being scanned, please wait." => "Се скенираат датотеки, ве молам почекајте.",
"New" => "Baru",
"Text file" => "Fail teks",
"Folder" => "Folder",
+ "From url" => "Dari url",
"Upload" => "Muat naik",
+ "Cancel upload" => "Batal muat naik",
"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
"Name" => "Nama ",
+ "Share" => "Kongsi",
"Download" => "Muat turun",
++"Size" => "Saiz",
++"Modified" => "Dimodifikasi",
+"Delete" => "Padam",
"Upload too large" => "Muat naik terlalu besar",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server",
+ "Files are being scanned, please wait." => "Fail sedang diimbas, harap bersabar.",
+ "Current scanning" => "Imbasan semasa"
);
"Name" => "Navn",
"Share" => "Del",
"Download" => "Last ned",
++"Size" => "Størrelse",
++"Modified" => "Endret",
++"Delete all" => "Slett alle",
+"Delete" => "Slett",
"Upload too large" => "Opplasting for stor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
"Files are being scanned, please wait." => "Skanner etter filer, vennligst vent.",
"Name" => "Naam",
"Share" => "Delen",
"Download" => "Download",
++"Size" => "Bestandsgrootte",
++"Modified" => "Laatst aangepast",
++"Delete all" => "Alles verwijderen",
+"Delete" => "Verwijder",
"Upload too large" => "Bestanden te groot",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane bestandsgrootte voor deze server.",
"Files are being scanned, please wait." => "Bestanden worden gescand, even wachten.",
"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
"Name" => "Namn",
"Download" => "Last ned",
++"Size" => "Storleik",
++"Modified" => "Endra",
+"Delete" => "Slett",
"Upload too large" => "For stor opplasting",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
);
"Name" => "Nazwa",
"Share" => "Współdziel",
"Download" => "Pobiera element",
++"Size" => "Rozmiar",
++"Modified" => "Czas modyfikacji",
+"Delete" => "Usuwa element",
"Upload too large" => "Wysyłany plik ma za duży rozmiar",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość.",
"Files are being scanned, please wait." => "Skanowanie plików, proszę czekać.",
"Name" => "Nome",
"Share" => "Compartilhar",
"Download" => "Baixar",
++"Size" => "Tamanho",
++"Modified" => "Modificado",
++"Delete all" => "Deletar Tudo",
+"Delete" => "Excluir",
"Upload too large" => "Arquivo muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.",
"Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.",
"Name" => "Nome",
"Share" => "Partilhar",
"Download" => "Transferir",
++"Size" => "Tamanho",
++"Modified" => "Modificado",
+"Delete" => "Apagar",
"Upload too large" => "Envio muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiro que estás a tentar enviar excedem o tamanho máximo de envio neste servidor.",
"Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
"Name" => "Meno",
"Share" => "Zdielať",
"Download" => "Stiahnuť",
- "Delete" => "Odstrániť",
++"Delete all" => "Odstrániť všetko",
"Upload too large" => "Nahrávanie príliš veľké",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory ktoré sa snažíte nahrať presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
"Files are being scanned, please wait." => "Súbory sa práve prehľadávajú, prosím čakajte.",
"Nothing in here. Upload something!" => "Tukaj ni ničesar. Naložite kaj!",
"Name" => "Ime",
"Share" => "Souporaba",
-"Download" => "Prenesi",
+"Download" => "Prejmi",
- "Delete" => "Izbriši",
++"Delete all" => "Izbriši vse",
"Upload too large" => "Nalaganje ni mogoče, ker je preveliko",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite naložiti, presegajo največjo dovoljeno velikost na tem strežniku.",
"Files are being scanned, please wait." => "Preiskujem datoteke, prosimo počakajte.",
"Name" => "ชื่อ",
"Share" => "แชร์",
"Download" => "ดาวน์โหลด",
- "Delete" => "ลบ",
++"Delete all" => "ลบทั้งหมด",
"Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
"Files are being scanned, please wait." => "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.",
"Name" => "Ad",
"Share" => "Paylaş",
"Download" => "İndir",
- "Delete" => "Sil",
++"Delete all" => "Hepsini sil",
"Upload too large" => "Yüklemeniz çok büyük",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.",
"Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.",
"Name" => "名称",
"Share" => "共享",
"Download" => "下载",
- "Delete" => "删除",
++"Delete all" => "删除所有",
"Upload too large" => "上传文件过大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大大小",
"Files are being scanned, please wait." => "文件正在被扫描,请稍候。",
"Name" => "名稱",
"Share" => "分享",
"Download" => "下載",
- "Delete" => "刪除",
++"Delete all" => "全部刪除",
"Upload too large" => "上傳過大",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "你試圖上傳的檔案已超過伺服器的最大容量限制。 ",
"Files are being scanned, please wait." => "正在掃描檔案,請稍等。",
$args[] = $path;
}
if (!is_null($parent)){
- $sql .= ' AND parent_path = ?';
+ $sql .= ' AND `parent_path` = ?';
$args[] = $parent;
}
- $order = OCP\Config::getUserValue($owner, 'gallery', 'order', 'ASC');
+ $order = OCP\Config::getUserValue($owner, 'gallery', 'order', 'ASC');
- $sql .= ' ORDER BY album_name ' . $order;
+ $sql .= ' ORDER BY `album_name` ' . $order;
$stmt = OCP\DB::prepare($sql);
return $stmt->execute($args);
}
public static function getAlbumSize($id){
- $sql = 'SELECT COUNT(*) as size FROM *PREFIX*gallery_photos WHERE album_id = ?';
+ $sql = 'SELECT COUNT(*) AS `size` FROM `*PREFIX*gallery_photos` WHERE `album_id` = ?';
- $stmt = OCP\DB::prepare($sql);
- $result=$stmt->execute(array($id))->fetchRow();
- return $result['size'];
+ $stmt = OCP\DB::prepare($sql);
+ $result=$stmt->execute(array($id))->fetchRow();
+ return $result['size'];
}
- public static function getIntermediateGallerySize($path) {
- $path .= '%';
+ public static function getIntermediateGallerySize($path) {
+ $path .= '%';
- $sql = 'SELECT COUNT(*) as size FROM *PREFIX*gallery_photos photos, *PREFIX*gallery_albums albums WHERE photos.album_id = albums.album_id AND uid_owner = ? AND file_path LIKE ?';
+ $sql = 'SELECT COUNT(*) AS `size` FROM `*PREFIX*gallery_photos` AS `photos`, `*PREFIX*gallery_albums` AS `albums` WHERE `photos`.`album_id` = `albums`.`album_id` AND `uid_owner` = ? AND `file_path` LIKE ?';
- $stmt = OCP\DB::prepare($sql);
- $result = $stmt->execute(array(OCP\USER::getUser(), $path))->fetchRow();
- return $result['size'];
- }
+ $stmt = OCP\DB::prepare($sql);
+ $result = $stmt->execute(array(OCP\USER::getUser(), $path))->fetchRow();
+ return $result['size'];
+ }
}
-
- ?>
return self::$instance;
}
- $stmt = \OCP\DB::prepare('SELECT * FROM *PREFIX*pictures_images_cache
- WHERE uid_owner LIKE ? AND path like ? AND path not like ?');
+ protected function getPathData($path) {
- $stmt = \OCP\DB::prepare('INSERT INTO *PREFIX*pictures_images_cache (uid_owner, path, width, height) VALUES (?, ?, ?, ?)');
++ $stmt = \OCP\DB::prepare('SELECT * FROM `*PREFIX*pictures_images_cache`
++ WHERE `uid_owner` LIKE ? AND `path` LIKE ? AND `path` NOT LIKE ?');
+ $path_match = $path.'/%';
+ $path_notmatch = $path.'/%/%';
+ $result = $stmt->execute(array(\OCP\USER::getUser(), $path_match, $path_notmatch));
+ $this->cache[$path] = array();
+ while (($row = $result->fetchRow()) != false) {
+ $this->cache[$path][$row['path']] = $row;
+ }
+ }
+
+ public function setFileData($path, $width, $height) {
++ $stmt = \OCP\DB::prepare('INSERT INTO `*PREFIX*pictures_images_cache` (`uid_owner`, `path`, `width`, `height`) VALUES (?, ?, ?, ?)');
+ $stmt->execute(array(\OCP\USER::getUser(), $path, $width, $height));
+ $ret = array('path' => $path, 'width' => $width, 'height' => $height);
+ $dir = dirname($path);
+ $this->cache[$dir][$path] = $ret;
+ return $ret;
+ }
+
public function getFileData($path) {
$gallery_path = \OCP\Config::getSystemValue( 'datadirectory' ).'/'.\OC_User::getUser().'/gallery';
$path = $gallery_path.$path;
<?php
/**
- * ownCloud - gallery application
- *
- * @author Bartek Przybylski
- * @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
+ * ownCloud - gallery application
+ *
+ * @author Bartek Przybylski
+ * @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
class OC_Gallery_Photo {
-
- public static function create($albumId, $img) {
- $stmt = OCP\DB::prepare('INSERT INTO *PREFIX*gallery_photos (album_id, file_path) VALUES (?, ?)');
+ public static function create($albumId, $img){
+ $stmt = OCP\DB::prepare('INSERT INTO `*PREFIX*gallery_photos` (`album_id`, `file_path`) VALUES (?, ?)');
$stmt->execute(array($albumId, $img));
}
-
- public static function find($albumId, $img = null) {
- $sql = 'SELECT * FROM *PREFIX*gallery_photos WHERE album_id = ?';
+ public static function find($albumId, $img=null){
+ $sql = 'SELECT * FROM `*PREFIX*gallery_photos` WHERE `album_id` = ?';
$args = array($albumId);
- if (!is_null($img)) {
- $sql .= ' AND file_path = ?';
+ if (!is_null($img)){
+ $sql .= ' AND `file_path` = ?';
$args[] = $img;
}
$stmt = OCP\DB::prepare($sql);
return $stmt->execute($args);
}
- public static function findForAlbum($owner, $album_name){
+
+ public static function findForAlbum($owner, $album_name) {
$stmt = OCP\DB::prepare('SELECT *'
- .' FROM `*PREFIX*gallery_photos photos`,'
- .' `*PREFIX*gallery_albums albums`'
- .' WHERE `albums`.`uid_owner` = ?'
- .' AND `albums`.`album_name` = ?'
- .' AND `photos`.`album_id` = `albums`.`album_id`');
- .' FROM *PREFIX*gallery_photos photos,'
- .' *PREFIX*gallery_albums albums'
- .' WHERE albums.uid_owner = ?'
- .' AND albums.album_name = ?'
- .' AND photos.album_id = albums.album_id');
++ .' FROM `*PREFIX*gallery_photos photos`,'
++ .' `*PREFIX*gallery_albums albums`'
++ .' WHERE `albums`.`uid_owner` = ?'
++ .' AND `albums`.`album_name` = ?'
++ .' AND `photos`.`album_id` = `albums`.`album_id`');
return $stmt->execute(array($owner, $album_name));
}
- public static function removeByPath($path, $album_id) {
- $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*gallery_photos` WHERE `file_path` LIKE ? AND `album_id` = ?');
+ public static function removeByPath($path, $album_id) {
- $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*gallery_photos WHERE file_path LIKE ? and album_id = ?');
++ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*gallery_photos` WHERE `file_path` LIKE ? AND `album_id` = ?');
$stmt->execute(array($path, $album_id));
}
$songs=OC_MEDIA_COLLECTION::getSongCount();
$artists=OC_MEDIA_COLLECTION::getArtistCount();
$albums=OC_MEDIA_COLLECTION::getAlbumCount();
- $query=OCP\DB::prepare("INSERT INTO `*PREFIX*media_sessions` (`session_id`, `token`, `user_id`, `start`) VALUES (NULL, ?, ?, now());");
- $query=OCP\DB::prepare("INSERT INTO *PREFIX*media_sessions (`token`, `user_id`, `start`) VALUES (?, ?, now());");
++ $query=OCP\DB::prepare("INSERT INTO `*PREFIX*media_sessions` (`token`, `user_id`, `start`) VALUES (?, ?, now());");
$query->execute(array($token,$user));
$expire=date('c',time()+600);
echo('<?xml version="1.0" encoding="UTF-8"?>');
return false;
}
}
+ $CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" );
+ if($CONFIG_DBTYPE == 'psql'){
+ $interval = ' \'600s\'::interval ';
+ }else {
+ $interval = '600';
+ }
//remove old sessions
- $query=OCP\DB::prepare("DELETE FROM `*PREFIX*media_sessions` WHERE `start`<(NOW()-600)");
- $query=OCP\DB::prepare("DELETE from *PREFIX*media_sessions WHERE start<(NOW() - ".$interval.")");
++ $query=OCP\DB::prepare("DELETE FROM `*PREFIX*media_sessions` WHERE `start`<(NOW() - ".$interval.")");
$query->execute();
- $query=OCP\DB::prepare("SELECT user_id from *PREFIX*media_sessions WHERE token=?");
+ $query=OCP\DB::prepare("SELECT `user_id` FROM `*PREFIX*media_sessions` WHERE `token`=?");
$users=$query->execute(array($auth))->fetchAll();
if(count($users)>0){
OC_MEDIA_COLLECTION::$uid=$users[0]['user_id'];
* @param array $params, parameters passed from OC_Hook
*/
public static function loginListener($params){
- if(isset($_POST['user']) and $_POST['password']){
- $name=$_POST['user'];
+ if(isset($params['uid']) and $params['password']){
+ $name=$params['uid'];
- $query=OCP\DB::prepare("SELECT user_id from *PREFIX*media_users WHERE user_id LIKE ?");
+ $query=OCP\DB::prepare("SELECT `user_id` from `*PREFIX*media_users` WHERE `user_id` LIKE ?");
$uid=$query->execute(array($name))->fetchAll();
if(count($uid)==0){
- $password=hash('sha256',$params['password']);
- $query=OCP\DB::prepare("INSERT INTO *PREFIX*media_users (user_id, user_password_sha256) VALUES (?, ?);");
+ $password=hash('sha256',$_POST['password']);
+ $query=OCP\DB::prepare("INSERT INTO `*PREFIX*media_users` (`user_id`, `user_password_sha256`) VALUES (?, ?);");
$query->execute(array($name,$password));
}
}
class OC_remoteStorage {
public static function getValidTokens($ownCloudUser, $category) {
- $query=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
- $query=OCP\DB::prepare("SELECT token,appUrl,category FROM *PREFIX*authtoken WHERE user=? LIMIT 100");
-- $result=$query->execute(array($ownCloudUser));
++ $stmt=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
++ $result=$stmt->execute(array($ownCloudUser));
$ret = array();
while($row=$result->fetchRow()){
if(in_array($category, explode(',', $row['category']))) {
public static function getTokenFor($appUrl, $categories) {
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("SELECT `token` FROM `*PREFIX*authtoken` WHERE `user`=? AND `appUrl`=? AND `category`=?",1);
- $query=OCP\DB::prepare("SELECT token FROM *PREFIX*authtoken WHERE user=? AND appUrl=? AND category=? LIMIT 1");
-- $result=$query->execute(array($user, $appUrl, $categories));
- $ret = array();
++ $stmt=OCP\DB::prepare("SELECT `token` FROM `*PREFIX*authtoken` WHERE `user`=? AND `appUrl`=? AND `category`=?",1);
++ $result=$stmt->execute(array($user, $appUrl, $categories));
if($row=$result->fetchRow()) {
- return base64_encode('remoteStorage:'.$row['token']);
- } else {
- return false;
- }
+ return base64_encode('remoteStorage:'.$row['token']);
+ } else {
+ return false;
+ }
}
public static function getAllTokens() {
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
- $query=OCP\DB::prepare("SELECT token,appUrl,category FROM *PREFIX*authtoken WHERE user=? LIMIT 100");
-- $result=$query->execute(array($user));
++ $stmt=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
++ $result=$stmt->execute(array($user));
$ret = array();
while($row=$result->fetchRow()){
$ret[$row['token']] = array(
public static function deleteToken($token) {
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("DELETE FROM `*PREFIX*authtoken` WHERE `token`=? AND `user`=?");
- $result=$query->execute(array($token,$user));
- $query=OCP\DB::prepare("DELETE FROM *PREFIX*authtoken WHERE token=? AND user=?");
- $query->execute(array($token,$user));
++ $stmt=OCP\DB::prepare("DELETE FROM `*PREFIX*authtoken` WHERE `token`=? AND `user`=?");
++ $stmt->execute(array($token,$user));
return 'unknown';//how can we see if any rows were affected?
}
private static function addToken($token, $appUrl, $categories){
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("INSERT INTO `*PREFIX*authtoken` (`token`,`appUrl`,`user`,`category`) VALUES(?,?,?,?)");
- $result=$query->execute(array($token,$appUrl,$user,$categories));
- $query=OCP\DB::prepare("INSERT INTO *PREFIX*authtoken (`token`,`appUrl`,`user`,`category`) VALUES(?,?,?,?)");
- $query->execute(array($token,$appUrl,$user,$categories));
++ $stmt=OCP\DB::prepare("INSERT INTO `*PREFIX*authtoken` (`token`,`appUrl`,`user`,`category`) VALUES(?,?,?,?)");
++ $stmt->execute(array($token,$appUrl,$user,$categories));
}
public static function createCategories($appUrl, $categories) {
$token=uniqid();
}
}
// hide log in button etc. when form fields not filled
- checkShowCredentials();
- $('input#user, input#password').keyup(checkShowCredentials);
- // commented out due to some browsers having issues with it
++ // commented out due to some browsers having issues with it
+ // checkShowCredentials();
+ // $('input#user, input#password').keyup(checkShowCredentials);
$('#settings #expand').keydown(function(event) {
if (event.which == 13 || event.which == 32) {
res[i] = fun.call(thisp, t[i], i, t);
}
}
-
- return res;
+
- return res;
++ return res;
};
}
/**
* Filter Jquery selector by attribute value
**/
- $.fn.filterAttr = function(attr_name, attr_value) {
- return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
+ $.fn.filterAttr = function(attr_name, attr_value) {
- return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
++ return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
};
function humanFileSize(size) {
<field>
<name>propertyvalue</name>
- <type>clob</type>
++ <type>test</type>
+ <notnull>true</notnull>
+ </field>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*share</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <autoincrement>1</autoincrement>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>share_type</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>1</length>
+ </field>
+
+ <field>
+ <name>share_with</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>uid_owner</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>parent</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>item_type</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>item_source</name>
+ <type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>item_target</name>
<type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>file_source</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>file_target</name>
+ <type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>512</length>
+ </field>
+
+ <field>
+ <name>permissions</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>1</length>
+ </field>
+
+ <field>
+ <name>stime</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>8</length>
+ </field>
+
+ <field>
+ <name>accepted</name>
+ <type>integer</type>
+ <default>0</default>
<notnull>true</notnull>
+ <length>1</length>
</field>
</declaration>
</table>
- <type>clob</type>
+
+ <table>
+
+ <name>*dbprefix*queuedtasks</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <autoincrement>1</autoincrement>
+ <unsigned>true</unsigned>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>app</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>klass</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>method</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>parameters</name>
++ <type>text</type>
+ <notnull>true</notnull>
+ </field>
+
+
+
+ </declaration>
+
+ </table>
<table>
* get all enabled apps
*/
public static function getEnabledApps(){
+ if(!OC_Config::getValue('installed', false))
+ return array();
$apps=array('files');
- $query = OC_DB::prepare( 'SELECT appid FROM *PREFIX*appconfig WHERE configkey = \'enabled\' AND configvalue=\'yes\'' );
+ $query = OC_DB::prepare( 'SELECT `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\'' );
$result=$query->execute();
while($row=$result->fetchRow()){
if(array_search($row['appid'],$apps)===false){
}
/**
- * get the installed version of all papps
+ * get the installed version of all apps
*/
public static function getAppVersions(){
+ static $versions;
+ if (isset($versions)) { // simple cache, needs to be fixed
+ return $versions; // when function is used besides in checkUpgrade
+ }
$versions=array();
- $query = OC_DB::prepare( 'SELECT appid, configvalue FROM *PREFIX*appconfig WHERE configkey = \'installed_version\'' );
+ $query = OC_DB::prepare( 'SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig` WHERE `configkey` = \'installed_version\'' );
$result = $query->execute();
while($row = $result->fetchRow()){
$versions[$row['appid']]=$row['configvalue'];
// NOTE: the following 10 lines or so could be easily replaced by
// pure sql. MySQL's non-standard string concatination prevents us
// from doing this though.
- // Fix: sqlite does not insert time() as a number but as text, making
- // the equation returning false all the time
- $query = 'SELECT * FROM `*PREFIX*locks` WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND ((`uri` = ?)';
+ // NOTE: SQLite requires time() to be inserted directly. That's ugly
+ // but otherwise reading locks from SQLite Databases will return
+ // nothing
- $query = 'SELECT * FROM *PREFIX*locks WHERE userid = ? AND (created + timeout) > '.time().' AND (( uri = ?)';
++ $query = 'SELECT * FROM `*PREFIX*locks` WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
$params = array(OC_User::getUser(),$uri);
// We need to check locks for every part in the uri.
}
$query.=')';
- $stmt = OC_DB::prepare($query);
- $result = $stmt->execute($params);
- $stmt = OC_DB::prepare($query );
++ $stmt = OC_DB::prepare( $query );
+ $result = $stmt->execute( $params );
$lockList = array();
while( $row = $result->fetchRow()){
* @param array $properties
* @return void
*/
- function getProperties($properties) {
- // At least some magic in here :-)
- $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?' );
- $result = $query->execute( array( OC_User::getUser(), $this->path ));
-
- $existing = array();
- while( $row = $result->fetchRow()){
- $existing[$row['propertyname']] = $row['propertyvalue'];
+ public function getProperties($properties) {
+ if (is_null($this->property_cache)) {
- $query = OC_DB::prepare( 'SELECT * FROM *PREFIX*properties WHERE userid = ? AND propertypath = ?' );
++ $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?' );
+ $result = $query->execute( array( OC_User::getUser(), $this->path ));
+
+ $this->property_cache = array();
+ while( $row = $result->fetchRow()){
+ $this->property_cache[$row['propertyname']] = $row['propertyvalue'];
+ }
}
+ // if the array was empty, we need to return everything
if(count($properties) == 0){
- return $existing;
+ return $this->property_cache;
}
- // if the array was empty, we need to return everything
$props = array();
foreach($properties as $property) {
- if (isset($existing[$property])) $props[$property] = $existing[$property];
+ if (isset($this->property_cache[$property])) $props[$property] = $this->property_cache[$property];
}
return $props;
}
- $query = OC_DB::prepare( 'INSERT INTO *PREFIX*properties (userid,propertypath,propertyname,propertyvalue) VALUES(?,?,?,?)' );
+
+ /**
+ * Creates a ETag for this path.
+ * @param string $path Path of the file
+ * @return string|null Returns null if the ETag can not effectively be determined
+ */
+ static protected function createETag($path) {
+ return uniqid('', true);
+ }
+
+ /**
+ * Returns the ETag surrounded by double-quotes for this path.
+ * @param string $path Path of the file
+ * @return string|null Returns null if the ETag can not effectively be determined
+ */
+ static public function getETagPropertyForPath($path) {
+ $tag = self::createETag($path);
+ if (empty($tag)) {
+ return null;
+ }
+ $etag = '"'.$tag.'"';
- $query = OC_DB::prepare( 'DELETE FROM *PREFIX*properties'
- .' WHERE userid = ?'
- .' AND propertyname = ?'
- .' AND propertypath IN ('.$path_placeholders.')'
++ $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*properties` (`userid`,`propertypath`,`propertyname`,`propertyvalue`) VALUES(?,?,?,?)' );
+ $query->execute( array( OC_User::getUser(), $path, self::GETETAG_PROPERTYNAME, $etag ));
+ return $etag;
+ }
+
+ /**
+ * Remove the ETag from the cache.
+ * @param string $path Path of the file
+ */
+ static public function removeETagPropertyForPath($path) {
+ // remove tags from this and parent paths
+ $paths = array();
+ while ($path != '/' && $path != '') {
+ $paths[] = $path;
+ $path = dirname($path);
+ }
+ if (empty($paths)) {
+ return;
+ }
+ $paths[] = $path;
+ $path_placeholders = join(',', array_fill(0, count($paths), '?'));
++ $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*properties`'
++ .' WHERE `userid` = ?'
++ .' AND `propertyname` = ?'
++ .' AND `propertypath` IN ('.$path_placeholders.')'
+ );
+ $vals = array( OC_User::getUser(), self::GETETAG_PROPERTYNAME );
+ $query->execute(array_merge( $vals, $paths ));
+ }
}
* @return BACKEND_MDB2 or BACKEND_PDO
*/
private static function getDBBackend(){
- if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (instalation always needs to be done my mdb2)
- $backend=self::BACKEND_MDB2;
+ if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (installation always needs to be done my mdb2)
$type = OC_Config::getValue( "dbtype", "sqlite" );
- if($type=='oci') { //oracle also always needs mdb2
- return self::BACKEND_MDB2;
- }
++ if($type=='oci') { //oracle also always needs mdb2
++ return self::BACKEND_MDB2;
++ }
if($type=='sqlite3') $type='sqlite';
$drivers=PDO::getAvailableDrivers();
if(array_search($type,$drivers)!==false){
- $backend=self::BACKEND_PDO;
+ return self::BACKEND_PDO;
}
}
- return self::BACKEND_MDB2;
++ return self::BACKEND_MDB2;
}
/**
}else{
$dsn='pgsql:dbname='.$name.';host='.$host;
}
+ /**
+ * Ugly fix for pg connections pbm when password use spaces
+ */
+ $e_user = addslashes($user);
+ $e_password = addslashes($pass);
+ $pass = $user = null;
+ $dsn .= ";user='$e_user';password='$e_password'";
+ /** END OF FIX***/
break;
- case 'oci': // Oracle with PDO is unsupported
- if ($port) {
- $dsn = 'oci:dbname=//' . $host . ':' . $port . '/' . $name;
- } else {
- $dsn = 'oci:dbname=//' . $host . '/' . $name;
- }
- break;
- }
++ case 'oci': // Oracle with PDO is unsupported
++ if ($port) {
++ $dsn = 'oci:dbname=//' . $host . ':' . $port . '/' . $name;
++ } else {
++ $dsn = 'oci:dbname=//' . $host . '/' . $name;
++ }
++ break;
+ }
try{
self::$PDO=new PDO($dsn,$user,$pass,$opts);
}catch(PDOException $e){
'database' => $name
);
break;
- case 'oci':
- $dsn = array(
- 'phptype' => 'oci8',
- 'username' => $user,
- 'password' => $pass,
- );
- if ($host != '') {
- $dsn['hostspec'] = $host;
- $dsn['database'] = $name;
- } else { // use dbname for hostspec
- $dsn['hostspec'] = $name;
- }
++ case 'oci':
++ $dsn = array(
++ 'phptype' => 'oci8',
++ 'username' => $user,
++ 'password' => $pass,
++ );
++ if ($host != '') {
++ $dsn['hostspec'] = $host;
++ $dsn['database'] = $name;
++ } else { // use dbname for hostspec
++ $dsn['hostspec'] = $name;
++ }
+ break;
}
// Try to establish connection
*
* SQL query via MDB2 prepare(), needs to be execute()'d!
*/
- static public function prepare( $query ){
+ static public function prepare( $query , $limit=null, $offset=null ){
-
- if (!is_null($limit)) {
- if (self::$backend == self::BACKEND_MDB2) {
- //MDB2 uses or emulates limits & offset internally
- self::$MDB2->setLimit($limit, $offset);
- } else {
- //PDO does not handle limit and offset.
- //FIXME: check limit notation for other dbs
- //the following sql thus might needs to take into account db ways of representing it
- //(oracle has no LIMIT / OFFSET)
- $limitsql = ' LIMIT ' . $limit;
- if (!is_null($offset)) {
- $limitsql .= ' OFFSET ' . $offset;
- }
- //insert limitsql
- if (substr($query, -1) == ';') { //if query ends with ;
- $query = substr($query, 0, -1) . $limitsql . ';';
- } else {
- $query.=$limitsql;
- }
- }
- }
-
-
-
- // Optimize the query
++
++ if (!is_null($limit)) {
++ if (self::$backend == self::BACKEND_MDB2) {
++ //MDB2 uses or emulates limits & offset internally
++ self::$MDB2->setLimit($limit, $offset);
++ } else {
++ //PDO does not handle limit and offset.
++ //FIXME: check limit notation for other dbs
++ //the following sql thus might needs to take into account db ways of representing it
++ //(oracle has no LIMIT / OFFSET)
++ $limitsql = ' LIMIT ' . $limit;
++ if (!is_null($offset)) {
++ $limitsql .= ' OFFSET ' . $offset;
++ }
++ //insert limitsql
++ if (substr($query, -1) == ';') { //if query ends with ;
++ $query = substr($query, 0, -1) . $limitsql . ';';
++ } else {
++ $query.=$limitsql;
++ }
++ }
++ }
++
+ // Optimize the query
$query = self::processQuery( $query );
self::connect();
$file2 = 'static://db_scheme';
$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
- /* FIXME: REMOVE this commented code
- * actually mysql, postgresql, sqlite and oracle support CUURENT_TIMESTAMP
- * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
- * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
- * http://www.sqlite.org/lang_createtable.html
- * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
-
- if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
- $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
- }
- */
- if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
- $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
- }
++ /* FIXME: REMOVE this commented code
++ * actually mysql, postgresql, sqlite and oracle support CURRENT_TIMESTAMP
++ * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
++ * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
++ * http://www.sqlite.org/lang_createtable.html
++ * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
++
++ if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
++ $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
++ }
++ */
file_put_contents( $file2, $content );
// Try to create tables
if( $definition instanceof MDB2_Schema_Error ){
die( $definition->getMessage().': '.$definition->getUserInfo());
}
- // if(OC_Config::getValue('dbtype','sqlite')=='sqlite'){
- // $definition['overwrite']=true;//always overwrite for sqlite
- // }
- if(OC_Config::getValue('dbtype','sqlite')==='oci'){
- unset($definition['charset']); //or MDB2 tries SHUTDOWN IMMEDIATE
- $oldname = $definition['name'];
- $definition['name']=OC_Config::getValue( "dbuser", $oldname );
- }
-
++ if(OC_Config::getValue('dbtype','sqlite')==='oci'){
++ unset($definition['charset']); //or MDB2 tries SHUTDOWN IMMEDIATE
++ $oldname = $definition['name'];
++ $definition['name']=OC_Config::getValue( "dbuser", $oldname );
++ }
++
$ret=self::$schema->createDatabase( $definition );
// Die in case something went wrong
if( $ret instanceof MDB2_Error ){
- echo (self::$MDB2->getDebugOutput());
++ echo (self::$MDB2->getDebugOutput());
die ($ret->getMessage() . ': ' . $ret->getUserInfo());
}
$file2 = 'static://db_scheme';
$content = str_replace( '*dbname*', $previousSchema['name'], $content );
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
- /* FIXME: REMOVE this commented code
- * actually mysql, postgresql, sqlite and oracle support CUURENT_TIMESTAMP
- * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
- * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
- * http://www.sqlite.org/lang_createtable.html
- * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
++ /* FIXME: REMOVE this commented code
++ * actually mysql, postgresql, sqlite and oracle support CUURENT_TIMESTAMP
++ * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
++ * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
++ * http://www.sqlite.org/lang_createtable.html
++ * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
}
- */
++ */
file_put_contents( $file2, $content );
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
$oldPath=$root.$oldPath;
$newPath=$root.$newPath;
$newParent=self::getParentId($newPath);
- $query=OC_DB::prepare('UPDATE *PREFIX*fscache SET parent=? ,name=?, path=?, path_hash=? WHERE path_hash=?');
+ $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `parent`=? ,`name`=?, `path`=?, `path_hash`=? WHERE `path_hash`=?');
$query->execute(array($newParent,basename($newPath),$newPath,md5($newPath),md5($oldPath)));
- $query=OC_DB::prepare('SELECT path FROM *PREFIX*fscache WHERE path LIKE ?');
+ if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$oldPath)){
+ $cache->set('fileid/'.$newPath,$cache->get('fileid/'.$oldPath));
+ $cache->remove('fileid/'.$oldPath);
+ }
+
+ $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `path` LIKE ?');
$oldLength=strlen($oldPath);
- $updateQuery=OC_DB::prepare('UPDATE *PREFIX*fscache SET path=?, path_hash=? WHERE path_hash=?');
+ $updateQuery=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `path`=?, `path_hash`=? WHERE `path_hash`=?');
while($row= $query->execute(array($oldPath.'/%'))->fetchRow()){
$old=$row['path'];
$new=$newPath.substr($old,$oldLength);
/**
* delete info from the cache
- * @param string/int $file
+ * @param string path
* @param string root (optional)
*/
- public static function delete($file,$root=''){
- if(!is_numeric($file)){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $path=$root.$file;
- self::delete(self::getFileId($path));
- }elseif($file!=-1){
- $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `parent`=?');
- $result=$query->execute(array($file));
- while($child=$result->fetchRow()){
- self::delete(intval($child['id']));
- }
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `id`=?');
- $query->execute(array($file));
+ public static function delete($path,$root=false){
+ if($root===false){
+ $root=OC_Filesystem::getRoot();
}
- $query=OC_DB::prepare('DELETE FROM *PREFIX*fscache WHERE path_hash=?');
++ $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path_hash`=?');
+ $query->execute(array(md5($root.$path)));
+
+ //delete everything inside the folder
- $query=OC_DB::prepare('DELETE FROM *PREFIX*fscache WHERE path LIKE ?');
++ $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `path` LIKE ?');
+ $query->execute(array($root.$path.'/%'));
+
+ OC_Cache::remove('fileid/'.$root.$path);
}
/**
* @param string root (optional)
* @return array of filepaths
*/
- public static function search($search,$returnData=false,$root=''){
- if(!$root){
+ public static function search($search,$returnData=false,$root=false){
+ if($root===false){
$root=OC_Filesystem::getRoot();
}
- if($root=='/'){
- $root='';
- }
$rootLen=strlen($root);
if(!$returnData){
- $query=OC_DB::prepare('SELECT path FROM *PREFIX*fscache WHERE name LIKE ? AND `user`=?');
+ $query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `name` LIKE ? AND `user`=?');
}else{
- $query=OC_DB::prepare('SELECT * FROM *PREFIX*fscache WHERE name LIKE ? AND `user`=?');
+ $query=OC_DB::prepare('SELECT * FROM `*PREFIX*fscache` WHERE `name` LIKE ? AND `user`=?');
}
$result=$query->execute(array("%$search%",OC_User::getUser()));
$names=array();
/**
* get the file id as used in the cache
- * unlike the public getId, full paths are used here (/usename/files/foo instead of /foo)
- * @param string $path
+ * @param string path
+ * @param string root (optional)
* @return int
*/
- private static function getFileId($path){
- $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- if(OC_DB::isError($query)){
- OC_Log::write('files','error while getting file id of '.$path,OC_Log::ERROR);
- return -1;
+ public static function getId($path,$root=false){
+ if($root===false){
+ $root=OC_Filesystem::getRoot();
+ }
+
+ $fullPath=$root.$path;
+ if(($cache=OC_Cache::getUserCache(true)) && $cache->hasKey('fileid/'.$fullPath)){
+ return $cache->get('fileid/'.$fullPath);
}
- $result=$query->execute(array(md5($path)));
+
- $query=OC_DB::prepare('SELECT id FROM *PREFIX*fscache WHERE path_hash=?');
++ $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
+ $result=$query->execute(array(md5($fullPath)));
if(OC_DB::isError($result)){
OC_Log::write('files','error while getting file id of '.$path,OC_Log::ERROR);
return -1;
* adjust the size of the parent folders
* @param string $path
* @param int $sizeDiff
+ * @param string root (optinal)
*/
- private static function increaseSize($path,$sizeDiff){
+ public static function increaseSize($path,$sizeDiff, $root=false){
if($sizeDiff==0) return;
- while(($id=self::getFileId($path))!=-1){//walk up the filetree increasing the size of all parent folders
+ $id=self::getId($path,$root);
+ while($id!=-1){//walk up the filetree increasing the size of all parent folders
- $query=OC_DB::prepare('UPDATE *PREFIX*fscache SET size=size+? WHERE id=?');
+ $query=OC_DB::prepare('UPDATE `*PREFIX*fscache` SET `size`=`size`+? WHERE `id`=?');
$query->execute(array($sizeDiff,$id));
+ $id=self::getParentId($path);
$path=dirname($path);
}
}
static public function getLocalFile($path){
return self::$defaultInstance->getLocalFile($path);
}
+ /**
+ * @param string path
+ * @return string
+ */
+ static public function getLocalFolder($path){
+ return self::$defaultInstance->getLocalFolder($path);
+ }
+
+ /**
+ * return path to file which reflects one visible in browser
++ * @param string path
++ * @return string
++ */
++ static public function getLocalPath($path) {
++ $datadir = \OCP\Config::getSystemValue('datadirectory').'/'.\OC_User::getUser().'/files';
++ $newpath = $path;
++ if (strncmp($newpath, $datadir, strlen($datadir)) == 0) {
++ $newpath = substr($path, strlen($datadir));
++ }
++ return $newpath;
++ }
+
+ /**
+ * return path to file which reflects one visible in browser
* @param string path
* @return string
*/
* Trys to create a new group. If the group name already exists, false will
* be returned.
*/
- public static function createGroup( $gid ){
+ public function createGroup( $gid ){
// Check for existence
- $query = OC_DB::prepare( 'SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?' );
- $query = OC_DB::prepare( "SELECT gid FROM `*PREFIX*groups` WHERE gid = ?" );
-- $result = $query->execute( array( $gid ));
++ $stmt = OC_DB::prepare( "SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?" );
++ $result = $stmt->execute( array( $gid ));
if( $result->fetchRow() ){
// Can not add an existing group
}
else{
// Add group and exit
- $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )' );
- $query = OC_DB::prepare( "INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )" );
-- $result = $query->execute( array( $gid ));
++ $stmt = OC_DB::prepare( "INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )" );
++ $result = $stmt->execute( array( $gid ));
return $result ? true : false;
}
*
* Deletes a group and removes it from the group_user-table
*/
- public static function deleteGroup( $gid ){
+ public function deleteGroup( $gid ){
// Delete the group
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*groups` WHERE `gid` = ?' );
- $query = OC_DB::prepare( "DELETE FROM `*PREFIX*groups` WHERE gid = ?" );
-- $result = $query->execute( array( $gid ));
++ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*groups` WHERE `gid` = ?" );
++ $result = $stmt->execute( array( $gid ));
// Delete the group-user relation
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?' );
- $query = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE gid = ?" );
-- $result = $query->execute( array( $gid ));
++ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?" );
++ $result = $stmt->execute( array( $gid ));
return true;
}
*
* Checks whether the user is member of a group or not.
*/
- public static function inGroup( $uid, $gid ){
+ public function inGroup( $uid, $gid ){
// check
- $query = OC_DB::prepare( 'SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?' );
- $query = OC_DB::prepare( "SELECT uid FROM `*PREFIX*group_user` WHERE gid = ? AND uid = ?" );
-- $result = $query->execute( array( $gid, $uid ));
++ $stmt = OC_DB::prepare( "SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?" );
++ $result = $stmt->execute( array( $gid, $uid ));
return $result->fetchRow() ? true : false;
}
*
* Adds a user to a group.
*/
- public static function addToGroup( $uid, $gid ){
+ public function addToGroup( $uid, $gid ){
// No duplicate entries!
- if( !self::inGroup( $uid, $gid )){
- $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )' );
- $result = $query->execute( array( $uid, $gid ));
+ if( !$this->inGroup( $uid, $gid )){
- $query = OC_DB::prepare( "INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )" );
- $query->execute( array( $uid, $gid ));
++ $stmt = OC_DB::prepare( "INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )" );
++ $stmt->execute( array( $uid, $gid ));
return true;
}else{
return false;
*
* removes the user from a group.
*/
- public static function removeFromGroup( $uid, $gid ){
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ?' );
- $result = $query->execute( array( $uid, $gid ));
+ public function removeFromGroup( $uid, $gid ){
- $query = OC_DB::prepare( "DELETE FROM *PREFIX*group_user WHERE uid = ? AND gid = ?" );
- $query->execute( array( $uid, $gid ));
++ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ?" );
++ $stmt->execute( array( $uid, $gid ));
return true;
}
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
*/
- public static function getUserGroups( $uid ){
+ public function getUserGroups( $uid ){
// No magic!
- $query = OC_DB::prepare( 'SELECT `gid` FROM `*PREFIX*group_user` WHERE `uid` = ?' );
- $query = OC_DB::prepare( "SELECT gid FROM `*PREFIX*group_user` WHERE uid = ?" );
-- $result = $query->execute( array( $uid ));
++ $stmt = OC_DB::prepare( "SELECT `gid` FROM `*PREFIX*group_user` WHERE `uid` = ?" );
++ $result = $stmt->execute( array( $uid ));
$groups = array();
while( $row = $result->fetchRow()){
*
* Returns a list with all groups
*/
- public static function getGroups(){
- $query = OC_DB::prepare( 'SELECT `gid` FROM `*PREFIX*groups`' );
- $result = $query->execute();
-
- public function getGroups($search = '', $limit = -1, $offset = 0) {
- if ($limit == -1) {
- $query = OC_DB::prepare('SELECT gid FROM *PREFIX*groups WHERE gid LIKE ?');
- } else {
- $query = OC_DB::prepare('SELECT gid FROM *PREFIX*groups WHERE gid LIKE ? LIMIT '.$limit.' OFFSET '.$offset);
- }
- $result = $query->execute(array($search.'%'));
++ public function getGroups($search = '', $limit = null, $offset = null) {
++ $stmt = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` LIKE ?', $limit, $offset);
++ $result = $stmt->execute(array($search.'%'));
$groups = array();
- while( $row = $result->fetchRow()){
- $groups[] = $row["gid"];
+ while ($row = $result->fetchRow()) {
+ $groups[] = $row['gid'];
}
-
return $groups;
}
-
+
+ /**
+ * check if a group exists
+ * @param string $gid
+ * @return bool
+ */
+ public function groupExists($gid) {
- $query = OC_DB::prepare('SELECT gid FROM *PREFIX*groups WHERE gid = ?');
++ $query = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?');
+ $result = $query->execute(array($gid))->fetchOne();
+ if ($result) {
+ return true;
+ }
+ return false;
+ }
+
/**
* @brief get a list of all users in a group
* @returns array with user ids
*/
- public static function usersInGroup($gid){
- $query=OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid`=?');
- $users=array();
- $result=$query->execute(array($gid));
- while($row=$result->fetchRow()){
- $users[]=$row['uid'];
- public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
- if ($limit == -1) {
- $query = OC_DB::prepare('SELECT uid FROM *PREFIX*group_user WHERE gid = ? AND uid LIKE ?');
- } else {
- $query = OC_DB::prepare('SELECT uid FROM *PREFIX*group_user WHERE gid = ? AND uid LIKE ? LIMIT '.$limit.' OFFSET '.$offset);
- }
- $result = $query->execute(array($gid, $search.'%'));
++ public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
++ $stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?', $limit, $offset);
++ $result = $stmt->execute(array($gid, $search.'%'));
+ $users = array();
+ while ($row = $result->fetchRow()) {
+ $users[] = $row['uid'];
}
return $users;
}
$query->execute( array( $user, $app, $key, $value ));
}
else{
- $query = OC_DB::prepare( 'UPDATE *PREFIX*preferences SET configvalue = ? WHERE userid = ? AND appid = ? AND configkey = ?' );
+ $query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
$query->execute( array( $value, $user, $app, $key ));
}
+ return true;
}
/**
$entry.='Offending command was: '.$query.'<br />';
echo($entry);
}
+
+ if(! pg_fetch_row($result)) {
+ //user does not exists let's create it :)
+ $query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_password';";
+ $result = pg_query($connection, $query);
+ if(!$result) {
+ $entry='DB Error: "'.pg_last_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ }
+ else { // change password of the existing role
+ $query = "ALTER ROLE \"$e_name\" WITH PASSWORD '$e_password';";
+ $result = pg_query($connection, $query);
+ if(!$result) {
+ $entry='DB Error: "'.pg_last_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ }
}
+ /**
+ *
+ * @param String $name
+ * @param String $password
+ * @param String $tablespace
+ * @param resource $connection
+ */
+ private static function oci_createDBUser($name, $password, $tablespace, $connection) {
+
+ $query = "SELECT * FROM all_users WHERE USERNAME = :un";
+ $stmt = oci_parse($connection, $query);
+ if (!$stmt) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ oci_bind_by_name($stmt, ':un', $name);
+ $result = oci_execute($stmt);
+ if(!$result) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+
+ if(! oci_fetch_row($stmt)) {
+ //user does not exists let's create it :)
+ //password must start with alphabetic character in oracle
+ $query = 'CREATE USER '.$name.' IDENTIFIED BY "'.$password.'" DEFAULT TABLESPACE '.$tablespace; //TODO set default tablespace
+ $stmt = oci_parse($connection, $query);
+ if (!$stmt) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ //oci_bind_by_name($stmt, ':un', $name);
+ $result = oci_execute($stmt);
+ if(!$result) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.', name:'.$name.', password:'.$password.'<br />';
+ echo($entry);
+ }
+ } else { // change password of the existing role
+ $query = "ALTER USER :un IDENTIFIED BY :pw";
+ $stmt = oci_parse($connection, $query);
+ if (!$stmt) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ oci_bind_by_name($stmt, ':un', $name);
+ oci_bind_by_name($stmt, ':pw', $password);
+ $result = oci_execute($stmt);
+ if(!$result) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ }
+ // grant neccessary roles
+ $query = 'GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, UNLIMITED TABLESPACE TO '.$name;
+ $stmt = oci_parse($connection, $query);
+ if (!$stmt) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.'<br />';
+ echo($entry);
+ }
+ $result = oci_execute($stmt);
+ if(!$result) {
+ $entry='DB Error: "'.oci_error($connection).'"<br />';
+ $entry.='Offending command was: '.$query.', name:'.$name.', password:'.$password.'<br />';
+ echo($entry);
+ }
+ }
/**
* create .htaccess files for apache hosts
public static function printGuestPage( $application, $name, $parameters = array() ){
$content = new OC_Template( $application, $name, "guest" );
foreach( $parameters as $key => $value ){
- $content->assign( $key, $value );
- $content->assign( $key, $value,false );
++ $content->assign( $key, $value, false );
}
return $content->printPage();
}
*
* Get a list of all users.
*/
- public static function getUsers(){
- $users=array();
- foreach(self::$_usedBackends as $backend){
- if($backend->implementsActions(OC_USER_BACKEND_GET_USERS)){
- $backendUsers=$backend->getUsers();
- if(is_array($backendUsers)){
- $users=array_merge($users,$backendUsers);
- }
- public static function getUsers($search = '', $limit = -1, $offset = 0) {
++ public static function getUsers($search = '', $limit = null, $offset = null) {
+ $users = array();
+ foreach (self::$_usedBackends as $backend) {
+ $backendUsers = $backend->getUsers($search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
}
}
asort($users);
}
return false;
}
- $query = "INSERT INTO *PREFIX*preferences (`userid`, `appid`, `configkey`, `configvalue`) VALUES(?, ?, ?, ?)";
+
+ /**
+ * disables a user
+ * @param string $userid the user to disable
+ */
+ public static function disableUser($userid){
- $query = "DELETE FROM *PREFIX*preferences WHERE userid = ? AND appid = ? AND configkey = ? AND configvalue = ?";
++ $query = "INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, `configkey`, `configvalue`) VALUES(?, ?, ?, ?)";
+ $query = OC_DB::prepare($query);
+ $query->execute(array($userid, 'core', 'enabled', 'false'));
+ }
+
+ /**
+ * enable a user
+ * @param string $userid
+ */
+ public static function enableUser($userid){
- $query = "SELECT userid FROM *PREFIX*preferences WHERE userid = ? AND appid = ? AND configkey = ? AND configvalue = ?";
++ $query = "DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
+ $query = OC_DB::prepare($query);
+ $query->execute(array($userid, 'core', 'enabled', 'false'));
+ }
+
+ /**
+ * checks if a user is enabled
+ * @param string $userid
+ * @return bool
+ */
+ public static function isEnabled($userid){
++ $query = "SELECT `userid` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
+ $query = OC_DB::prepare($query);
+ $results = $query->execute(array($userid, 'core', 'enabled', 'false'));
+ return $results->numRows() ? false : true;
+ }
/**
* @brief Set cookie value to use in next page load
}else{
$hasher=$this->getHasher();
$hash = $hasher->HashPassword($password.OC_Config::getValue('passwordsalt', ''));
-- $query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
++ $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )' );
$result = $query->execute( array( $uid, $hash));
return $result ? true : false;
*/
public function deleteUser( $uid ){
// Delete user-group-relation
- $query = OC_DB::prepare( "DELETE FROM `*PREFIX*users` WHERE `uid` = ?" );
- $result = $query->execute( array( $uid ));
- $query = OC_DB::prepare( "DELETE FROM `*PREFIX*users` WHERE uid = ?" );
++ $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*users` WHERE uid = ?' );
+ $query->execute( array( $uid ));
return true;
}
if( $this->userExists($uid) ){
$hasher=$this->getHasher();
$hash = $hasher->HashPassword($password.OC_Config::getValue('passwordsalt', ''));
- $query = OC_DB::prepare( "UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?" );
- $result = $query->execute( array( $hash, $uid ));
- $query = OC_DB::prepare( "UPDATE *PREFIX*users SET password = ? WHERE uid = ?" );
++ $query = OC_DB::prepare( 'UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?' );
+ $query->execute( array( $hash, $uid ));
return true;
- }
- else{
+ }else{
return false;
}
}
* returns the user id or false
*/
public function checkPassword( $uid, $password ){
- $query = OC_DB::prepare( "SELECT `uid`, `password` FROM `*PREFIX*users` WHERE `uid` = ?" );
- $query = OC_DB::prepare( "SELECT uid, password FROM *PREFIX*users WHERE uid = ?" );
++ $query = OC_DB::prepare( 'SELECT `uid`, `password` FROM `*PREFIX*users` WHERE `uid` = ?' );
$result = $query->execute( array( $uid));
$row=$result->fetchRow();
*
* Get a list of all users.
*/
- public function getUsers(){
- $query = OC_DB::prepare( "SELECT `uid` FROM `*PREFIX*users`" );
- $result = $query->execute();
-
- $users=array();
- while( $row = $result->fetchRow()){
- $users[] = $row["uid"];
- public function getUsers($search = '', $limit = -1, $offset = 0) {
- if ($limit == -1) {
- $query = OC_DB::prepare('SELECT uid FROM *PREFIX*users WHERE uid LIKE ?');
- } else {
- $query = OC_DB::prepare('SELECT uid FROM *PREFIX*users WHERE uid LIKE ? LIMIT '.$limit.' OFFSET '.$offset);
- }
++ public function getUsers($search = '', $limit = null, $offset = null) {
++ $query = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*users` WHERE `uid` LIKE ? LIMIT',$limit,$offset);
+ $result = $query->execute(array($search.'%'));
+ $users = array();
+ while ($row = $result->fetchRow()) {
+ $users[] = $row['uid'];
}
return $users;
}
* @return boolean
*/
public function userExists($uid){
- $query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE `uid` = ?" );
- $query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE uid = ?" );
++ $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*users` WHERE `uid` = ?' );
$result = $query->execute( array( $uid ));
return $result->numRows() > 0;
// Init owncloud
require_once('../../lib/base.php');
+OCP\JSON::callCheck();
// Check if we are a user
- if( !OC_User::isLoggedIn() || !OC_Group::inGroup( OC_User::getUser(), 'admin' )){
+ if( !OC_User::isLoggedIn() || (!OC_Group::inGroup( OC_User::getUser(), 'admin' ) && !OC_SubAdmin::isSubAdmin(OC_User::getUser()))){
OC_JSON::error(array("data" => array( "message" => "Authentication error" )));
exit();
}