Neuigkeiten:

Privates MODX und LINUX BLOG, User Registrierung ist deaktiviert! Fragen oder Tipps? Bitte per Matrix: @jo42:freiburg.social

Hauptmenü

Neueste Beiträge

#61
CMS / MODX getRandPicture
Letzter Beitrag von Jo - 2016-05-05 | 15:47:19
Snippet Aufruf für Zufallsbilder:

<?php
# V 22.12.003
#
# Beispiel Snippet Aufruf für Zufallsbilder:
# [[!getRandPicture? &url=`images/gallery/bodensee2009` &ext=`jpg`]]
# oder per TV
# [[!getRandPicture? &url=`images/[[*tvRandPicture]]` &ext=`jpg`]]
# <img alt="[[+image_title]]" class="photos" src="[[+image_folder]][[+image_name]]" />
#
# Variablen -Start------------------->
   # Datei-Endung
     
$strExt '.'.$modx->getOption('ext',$scriptProperties,'jpg');
   
# Bilder-Ordner
     
$strURL $modx->getOption('url',$scriptProperties,'images');
     
$folder = (isset($folder))?$folder:$strURL;
     
$imgDir opendir($folder);
   
# Fehler-Bild
     
$defaultImage = (isset($defaultImage))?$defaultImage:$modx->config['base_url'].'images/icons/icon-error.png';
# Variablen -Ende-------------------<

$images = [];
$is_image '';

while (
$file readdir($imgDir))
{
    
# prüfe ob die Datei ein Bild ist
    
$file_type strrchr($file'.');

    if (
$file_type == $strExt){
        
$is_image true;
    }

    
$is_thumb = !strncmp($file'.thumb_'7);
    if (
$file != '.' && $file != '..' && $is_image && !$is_thumb){
        
$images[] = $file;
    }
}
closedir($imgDir);


# Platzhalter
$modx->setPlaceholder('image_folder'$folder.'/');
if (
count($images) > 1)
{
    
srand(( double )microtime()*1000000);
    
$image_name $images[rand(0sizeof($images)-1)];
    
$modx->setPlaceholder('image_name'$image_name);
    
$image_title str_replace('.'.$ext,'',$image_name);
    
$image_title str_replace('_',' ',$image_title);
    
$image_title strtoupper($image_title);
    
$modx->setPlaceholder('image_title'$image_title);
    return;
}

# wenn keine Bilder im Ordner sind
 
$modx->setPlaceholder('image_folder''');
 
$modx->setPlaceholder('image_name'$defaultImage);
 return;
#62
LINUX / fail: starting smb/cifs
Letzter Beitrag von Jo - 2015-12-30 | 20:55:12
Tipp: Fehlermeldung fail: starting smb/cifs file and active directory server beheben

SMB: Server Message Block
CIFS: Common Internet File System

Fast alle Linux-Distributionen enthalten Samba und bieten damit Zugriff auf Dateifreigaben in gemischten Netzwerken. Samba ist eine freie Software-Suite, die es Nicht-Microsoft-Betriebssystemen ermöglicht, Microsoft-Windows-Funktionen wie die Datei- und Druckdienste zu nutzen.
Quelle: wiki.ubuntuusers.de/Samba_Client_cifs

Lösung:
Standardmäßig wird Samba Active Directory und der Domänencontroller-Service zusätzlich zur smbd und nmbd gestartet.
Für Standalone-Server ist das nicht notwendig und der Dienst kann auf manuellen Start gesetzt werden:

echo manual | sudo tee /etc/init/samba-ad-dc.override

#63
LINUX / KDE mit ownCloud oder Google
Letzter Beitrag von Jo - 2015-12-28 | 13:50:02
KDE Synchronisation mit ownCloud
(getestet mit KDE 4.14.2)

Kontact ist ein Paket das die Programme KMail, KOrganizer und KAddressBook usw unter einem Hut vereint.
sudo apt-get install kontact kmail kaddressbook korganizer knotes akregator aspell-de

Die Integration mit ownCloud ist in KDE im Gegensatz zu Thunderbird kein Problem, da WebDav von KDE schon lange nativ unterstützt wird.
Bei Thunderbird werden diverse Add-Ons benötigt, die bei mir noch nie richtig funktioniert haben!
Hinweis: Evolution unterstützt auch nativ WebDav und ist für Gnome.

Backup erstellen:
KMail -> Extras -> KMail-Daten eportieren ... (PIM-Einstellungs-Export)
Damit können alle Daten gesichert und zurückgespielt werden.

Meine eMails sind alle per IMAP eingerichtet, liegen also auf dem Server und als Kopie auf dem PC.
Kontakte und Termine in der eigenen ownCloud werden per Server-Backup automatisch gesichert.
Ausserdem lassen sich Kontakte prima per vCard exportieren oder importieren.
Wenn ein Programm kein WebDav unterstützt können Kontakte per vCard importiert oder exportiert werden.

Kontact alles unter einem Hut

KOrganizer eingerichtet mit CalDav und CardDav



KDE UserBase Wiki: KMail/FAQs Hints and Tips




PS
Google Addressbuch (CardDAV):
https://www.googleapis.com/carddav/v1/principals/MeineEmail@gmail.com/lists/default

Google Kalender (CalDAV):
https://www.google.com/calendar/dav/MeineEmail@gmail.com/events/

#64
LINUX / Roger FRITZ!Box-Router
Letzter Beitrag von Jo - 2015-12-20 | 14:51:50
Das Programm Roger Router ist eine grafische Oberfläche, mit der man Faxe über FRITZ!Box-Router von AVM versenden kann. Zusätzlich kann Roger Router den Anrufmonitor, Anrufbeantworter und Fax-Speicher des Routers abfragen und darstellen.
Quelle Roger Router: tabos.gitlab.io


FritzBox Voraussetzungen:

  • TR-064 muss in der FritzBox aktiviert sein: Heimnetz -> Netzwerk -> Netzwerkeinstellungen: Heimnetzfreigaben -> Zugriff für Anwendungen zulassen
  • CAPI over TCP Funktion in der Fritzbox schon freigeschalten (CAPItoTCP): Telefon und der Eingabe von #96*3* (deaktivieren mit #96*2*)
  • Signalisierung von Anrufen aktivieren (CallMonitor): Telefon und der Eingabe von #96*5* (deaktivieren mit #96*4*)

Update: Aktuellen Roger Router Flatpak Version installieren (flathub.org/apps/details/org.tabos.roger)

Leider scheint es seit Fritz!OS 7.20 und der Labor Firmware 7.19.xxx Probleme zu geben (bei mir seit August 2020):
Seit Version 2.2.1 funktioniert wieder alles, getestet mit Fritz!OS 7.21.
Ab Fritz!OS 7.25 muss obligatorisch der Login-User angegeben werden. Nachträglich könnt ihr den User im keyfile editieren (login-user='xxxxxxxx').

Optional - Entfernung von Altlasten (Ubuntu Systeme): PPA-Quelle z.B. per Synaptic entfernen: Einstellungen-> Paketquellen
dann die alte Version deinstallieren
sudo apt remove --purge roger*
rm -r ~/.local/share/routermanager/
rm -r ~/.cache/routermanager/
dconf reset -f /org/tabos/
sudo apt autoclean; sudo apt clean; sudo apt autoremove;


Flatpak Roger Router unter Ubuntu, Mint oder KDE neon installieren (Manjaro siehe hier Punkt 15)

1) Flatpak installieren (PPA ist nicht notwendig)
sudo apt install flatpak plasma-discover-backend-flatpak

2) Roger Router installieren
flatpak install flathub org.tabos.roger

3) FAX Settings: Kontroller "Internet 2" und Dienst "ISDN"

4) Installation des Fax-Druckers
lpadmin -p Roger-Router-Fax -m drv:///sample.drv/generic.ppd -v socket://localhost:9100/ -E -o PageSize=A4
(Listen: # lpstat -p Roger-Router-Fax -l   /   Löschen: # lpadmin -x Roger-Router-Fax)

Programm starten:
flatpak run org.tabos.roger


Hinweis:

  • Flatpak Update: # flatpak update
  • um ein Fax aus jedem Programm versenden zu können, muss Roger laufen (Dialogfenster zum Versenden öffnet sonst nicht)
  • wenn UPnP in der FRITZ!Box aktiviert ist, kann mit einer Kommandozeile, z.B. "# flatpak run org.tabos.roger -c 05550123456" das Telefon direkt gestartet werden
  • im KDE KAdressBook: Einstellungen -> Adressbuch einrichten -> Telefonnummer anrufen -> Externe Anwendung: # flatpak run org.tabos.roger -c %n
  • Settings bearbeiten: # kate ~/.var/app/org.tabos.roger/config/glib-2.0/settings/keyfile
  • wenn ihr die Telefonliste im Fritz-Router löscht, zeigt Roger Router das Journal immer noch an, mit "# rm ~/.var/app/org.tabos.roger/data/rm/[deinProfilname]/journal.csv" kann die Liste gelöscht werden

Profilangaben und Flatpak-Konfiguration von Roger Router zurücksetzen, diesen Ordner löschen
rm -r ~/.var/app/org.tabos.roger/


Deinstallation
flatpak uninstall org.tabos.roger
(Ort: ~/.local/share/flatpak/app/org.tabos.roger/)




Update 2020: Für Ubuntu gibt es wieder eine PPA (ungetestet):

sudo add-apt-repository ppa:dschaerf/rogerrouter
sudo apt update
sudo apt install roger






ARCHIV (alter Thread!): Roger Router 1.93 per PPA installieren

Roger Router ist bisher kein Bestandteil der offiziellen Paketquellen, kann aber über ein OBS-Repository installiert werden. Nachfolgend die Befehle zum Einrichten und Authentifizieren der Paketquelle am Beispiel von Ubuntu 16.04 / MINT 18 (getestet mit Roger Router 1.93 , MINT 17.3/18 64-Bit und KDE neon):

sudo add-apt-repository 'deb http://download.opensuse.org/repositories/home:/tabos-team:/release/xUbuntu_16.04/ ./'
wget -q http://download.opensuse.org/repositories/home:/tabos-team:/release/xUbuntu_16.04/Release.key -O- | sudo apt-key add -
sudo apt update

(wer Ubuntu 14.04 oder MINT 17 benutzt, ändert ihr den Link auf xUbuntu_14.04)

Benutzergruppe fax zuzuordnen (Neustart notwendig):
sudo addgroup $USER fax

Pakete installieren (wenn mit KDE Wallet):
sudo apt install roger roger-plugins-kwallet roger-plugins-fritzfon dconf-editor dconf-cli
Pakete installieren (wenn mit Gnome Keyring):
sudo apt install roger libroutermanager-plugins-secret gnome-keyring roger-plugins-fritzfon dconf-editor dconf-cli
dconf-editor ist optional = Konfigurations-Editor von Gnome3 (Reset der Einstellungen: # dconf reset -f /org/tabos/)


aufräumen:
sudo apt autoclean; sudo apt clean; sudo apt autoremove;

Nach der Installation kann Roger Router über den Eintrag "Internet -> Roger Router" gestartet werden.

Nachtrag:

  • um ein Fax aus jedem Programm versenden zu können, muss Roger laufen (Dialogfenster zum Versenden öffnet sonst nicht)
  • wenn UPnP in der FRITZ!Box aktiviert ist, kann mit einer Kommandozeile, z.B. "roger -c 05550123456" das Telefon direkt gestartet werden
  • im KDE KAdressBook: Einstellungen -> Adressbuch einrichten -> Telefonnummer anrufen -> Externe Anwendung: roger -c %n
  • in Gnome Evolution könnt ihr ohne Zutun aus dem Adressbuch eine Tel-Nr. anklicken und Roger wird gestartet
  • wenn ihr die Telefonliste im Fritz-Router löscht, zeigt Roger Router das Journal immer noch an. Daher lösche ich dann einfach die csv-Datei: # rm ~/.local/share/routermanager/[USER]/journal.csv

Die gesamten Roger Router Konfiguration zurücksetzen
dconf reset -f /org/tabos/
und diese zwei Ordner löschen
rm -r ~/.local/share/routermanager/
rm -r ~/.cache/routermanager/



btw: wer Probleme mit Multimedia und alten Samba smb1 am FritzNAS hat (erst FRITZ!OS 7.2 unterstützt smb2/3), kann das mit dem KDE-Programm Smb4K versuchen:
sudo apt-get install cifs-utils smb4k
Fritz NAS UNC-Adresse: //RouterIP/fritz.nas




Quellen:
wiki.ubuntuusers.de/Fritzbox/Roger_Router
tabos.org

#65
Apple / Klingelton mit GarageBand erst...
Letzter Beitrag von Jo - 2015-12-14 | 19:12:00
Update 2022-Februar (alte Beschreibung war von 2015)

Erstellung eigener Klingeltöne aus der Musik-Bibliothek oder iClouds Drive direkt am iPhone
(iTunes - GarageBand-Hilfe)

Hinweis: Das funktioniert nicht mit dem Musikstreaming-Dienst von Apple.
*** Getestet mit GarageBand Version 2.3.12 und iOS 15.3.1 ***



Mit Apples Musik-Sampler GarageBand können nicht nur Instrumente aufgenommen werden, es lässt sich damit auch hervorragend eigene Klingeltöne direkt am iPhone erstellen. Diese findet ihr dann in den Einstellungen -> Töne & Haptik -> Klingelton.

ANLEITUNG

Beispiel anhand einer MP3-Datei welche per Browser und iCloud in den Order "iClouds Drive -> mp3" hochgeladen wurde.

1. Starte GarageBand, GarageBand-Verlauf wird angezeigt, tippe rechts oben auf Plus (+):


2. Es erscheint eine Auswahl der Möglichkeiten die es im Ministudio gibt, für den Klingelton brauchen wir den AUDIO-RECORDER:


3. Oben in der Menüleiste auf das dritte Icon für die Spurendarstellung tippen:


4. Im Menü das Metronom deaktivieren, dann in Einstellungen (Zahnrad) tippen:


5. Tap-Tempo auf 120 (BPM) setzen:


6. Tippe rechts oben auf das kleine Plus (+) und stelle die Länge (Takte) des Klingeltons ein:


Länge des Abschnitts: 30 Sekunden sind bei 4/4 Takt genau 15 Takte (4 Schläge in einem Takt ergeben 2 Sekunden für einen Takt):

(Siehe Einstellungen, dort ist 4/4 Takt als Standard eingetragen)

7. Aber wir wollen erst den ganzen Song laden, daher stellen wir das auf Automatsch:


8. Danach auf das vorletzte Icon im Menü tippen, dort können Loops geladen, eigene Dateien oder Musik gesucht und ausgewählt werden:


9. Aus der iCloud muss der Titel erst geladen werden (Durchsuche Objekte in der App "Dateien"), ansonsten könnt ihr euren Musik Ordner auswählen:


10. Datei suchen und auswählen:


11. Einfach antippen, je nach Größe kann der Download etwas dauern:

(Diese Datei wird im Ordner "GarageBand für iOS" auf dem iPhone gespeichert und kann nach dem Erstellen des Klingelton gelöscht werden)

12. Die Musikdatei wird mit dem Finger per Drag&Drop bewegt:

(Antippen & festhalten, dann kann die Datei auf die erste Spur geschoben werden)

13. Dort erscheint der Titel in kompletter Länge, ein Klingelton darf nur 30 Sekunden lang sein. Den Titel mit 2 Finger so zoomen, das die Titelspur ganz auf dem Bildschirm sichtbar ist, dann mit dem Finger in die Spur tippen, es erscheinen links und rechts Greifer, damit lässt sich der Titel kürzen und eine passende Stelle kann ausgesucht werden (Zoomen geht immer mit 2 Finger, Anhören mit dem Play Button).

Anhand des Lineals oben, wird die Taktlänge eingestellt, in dem Fall sind das 15 Takte.
(In Einstellungen kann statt Taktlineal auch ein Zeitlineal aktiviert werden)

14. Jetzt wieder auf das kleine Plus (+) tippen, Automatsch deaktivieren und die Takte auf 15 einstellen,


Dann wird der Song auf 15 Takte angepasst:


15. Oben links im Menü auf dem Pfeil tippen, damit wird der Song als "Mein Song" gespeichert, mit antippen & länger drücken (Kontext-Menü) kann der Name geändert werden:




16. Dann wird der Song per Kontext-Menü geteilt (Teilen):


17. Es gibt 3 Möglichkeiten, Song, Klingelton und Projekt:


Als Klingelton auswählen und exportieren (rechts oben), sollte der Klingelton länger sein als 30 Sekunden, wird dieser automatisch angepasst.

:bounce:  :dance:


Zu simpel und langweilig? Ihr könnt natürlich auch eigene Musik erstellen, siehe YouTube Links:


#66
LINUX / iOS mit Linux
Letzter Beitrag von Jo - 2015-12-12 | 03:09:06
Seit dem iOS 10 Update kann libimobiledevice keine Verbindung mehr zum iPhone herstellen
(update: iOS 11 siehe Thread 2)

Dumm gelaufen?
Ja das gehört ganz klar zu den Nachteilen von LINUX - wobei LINUX dafür nichts kann!  :mad:
iOS ist nun mal ein proprietäres Betriebssystem und das macht es den libimobiledevice Entwickler natürlich nicht leichter.
Ich bin und war noch nie ein Freund bei großen Updates, gleich ein gut laufendes System auf eine höhere Version zu bringen.
In Wirklichkeit sind das heute die beta-Tester...

Das iOS 9 rennt derzeit mit vielen aktuellen Linux-Distributionen "out of the box" ohne Probleme, z.B. mit webdav und libimobiledevice.
Bei einem Upgrade besteht immer die Gefahr das dann was nicht mehr so läuft wie es war. Ich meine nicht die Sicherheitsupdates sondern die großen Releases z.B. iOS 9 auf iOS 10. Das ist mit ein Grund warum ich nur LINUX LTS-Versionen benutze - wenn möglich.

Was kann man tun, damit sowas nicht noch einmal passiert? Benutzt VirtualBox mit Windows und installiert dort das aktuelle iTunes oder macht es wie ich und habt etwas Geduld. Nach ein paar Wochen schreiben diese "iOS-Beta Tester" eventuelle Probleme in den entsprechenden Foren. Vorher würde ich kein großes Update machen. Bald soll iOS 11 kommen -> Finger weg! Ich warte lieber auf 11.x und suche im www ob das mit libimobiledevice und webdav läuft.


LÖSUNG: Es gibt eine PPA für die libimobiledevice mit Unterstützung für iOS 10
*** getestet mit iOS 10.3.2 und MINT 17.3 ***

Ooops, du hast ein Android? Dann kannst du den MTP-Modus aktivieren und das Paket mtpfs installieren.


PROLOG:
Volle Kontrolle des iPhones unter LINUX ohne iTunes und jailbreak? Ja das geht!

Kalender und Kontakte lassen sich gut per WebDAV (CardDAV, CalDAV) synchronisieren, z.B. mit einer eigenen OwnCloud, iCloud, web.de oder GMail. LINUX-Mailprogramme wie Evolution, Thunderbird mit Lightning oder Kontact unterstützen schon lange WebDAV. Backups könnt ihr per idevicebackup2 oder iCloud erstellen, dass ich wegen WebDAV nicht benötige. Macht aber vielleicht Sinn bei einem neuen iPhone, um installierte Apps und Einstellungen zu importieren. Mit dem FileMaster App können Dateien auf das iPhone kopiert werden (siehe unten). Möchtet ihr per FileMaster z.B. Bilder auf PC kopieren, muss dieser erst die Fotos aus dem iPhone Bilderordner importieren. Das ist etwas umständlich, daher bevorzuge ich iFuse um per USB-Kabel an die Bilder zu kommen.

DETAILS:

  • libimobiledevice PPA von Martin Salbaba Softwaredesign
  • libimobiledevice ist eine Bibliothek und beherrscht die nativen USB-Protokolle von Apple
  • iFUSE ist ein Dateisystem-Treiber, der libiphone verwendet, um iPhone und iPod Touch-Geräte ohne jailbreak zu verbinden

WICHTIG:
iFuse kann das Gerät als USB-Laufwerk einbinden, da aber die iTunes-Datenbank des Gerätes von einem einfachen Kopiervorgang nichts mitbekommt und neue Dateien nicht anzeigt, bitte nur zum Anzeigen oder kopieren auf euren PC benutzen!
Bilderordner: ~/[user]/[mount point]/DCIM/
Musikordner: ~/[user]/[mount point]/iTunes_Control/Music/




Achtung: Diese PPA (erste Zeile) nur wenn ihr die libimobiledevice 1.2.0 benötigt (nur MINT 17 und iOS 10)
PPA einbinden, libimobiledevice und ifuse installieren, aufräumen:
sudo add-apt-repository ppa:martin-salbaba/ppa+libimobiledevice
sudo apt-get update
sudo apt-get install libimobiledevice-utils ifuse
sudo apt-get autoclean; sudo apt-get clean; sudo apt-get autoremove

evt. auch per Synaptic Paketverwaltung prüfen ob es Einträge in "Nicht installiert (zurückgebliebene Konfiguration)" gibt und diese dann löschen

Kontrolliert per KUser (wenn ihr KDE benutzt) ob der Benutzer zur Gruppe "fuse" gehört (Benutzereigenschaften oder Group). Einfacher geht das per Terminal. Legt die Gruppe fuse an und fügt den Benutzer zur Gruppe hinzu:

sudo addgroup fuse
sudo adduser $USER fuse
newgrp - fuse

Hinweis: Das beitreten der Gruppe via newgrp ohne Neustart funktioniert nur in diesem Terminal (Shell).
Loggt euch aus- und wieder ein, dann ist man fest in der neuen Gruppe.

Ordner zum mounten anlegen, z.B.:
mkdir ~/iPhone/

testet ob das iPhone erkannt wird:
dmesg | grep ipheth
#[ 2109.944705] ipheth 3-1.6:4.2: Apple iPhone USB Ethernet device attached
#[ 2109.944772] usbcore: registered new interface driver ipheth


iPhone Bilderschirm entsperren!

iPhone verbinden und Host verwalten, dann per ifuse mounten:
idevicepair pair
ifuse ~/iPhone/


iPhone dismounten, dann Verbindung und Host lösen:
fusermount -u ~/iPhone/
idevicepair unpair


Achtung: iPhone immer dismounten bevor das USB-Kabel entfernt wird!
Sonst gehört der gemountete Ordner root und hat chmod = 0 (also keine Berechtigung), dann hilft nur eins:
sudo chmod 0755 ~/iPhone/

Zum einfachen mounten per Mausklick habe ich eine bash-Datei erstellt.
Siehe bash script im Zip-Anhang. Im iPhone-Login müsst ihr "MeinPasswort" durch euer sudo Passwort ersetzen!
Das stellt dann sicher das euer iPhone Ordner immer chmod 0755 hat.





Backup des Geräts mit idevicebackup2:
Bei dieser inkrementellen Datensicherung werden nur die Dateien in die Archivdatei übernommen, die seit dem letzten Backup verändert wurden. Zum Erstellen eines Backups muss zuerst ein Ordner im Homeverzeichnis erstellt werden, z.B.:
mkdir ~/iPhoneBackup
Backup des Geräts erstellen:
idevicebackup2 backup ~/iPhoneBackup
Backup des Geräts wiederherstellen:
idevicebackup2 restore ~/iPhoneBackup




Klingeltöne ohne iTunes ertellen: GarageBand (SCHRITT FÜR SCHRITT ANLEITUNG)




PS: ein guter Dateimanager für iOS ist z.B. der FileMaster, damit könnt ihr ohne iTunes per WLAN auf die schnelle Bilder Musik usw aufs iPhone bringen.
#67
LINUX / htpasswd Verzeichnisschutz
Letzter Beitrag von Jo - 2015-10-28 | 20:35:29
Verzeichnisschutz mit .htaccess und .htpasswd
Quelle: htpasswd - Manage user files for basic authentication

Per Terminal generiert ihr die Passwörter (wenn Apache installiert ist), Syntax:
htpasswd -nb BENUTZERNAME PASSWORT
Ergebnis z.B.:
BENUTZERNAME:$apr1$XjacGGGO$ZJI64nFhwQeLAuz1dLSc9.

Diese Option sollte mit äußerster Vorsicht verwendet werden, da das Passwort eindeutig auf der Kommandozeile sichtbar ist!

Parameter:
-b = Batch-Modus; das Kennwort in einer Befehlszeile
-n = Ergebniss als Standardausgabe statt einer Datei
-m = MD5-Verschlüsselung für Passwörter (standard)
-s = SHA-Verschlüsselung für Passwörter

Solch ein Verzeichnisschutz kann dann z.B. für 3 Benutzer erstellt werden.

1) Name / Passwort: karl1 / bitte1LassMichRein
2) Name / Passwort: karl2 / bitte2LassMichRein
3) Name / Passwort: karl3 / bitte3LassMichRein

Erstellt diese 2 Dateien für ein Verzeichnisschutz:
.htaccess:
AuthType Basic
AuthName "Bitte Zugangsdaten eingeben"
AuthUserFile /homepage/bilder/.htpasswd #absoluten Pfad zur .htpasswd auf dem Server anpassen!!!
Require user karl1


.htpasswd:
karl1:$apr1$Y/imTaQv$9DBV5tyQ9/JokSQDbSUOj1
karl2:$apr1$UNshbZLq$M8CqdQ9CzhaDmQsuJfw4m.
karl3:$apr1$q2daMPR7$JD11zbTdxVsI3RPvIMnds1


#68
CMS / MODX webCounter
Letzter Beitrag von Jo - 2015-10-24 | 14:32:01
Einfacher Besucherzähler ohne DB als Snippet

Anstatt einer Session-ID benutze ich eine anonymisierte User IP damit dieser nur einmal pro Tag gezählt wird.
Wer mehr als 100 IP's pro Tag speichern will, sollte das in einer Datenbank tun.
Je Besucherzähler werden 3 Dateien im /assets Verzeichnis von MODX angelegt.

<?php
# Snippet Aufruf z.B.: [[!webCounter? &cname=`web4Count` &startnum=`4440`]]

$numip '20'# Anzahl der IP-Nummern
$numipRIP 24*60*60# IP-Nummern löschen wenn älter als 1 Tag
$startnum $modx->getOption(startnum,$scriptProperties,1);
$get_countname $modx->getOption('cname',$scriptProperties,'webCount');
$countname $modx->config['base_path'].'assets/'.$get_countname.'.txt';
$ipfile $modx->config['base_path'].'assets/'.$get_countname.'_ip.txt';
$datumstart $modx->config['base_path'].'assets/'.$get_countname.'_datumstart.txt';
$userip $_SERVER['REMOTE_ADDR'];

# IP anonymisieren!
$ipsplit explode("."$userip);
$userip "$ipsplit[0].$ipsplit[1].$ipsplit[2].0";

if(!
file_exists($datumstart)){
    
$fo fopen($datumstart,'w+');
    
fputs($fotime());
    
fclose($fo);
}
if(!
file_exists($countname)){
    
$fo fopen($countname,'w+');
    
fputs($fo$startnum);
    
fclose($fo);
}
if(!
file_exists($ipfile)){
    
$foip fopen($ipfile'w+');
    
fputs($foip$userip.':');
    
fclose($foip);
}

# wenn äter als $numipRIP dann löschen
if(file_exists($datumstart)){
   
$fodatum fopen($datumstart,'r');
   
$datum1 fgets($fodatum11);
   
fclose($fodatum);
}

$datum2 $datum1 $numipRIP;
$datumheute time();

  if(
$datumheute $datum2) {
     
unlink($datumstart);
     if(!
file_exists($datumstart)){
         
$fo fopen($datumstart,'w+');
         
fputs($fotime());
         
fclose($fo);
     }
     
unlink($ipfile);
     if(!
file_exists($ipfile)){
         
$foip fopen($ipfile'w+');
         
# fputs($foip, $userip.':');
         
fclose($foip);
     }
  }

$ipcont fopen($ipfile,'r+');
$ipfile1 fgets($ipcont,2048);
$ipdata explode(':',$ipfile1);

if(
in_array($userip$ipdata)){
    
$anzahl fopen($countname,'r+');
       
$nummer fgets($anzahl,10);
    
fclose($anzahl);
}
else{
    
$num count($ipdata);
    if(
$num <= $numip){
        
fputs($ipcont,$userip.':');
        
fclose($ipcont);
        
$anzahl fopen($countname,'r+');
          
$nummer fgets($anzahl,10);
          
$nummer++;
          
fseek($anzahl,0);
         
fputs($anzahl,$nummer);
        
fclose($anzahl);
    }
    else{
        
$pop array_pop($ipdata);
        
array_unshift($ipdata,$userip);
        
$userip2 implode(':',$ipdata);
        
$ipcont fopen($ipfile,'r+');
        
fputs($ipcont,$userip2);
        
fclose($ipcont);
        
$anzahl fopen($countname,'r+');
         
$nummer fgets($anzahl,10);
          
$nummer++;
          
fseek($anzahl,0);
         
fputs($anzahl,$nummer);
        
fclose($anzahl);
    }
}
return 
$nummer;
#69
CMS / MODX Galerie
Letzter Beitrag von Jo - 2015-10-12 | 23:24:36
Tutorial für eine benutzerfreundliche Galerie mit Bootstrap 3 und blueimp Gallery
*** getestet mit MODX 2.4.x bis 3.0.2 ***

Das schöne an MODX ist, dass sich jede javascript (z.B. jquery) Galerie sich via Chunks und TV's leicht einbauen lässt.

Ziel:
  • Bilder in ein Verzeichnis hochladen und den Pfad dazu in einer TV angeben
  • beim hochladen sollen Bilder die zu groß sind verkleinert werden
  • Text zum Bild wird aus dem Dateinamen erstellt (das "zwingt" ordentliche Dateinamen zu verwenden)

Benötigtes Snippet: pThumb

Vorbedingung: Bootstrap muss eingebunden sein und funktionieren - das gibt es auch als Extras (meines ist manuell eingebunden). Die css und js Dateien von blueimp Gallery müssen im entsprechenden Ordner liegen.

1. Im Template <head> Bereich, die gallery CSS-Links hinter bootstrap.min.css hinzufügen (Pfad und Name müsst ihr natürlich eurer Umgebung anpassen) z.B.:
<link rel="stylesheet" href="assets/templates/bs3/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/templates/bs3/css/blueimp-gallery.min.css">
<link rel="stylesheet" href="assets/templates/bs3/css/bootstrap-image-gallery.min.css">

2. Im Template <body> Bereich, Chunk "bs3Gallery" einfügen und hinter jquery.min.js und bootstrap.min.js die gallery JS-Links hinzufügen (Pfad und Name müsst ihr natürlich eurer Umgebung anpassen). Hinter dem "content" das Snippet "getImagesFolder" einfügen, z.B.:
[[$bs3Gallery]]
<script src="assets/templates/bs3/js/jquery.min.js" type="text/javascript"></script>
<script src="assets/templates/bs3/js/bootstrap.min.js" type="text/javascript"></script>
<script src="assets/templates/bs3/js/jquery.blueimp-gallery.min.js" type="text/javascript"></script>
<script src="assets/templates/bs3/js/bootstrap-image-gallery.min.js" type="text/javascript"></script>
<div class="container">
[[- z.B. $pdoCrumbs]]
<div id="content">[[*content]]
[[!*tvBS3Gallery:notempty=`[[!getImagesFolder? &path=`assets/files/webXYZ/[[*tvBS3Gallery]]` &extensions=`jpg` &tpl=`tplBS3Gallery`]]`]]
</div>
[[- z.B. $Footer]]
</div>

3. Chunk "bs3Gallery"
<div id="blueimp-gallery" class="blueimp-gallery">
    <div class="slides"></div>
    <h3 class="title"> </h3>
    <a class="prev">‹</a>
    <a class="next">›</a>
    <a class="close">×</a>
    <a class="play-pause"></a>
    <ol class="indicator"></ol>
    <div class="modal fade">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" aria-hidden="true">×</button>
                    <h4 class="modal-title"> </h4>
                </div>
                <div class="modal-body next"></div>
                <div class="modal-footer">
<button type="button" class="btn btn-default pull-left prev"><i class="glyphicon glyphicon-chevron-left"></i>Zurück</button>
<button type="button" class="btn btn-default play-pause">Slideshow</button>
<button type="button" class="btn btn-default next">Vor<i class="glyphicon glyphicon-chevron-right"></i></button>
                </div>
            </div>
        </div>
    </div>
</div>

4. Template Chunk "tplBS3Gallery"
<a data-gallery="gallery" class="img-thumbnail" title="[[+filename:stripGalleryTitle]]" href="[[+path]][[+filename]]"><img style="margin: 3px;" src="[[+path:cat=`[[+filename]]`:phpthumbof=`w=120&h=120&zc=1`]]" alt="[[+filename]]" title="klick für großes Bild" /></a>
5. eine TV "tvBS3Gallery" anlegen:
  • Input Type "Text"
  • Description "Galerie Verzeichnis (Pfad zu den Bildern ohne / am Anfang und Ende!), z.B.: 2015/ostern"
  • Allow Blank "YES", Max Length "100", Min Length "4"

6. Snippet "getImagesFolder"
<?php
// e.g. [[!getImagesFolder? &path=`path/to/images` &extensions=`jpg` &tpl=`colorboxTpl` &class=`group1` &sort=`desc`]]
# V 22.12.003

$path trim($modx->getOption('path'$scriptProperties''), '/').'/';
$class $modx->getOption('class'$scriptProperties"");
$sort $modx->getOption('sort'$scriptProperties"asc");
$extensions explode(','str_replace(' '''$modx->getOption('extensions'$scriptProperties"jpg,png")));
$tpl $modx->getOption('tpl'$scriptProperties'<img src="[[+path]][[+filename]]" width="[[+width]]" height="[[+height]]" alt="[[+filename]]" /><br />'.PHP_EOL);
 
if ((
$path === '') || !is_dir($path))
    return;

$output '';
$count 0;
$files = array();
$fields = array();
$fields['path'] = $path;
$fields['class'] = $class;

if (!(
$handle opendir($path)))
    return 
"Error: Unable to open directrory '$path'!<br />".PHP_EOL;

while((
$file readdir($handle)) !== false) {
    if (
is_file($path.$file) && (($pos strrpos($file".")) !== false) && in_array(substr($file$pos 1), $extensions))
        
$files[] = $file;
}
closedir($handle);

if (
is_array($files))
{
  if ((
$sort strtolower(trim($sort))) === "asc")
      
sort($files);
  elseif (
$sort === "desc")
      
rsort($files);

  foreach (
$files as $file) {
     list(
$fields['width'], $fields['height']) = getimagesize($path.$file);
     
$fields['filename'] = $file;
     
$fields['count'] = ++$count;
     
$chunk $modx->getChunk($tpl$fields);
     if (!
strlen($chunk)) {
         
$new_tpl $modx->newObject('modChunk');
         
$new_tpl->setCacheable(false);
         
$new_tpl->setContent($tpl);
         
$chunk $new_tpl->process($fields);
     }
     
$output .= $chunk;
  }
}

return 
$output;

7. Snippet "stripGalleryTitle"
<?php
$exts 
= !empty($options) ? explode(','$options) : array('gif','png','jpeg','jpg');
$exts array_map('strtolower'$exts);
 
$extPos strrpos($input'.');
if (
$extPos !== false && in_array(substr($input$extPos 1), $exts)) {
    
$input substr($input0$extPos);
}
 
$strSearch = array('Ae''Oe''Ue''ae''oe''ue');
$strReplace = array('Ä''Ö''Ü''Ä''Ö''Ü');
$input str_replace($strSearch$strReplace$input);
 
$input str_replace('_',' ',$input);
$input strtoupper($input);
#$input = ucwords(strtolower($input));
 
#Besonderheiten
$strSearch = array("BRAÜREI""BAÜR");
$strReplace = array("BRAUEREI""BAUER");
$input str_replace($strSearch$strReplace$input);
 
return 
$input;

8. Plugin cleanUpload


PS: Für jeden User eine eigene Media Sources? Link


#70
CMS / modxTalks
Letzter Beitrag von Jo - 2015-09-24 | 12:31:53
modxTalks 1.0.4 funktioniert mit MODX Revolution 2.4.1
modxTalks ist ein Kommentar System mit Echtzeit-Features (Ajax-Anwendung)

Siehe: Extras modxTalks
Link zu GitHub: Transport Packages modxTalks 1.0.4




modxTalks funktioniert, hat aber leider Fehler im Error Log:

1) Error Log: Table 'modx.modx_modxtalks_mails' doesn't exist
Lösung (Quelle) per phpMyAdmin die fehlende Tabelle einfügen:
CREATE TABLE IF NOT EXISTS `modx_modxtalks_mails` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;


dann kommt dieser Fehler im Error Log:
(WARN @ /www/htdocs/xxxxxx/modx/core/components/modxtalks/mailer.php) `114` was requested but no alias was located.
(INFO @ /www/htdocs/xxxxxx/modx/core/components/modxtalks/mailer.php) Removed modxTalksMails instance with primary key 10

dafür habe ich noch keine Lösung gefunden  :confused:


2) Im Plugin MODXTalksPlugin fehlt das System Event "OnModxTalksCommentAfterRemove"?


3) Kleine Schönheitsfehler

3a) /core/components/modxtalks/model/modxtalks/modxtalks.class
Die Zeile
"fixed" => "<a href='javascript:BBCode.fixed(\"$id\");void(0)' title='" . $this->modx->lexicon('modxtalks.image') . "' class='bbcode-fixed'><span>" . $this->modx->lexicon('modxtalks.fixed') . "</span></a>",
in
"fixed" => "<a href='javascript:BBCode.fixed(\"$id\");void(0)' title='" . $this->modx->lexicon('modxtalks.fixed') . "' class='bbcode-fixed'><span>" . $this->modx->lexicon('modxtalks.fixed') . "</span></a>",
ändern (fixed anstatt image).

3b) /assets/components/modxtalks/css/web/bbcode/bbcode.css
Die Zeile
[class*=bbcode-] span {text-indent:-3999px; width:12px; height:12px; margin:4px; display:inline-block; background-image:url(formattingIcons.png)}
in
[class*=bbcode-] span {text-indent:-3999px; width:12px; height:12px; padding:0 12px 0 12px; display:inline-block; background-image:url(formattingIcons.png)}
ändern.

Wer kann weiterhelfen? Link zum MODX Forum


Nachtrag 2015-09-05: Punkt 1 und 2 hat Susan Ottwell auf GitHub gelöst. Bleibt noch der Fehler mit mailer.php