summaryrefslogtreecommitdiffstats
BranchCommit messageAuthorAge
masterFix a typo in 09_IM_mageia.xcf (s/feedbak/feedback)daviddavid3 days
user/jibz/aarch64try: add module for pinebook-proJybz3 months
user/bcornec/fixntpFix remaining ntp package reference replaced by ntpsecBruno Cornec4 months
distro/mga918.66Martin Whitaker3 years
user/pterjan/arm64fooPascal Terjan3 years
distro/mga8drakxtools/stage2: 18.45: update NEWSThomas Backlund5 years
distro/mga718.21.1Thomas Backlund7 years
distro/mga617.88.3Martin Whitaker8 years
topic/extlinuxbootloader: add cma=256M@512M for Raspberry Pi DRM/VC4Olivier Blin8 years
topic/switching_to_dnfperl-install/pkgs.pm: Port 'urpme' call to 'dnf remove' callNeal Gompa8 years
distro/mga5Fix the display of the clock in drakclock (mga#11776)Frédéric Buclin9 years
user/ennael/mga6- Add 60-block.rules in the installer (mga#20074)Nicolas Lécureuil9 years
user/martinw/mga6Always tell the kernel about partition table changes when running the classic...Martin Whitaker9 years
user/animtim/designWorknew icons for harddrake categoriesTimothée Giet10 years
distro/mga4fix moving fonts (mga#16074)Thierry Vignaud11 years
topic/bug-13680make_boot_img: Avoid gfxboot install string for chain.c32Erwan Velu11 years
user/erwan/bug-13680make_boot_img: Avoid gfxboot install string for chain.c32Erwan Velu11 years
topic/efisync with codeThierry Vignaud12 years
distro/mga3Slovenian translation updatedfilip12 years
user/colin/rescue-systemdimages: Pass audit=0 to the rescue system.Colin Guthrie12 years
distro/mga2SVN_SILENT Ukrainian translation updateYuri Chornoivan13 years
distro/mga1Ukrainian translation updateYuri Chornoivan13 years
distro/mes5-2.6.33Revert as it breaks auto_instNicolas Lécureuil14 years
distro/mes6fix unused-but-set-variableAntoine Ginies15 years
distro/mes5fix installing from hard drive on cciss (#57973)Antoine Ginies15 years
distro/mdv2009.0increase versionPascal Terjan16 years
distro/mdv2010.0- detect_devices:Olivier Blin16 years
distro/mdv2008.0run_program: set XAUTHORITY and HOME for the user we will drop privileges toPascal Terjan16 years
distro/mdv2008.1run_program: set XAUTHORITY and HOME for the user we will drop privileges toPascal Terjan16 years
distro/mdv2009.1run_program: set XAUTHORITY and HOME for the user we will drop privileges toPascal Terjan16 years
topic/switching_to_urpmi(rpmDbOpen) make it more readableThierry Vignaud17 years
topic/before_matchbox_wm2009.0 beta 1 logoThierry Vignaud18 years
topic/MDK-2006_0-updateAdd stex and e1000_ngPascal Terjan18 years
distro/mdv2007.1- fix range max value >2TB when creating a partition (useful for LVs >2TB)Pascal Rigaux19 years
topic/mlcd4copy 2007.1 as mlcd4 branch (for drakauth changes)Olivier Blin19 years
topic/MDK-10-updateBetter (and fix) SMP detection, aka. also check for populated & enabled CPUGwenolé Beauchesne20 years
topic/MDK-10_2-updatepackage lsb is requiring many locales though we don't want it to be installedPascal Rigaux20 years
topic/MDK-10_1-updateFix mis-sorted progress barsStew Benedict21 years
topic/aThis commit was manufactured by cvs2svn to create branch 'a'.Mystery Man22 years
topic/mandrakesoftThis commit was manufactured by cvs2svn to create branch 'mandrakesoft'.Mystery Man22 years
topic/MDK92-branchworkaround anthil bug #369Thierry Vignaud22 years
topic/Corpo_2_1Corporate Server 2.1.1 releaseNicolas Planel23 years
topic/KA9_0Removing sundanceErwan Velu23 years
topic/R9_0-64bit-branchno imm/ppa on ia64Gwenolé Beauchesne23 years
topic/MDKC_1_0This commit was manufactured by cvs2svn to create branch 'MDKC_1_0'.Mystery Man23 years
topic/R9_1_HP-branchThis commit was manufactured by cvs2svn to create branchMystery Man23 years
topic/x86_64-branchMore xf86 modules for x86-64Gwenolé Beauchesne23 years
topic/gdk-pixbuf-0-branch- lots of cleanupsThierry Vignaud24 years
topic/ia64-8_1- Don't forget to link the initrd to the real image in /boot/efi/ tooGwenolé Beauchesne24 years
topic/PCMCIA_CS_DISTROThis commit was manufactured by cvs2svn to create branchMystery Man24 years
topic/v_webmin_0_87This commit was manufactured by cvs2svn to create branchMystery Man25 years
topic/gi-ppcThis commit was manufactured by cvs2svn to create branch 'gi-ppc'.Mystery Man25 years
topic/rp-pppoeThis commit was manufactured by cvs2svn to create branch 'rp-pppoe'.Mystery Man25 years
topic/pppThis commit was manufactured by cvs2svn to create branch 'ppp'.Mystery Man25 years
topic/dietlibcThis commit was manufactured by cvs2svn to create branch 'dietlibc'.Mystery Man25 years
topic/firewallreadded passwd. Must verify that it's secure vs msec.damien25 years
topic/unlabeled-1.1.1branch to build the firewall install.damien25 years
 
TagDownloadAuthorAge
18.79drakx-18.79.tar  drakx-18.79.tar.gz  drakx-18.79.tar.bz2  drakx-18.79.tar.xz  drakx-18.79.zip  Martin Whitaker8 days
18.78drakx-18.78.tar  drakx-18.78.tar.gz  drakx-18.78.tar.bz2  drakx-18.78.tar.xz  drakx-18.78.zip  Martin Whitaker3 weeks
18.77drakx-18.77.tar  drakx-18.77.tar.gz  drakx-18.77.tar.bz2  drakx-18.77.tar.xz  drakx-18.77.zip  Martin Whitaker3 weeks
18.76drakx-18.76.tar  drakx-18.76.tar.gz  drakx-18.76.tar.bz2  drakx-18.76.tar.xz  drakx-18.76.zip  Giuseppe Ghibò8 weeks
18.75drakx-18.75.tar  drakx-18.75.tar.gz  drakx-18.75.tar.bz2  drakx-18.75.tar.xz  drakx-18.75.zip  Giuseppe Ghibò3 months
18.74drakx-18.74.tar  drakx-18.74.tar.gz  drakx-18.74.tar.bz2  drakx-18.74.tar.xz  drakx-18.74.zip  Martin Whitaker3 months
drakx-installer-binaries-2.64drakx-installer-binaries-2.64.tar  drakx-installer-binaries-2.64.tar.gz  drakx-installer-binaries-2.64.tar.bz2  drakx-installer-binaries-2.64.tar.xz  drakx-installer-binaries-2.64.zip  Martin Whitaker3 months
18.73drakx-18.73.tar  drakx-18.73.tar.gz  drakx-18.73.tar.bz2  drakx-18.73.tar.xz  drakx-18.73.zip  Martin Whitaker4 months
18.72drakx-18.72.tar  drakx-18.72.tar.gz  drakx-18.72.tar.bz2  drakx-18.72.tar.xz  drakx-18.72.zip  Martin Whitaker4 months
18.71drakx-18.71.tar  drakx-18.71.tar.gz  drakx-18.71.tar.bz2  drakx-18.71.tar.xz  drakx-18.71.zip  Martin Whitaker4 months
drakx-installer-binaries-2.63drakx-installer-binaries-2.63.tar  drakx-installer-binaries-2.63.tar.gz  drakx-installer-binaries-2.63.tar.bz2  drakx-installer-binaries-2.63.tar.xz  drakx-installer-binaries-2.63.zip  Martin Whitaker5 months
18.70drakx-18.70.tar  drakx-18.70.tar.gz  drakx-18.70.tar.bz2  drakx-18.70.tar.xz  drakx-18.70.zip  Martin Whitaker5 months
drakx-installer-images-2.94drakx-installer-images-2.94.tar  drakx-installer-images-2.94.tar.gz  drakx-installer-images-2.94.tar.bz2  drakx-installer-images-2.94.tar.xz  drakx-installer-images-2.94.zip  Martin Whitaker6 months
drakx-installer-images-2.93drakx-installer-images-2.93.tar  drakx-installer-images-2.93.tar.gz  drakx-installer-images-2.93.tar.bz2  drakx-installer-images-2.93.tar.xz  drakx-installer-images-2.93.zip  Jani Välimaa7 months
drakx-installer-rescue-1.68drakx-installer-rescue-1.68.tar  drakx-installer-rescue-1.68.tar.gz  drakx-installer-rescue-1.68.tar.bz2  drakx-installer-rescue-1.68.tar.xz  drakx-installer-rescue-1.68.zip  Jani Välimaa7 months
drakx-installer-images-2.92drakx-installer-images-2.92.tar  drakx-installer-images-2.92.tar.gz  drakx-installer-images-2.92.tar.bz2  drakx-installer-images-2.92.tar.xz  drakx-installer-images-2.92.zip  Jani Välimaa7 months
18.69drakx-18.69.tar  drakx-18.69.tar.gz  drakx-18.69.tar.bz2  drakx-18.69.tar.xz  drakx-18.69.zip  daviddavid11 months
18.68drakx-18.68.tar  drakx-18.68.tar.gz  drakx-18.68.tar.bz2  drakx-18.68.tar.xz  drakx-18.68.zip  Jani Välimaa2 years
18.67drakx-18.67.tar  drakx-18.67.tar.gz  drakx-18.67.tar.bz2  drakx-18.67.tar.xz  drakx-18.67.zip  Dan Fandrich2 years
drakx-installer-images-2.91drakx-installer-images-2.91.tar  drakx-installer-images-2.91.tar.gz  drakx-installer-images-2.91.tar.bz2  drakx-installer-images-2.91.tar.xz  drakx-installer-images-2.91.zip  Thomas Backlund3 years
18.66drakx-18.66.tar  drakx-18.66.tar.gz  drakx-18.66.tar.bz2  drakx-18.66.tar.xz  drakx-18.66.zip  Martin Whitaker3 years
2.90drakx-2.90.tar  drakx-2.90.tar.gz  drakx-2.90.tar.bz2  drakx-2.90.tar.xz  drakx-2.90.zip  Thomas Backlund3 years
18.64drakx-18.64.tar  drakx-18.64.tar.gz  drakx-18.64.tar.bz2  drakx-18.64.tar.xz  drakx-18.64.zip  Martin Whitaker3 years
18.63drakx-18.63.tar  drakx-18.63.tar.gz  drakx-18.63.tar.bz2  drakx-18.63.tar.xz  drakx-18.63.zip  Giuseppe Ghibò3 years
1.67drakx-1.67.tar  drakx-1.67.tar.gz  drakx-1.67.tar.bz2  drakx-1.67.tar.xz  drakx-1.67.zip  Martin Whitaker3 years
18.62drakx-18.62.tar  drakx-18.62.tar.gz  drakx-18.62.tar.bz2  drakx-18.62.tar.xz  drakx-18.62.zip  Martin Whitaker3 years
18.61drakx-18.61.tar  drakx-18.61.tar.gz  drakx-18.61.tar.bz2  drakx-18.61.tar.xz  drakx-18.61.zip  Martin Whitaker3 years
18.60drakx-18.60.tar  drakx-18.60.tar.gz  drakx-18.60.tar.bz2  drakx-18.60.tar.xz  drakx-18.60.zip  Martin Whitaker3 years
18.59drakx-18.59.tar  drakx-18.59.tar.gz  drakx-18.59.tar.bz2  drakx-18.59.tar.xz  drakx-18.59.zip  Giuseppe Ghibò3 years
18.58drakx-18.58.tar  drakx-18.58.tar.gz  drakx-18.58.tar.bz2  drakx-18.58.tar.xz  drakx-18.58.zip  Giuseppe Ghibò3 years
18.57drakx-18.57.tar  drakx-18.57.tar.gz  drakx-18.57.tar.bz2  drakx-18.57.tar.xz  drakx-18.57.zip  Martin Whitaker3 years
18.56drakx-18.56.tar  drakx-18.56.tar.gz  drakx-18.56.tar.bz2  drakx-18.56.tar.xz  drakx-18.56.zip  Thomas Backlund3 years
drakx-installer-images-2.88drakx-installer-images-2.88.tar  drakx-installer-images-2.88.tar.gz  drakx-installer-images-2.88.tar.bz2  drakx-installer-images-2.88.tar.xz  drakx-installer-images-2.88.zip  Thomas Backlund3 years
drakx-installer-binaries-2.60drakx-installer-binaries-2.60.tar  drakx-installer-binaries-2.60.tar.gz  drakx-installer-binaries-2.60.tar.bz2  drakx-installer-binaries-2.60.tar.xz  drakx-installer-binaries-2.60.zip  Thomas Backlund3 years
18.55drakx-18.55.tar  drakx-18.55.tar.gz  drakx-18.55.tar.bz2  drakx-18.55.tar.xz  drakx-18.55.zip  Pascal Terjan3 years
18.54drakx-18.54.tar  drakx-18.54.tar.gz  drakx-18.54.tar.bz2  drakx-18.54.tar.xz  drakx-18.54.zip  Martin Whitaker3 years
18.53drakx-18.53.tar  drakx-18.53.tar.gz  drakx-18.53.tar.bz2  drakx-18.53.tar.xz  drakx-18.53.zip  Martin Whitaker3 years
18.52drakx-18.52.tar  drakx-18.52.tar.gz  drakx-18.52.tar.bz2  drakx-18.52.tar.xz  drakx-18.52.zip  Martin Whitaker3 years
2.87drakx-2.87.tar  drakx-2.87.tar.gz  drakx-2.87.tar.bz2  drakx-2.87.tar.xz  drakx-2.87.zip  Martin Whitaker4 years
18.51drakx-18.51.tar  drakx-18.51.tar.gz  drakx-18.51.tar.bz2  drakx-18.51.tar.xz  drakx-18.51.zip  Martin Whitaker4 years
2.86drakx-2.86.tar  drakx-2.86.tar.gz  drakx-2.86.tar.bz2  drakx-2.86.tar.xz  drakx-2.86.zip  Martin Whitaker4 years
18.50drakx-18.50.tar  drakx-18.50.tar.gz  drakx-18.50.tar.bz2  drakx-18.50.tar.xz  drakx-18.50.zip  Martin Whitaker4 years
18.48drakx-18.48.tar  drakx-18.48.tar.gz  drakx-18.48.tar.bz2  drakx-18.48.tar.xz  drakx-18.48.zip  Thierry Vignaud4 years
2.59drakx-2.59.tar  drakx-2.59.tar.gz  drakx-2.59.tar.bz2  drakx-2.59.tar.xz  drakx-2.59.zip  Thierry Vignaud4 years
2.57drakx-2.57.tar  drakx-2.57.tar.gz  drakx-2.57.tar.bz2  drakx-2.57.tar.xz  drakx-2.57.zip  Thierry Vignaud4 years
18.47drakx-18.47.tar  drakx-18.47.tar.gz  drakx-18.47.tar.bz2  drakx-18.47.tar.xz  drakx-18.47.zip  Thierry Vignaud5 years
18.46drakx-18.46.tar  drakx-18.46.tar.gz  drakx-18.46.tar.bz2  drakx-18.46.tar.xz  drakx-18.46.zip  Thierry Vignaud5 years
2.83drakx-2.83.tar  drakx-2.83.tar.gz  drakx-2.83.tar.bz2  drakx-2.83.tar.xz  drakx-2.83.zip  Thomas Backlund5 years
18.45drakx-18.45.tar  drakx-18.45.tar.gz  drakx-18.45.tar.bz2  drakx-18.45.tar.xz  drakx-18.45.zip  Thomas Backlund5 years
2.56drakx-2.56.tar  drakx-2.56.tar.gz  drakx-2.56.tar.bz2  drakx-2.56.tar.xz  drakx-2.56.zip  Thomas Backlund5 years
18.44drakx-18.44.tar  drakx-18.44.tar.gz  drakx-18.44.tar.bz2  drakx-18.44.tar.xz  drakx-18.44.zip  Donald Stewart5 years
2.82drakx-2.82.tar  drakx-2.82.tar.gz  drakx-2.82.tar.bz2  drakx-2.82.tar.xz  drakx-2.82.zip  Thomas Backlund5 years
18.43drakx-18.43.tar  drakx-18.43.tar.gz  drakx-18.43.tar.bz2  drakx-18.43.tar.xz  drakx-18.43.zip  Martin Whitaker5 years
18.42drakx-18.42.tar  drakx-18.42.tar.gz  drakx-18.42.tar.bz2  drakx-18.42.tar.xz  drakx-18.42.zip  Martin Whitaker5 years
18.40drakx-18.40.tar  drakx-18.40.tar.gz  drakx-18.40.tar.bz2  drakx-18.40.tar.xz  drakx-18.40.zip  Martin Whitaker5 years
2.81drakx-2.81.tar  drakx-2.81.tar.gz  drakx-2.81.tar.bz2  drakx-2.81.tar.xz  drakx-2.81.zip  Thomas Backlund5 years
2.55drakx-2.55.tar  drakx-2.55.tar.gz  drakx-2.55.tar.bz2  drakx-2.55.tar.xz  drakx-2.55.zip  Thomas Backlund5 years
18.39drakx-18.39.tar  drakx-18.39.tar.gz  drakx-18.39.tar.bz2  drakx-18.39.tar.xz  drakx-18.39.zip  Nicolas Lécureuil5 years
18.38drakx-18.38.tar  drakx-18.38.tar.gz  drakx-18.38.tar.bz2  drakx-18.38.tar.xz  drakx-18.38.zip  Thierry Vignaud5 years
18.37drakx-18.37.tar  drakx-18.37.tar.gz  drakx-18.37.tar.bz2  drakx-18.37.tar.xz  drakx-18.37.zip  Thierry Vignaud5 years
2.78drakx-2.78.tar  drakx-2.78.tar.gz  drakx-2.78.tar.bz2  drakx-2.78.tar.xz  drakx-2.78.zip  Martin Whitaker5 years
2.77drakx-2.77.tar  drakx-2.77.tar.gz  drakx-2.77.tar.bz2  drakx-2.77.tar.xz  drakx-2.77.zip  Martin Whitaker5 years
2.76drakx-2.76.tar  drakx-2.76.tar.gz  drakx-2.76.tar.bz2  drakx-2.76.tar.xz  drakx-2.76.zip  Martin Whitaker5 years
2.50drakx-2.50.tar  drakx-2.50.tar.gz  drakx-2.50.tar.bz2  drakx-2.50.tar.xz  drakx-2.50.zip  Martin Whitaker5 years
18.36drakx-18.36.tar  drakx-18.36.tar.gz  drakx-18.36.tar.bz2  drakx-18.36.tar.xz  drakx-18.36.zip  Thierry Vignaud5 years
18.35drakx-18.35.tar  drakx-18.35.tar.gz  drakx-18.35.tar.bz2  drakx-18.35.tar.xz  drakx-18.35.zip  Thierry Vignaud5 years
18.34drakx-18.34.tar  drakx-18.34.tar.gz  drakx-18.34.tar.bz2  drakx-18.34.tar.xz  drakx-18.34.zip  Thierry Vignaud6 years
18.33drakx-18.33.tar  drakx-18.33.tar.gz  drakx-18.33.tar.bz2  drakx-18.33.tar.xz  drakx-18.33.zip  Thierry Vignaud6 years
18.32drakx-18.32.tar  drakx-18.32.tar.gz  drakx-18.32.tar.bz2  drakx-18.32.tar.xz  drakx-18.32.zip  Martin Whitaker6 years
18.31drakx-18.31.tar  drakx-18.31.tar.gz  drakx-18.31.tar.bz2  drakx-18.31.tar.xz  drakx-18.31.zip  Martin Whitaker6 years
1.65drakx-1.65.tar  drakx-1.65.tar.gz  drakx-1.65.tar.bz2  drakx-1.65.tar.xz  drakx-1.65.zip  Thierry Vignaud6 years
18.30drakx-18.30.tar  drakx-18.30.tar.gz  drakx-18.30.tar.bz2  drakx-18.30.tar.xz  drakx-18.30.zip  Martin Whitaker6 years
18.29drakx-18.29.tar  drakx-18.29.tar.gz  drakx-18.29.tar.bz2  drakx-18.29.tar.xz  drakx-18.29.zip  Martin Whitaker6 years
18.28drakx-18.28.tar  drakx-18.28.tar.gz  drakx-18.28.tar.bz2  drakx-18.28.tar.xz  drakx-18.28.zip  Martin Whitaker6 years
18.27.1drakx-18.27.1.tar  drakx-18.27.1.tar.gz  drakx-18.27.1.tar.bz2  drakx-18.27.1.tar.xz  drakx-18.27.1.zip  Thomas Backlund6 years
18.27drakx-18.27.tar  drakx-18.27.tar.gz  drakx-18.27.tar.bz2  drakx-18.27.tar.xz  drakx-18.27.zip  Thierry Vignaud6 years
1.64drakx-1.64.tar  drakx-1.64.tar.gz  drakx-1.64.tar.bz2  drakx-1.64.tar.xz  drakx-1.64.zip  Thierry Vignaud6 years
18.26drakx-18.26.tar  drakx-18.26.tar.gz  drakx-18.26.tar.bz2  drakx-18.26.tar.xz  drakx-18.26.zip  Thierry Vignaud6 years
1.63drakx-1.63.tar  drakx-1.63.tar.gz  drakx-1.63.tar.bz2  drakx-1.63.tar.xz  drakx-1.63.zip  Thierry Vignaud6 years
18.25drakx-18.25.tar  drakx-18.25.tar.gz  drakx-18.25.tar.bz2  drakx-18.25.tar.xz  drakx-18.25.zip  Thierry Vignaud6 years
18.24drakx-18.24.tar  drakx-18.24.tar.gz  drakx-18.24.tar.bz2  drakx-18.24.tar.xz  drakx-18.24.zip  Martin Whitaker6 years
18.23drakx-18.23.tar  drakx-18.23.tar.gz  drakx-18.23.tar.bz2  drakx-18.23.tar.xz  drakx-18.23.zip  Thierry Vignaud6 years
2.42drakx-2.42.tar  drakx-2.42.tar.gz  drakx-2.42.tar.bz2  drakx-2.42.tar.xz  drakx-2.42.zip  Thomas Backlund6 years
2.69drakx-2.69.tar  drakx-2.69.tar.gz  drakx-2.69.tar.bz2  drakx-2.69.tar.xz  drakx-2.69.zip  Thomas Backlund6 years
18.22drakx-18.22.tar  drakx-18.22.tar.gz  drakx-18.22.tar.bz2  drakx-18.22.tar.xz  drakx-18.22.zip  Thierry Vignaud7 years
2.67drakx-2.67.tar  drakx-2.67.tar.gz  drakx-2.67.tar.bz2  drakx-2.67.tar.xz  drakx-2.67.zip  Thomas Backlund7 years
1.62drakx-1.62.tar  drakx-1.62.tar.gz  drakx-1.62.tar.bz2  drakx-1.62.tar.xz  drakx-1.62.zip  Thomas Backlund7 years
18.20drakx-18.20.tar  drakx-18.20.tar.gz  drakx-18.20.tar.bz2  drakx-18.20.tar.xz  drakx-18.20.zip  Thomas Backlund7 years
2.66drakx-2.66.tar  drakx-2.66.tar.gz  drakx-2.66.tar.bz2  drakx-2.66.tar.xz  drakx-2.66.zip  Thomas Backlund7 years
2.40drakx-2.40.tar  drakx-2.40.tar.gz  drakx-2.40.tar.bz2  drakx-2.40.tar.xz  drakx-2.40.zip  Thomas Backlund7 years
2.65drakx-2.65.tar  drakx-2.65.tar.gz  drakx-2.65.tar.bz2  drakx-2.65.tar.xz  drakx-2.65.zip  Thomas Backlund7 years
2.64drakx-2.64.tar  drakx-2.64.tar.gz  drakx-2.64.tar.bz2  drakx-2.64.tar.xz  drakx-2.64.zip  Martin Whitaker7 years
2.63drakx-2.63.tar  drakx-2.63.tar.gz  drakx-2.63.tar.bz2  drakx-2.63.tar.xz  drakx-2.63.zip  Martin Whitaker7 years
2.62drakx-2.62.tar  drakx-2.62.tar.gz  drakx-2.62.tar.bz2  drakx-2.62.tar.xz  drakx-2.62.zip  Martin Whitaker7 years
18.19drakx-18.19.tar  drakx-18.19.tar.gz  drakx-18.19.tar.bz2  drakx-18.19.tar.xz  drakx-18.19.zip  Martin Whitaker7 years
2.61drakx-2.61.tar  drakx-2.61.tar.gz  drakx-2.61.tar.bz2  drakx-2.61.tar.xz  drakx-2.61.zip  Martin Whitaker7 years
18.17drakx-18.17.tar  drakx-18.17.tar.gz  drakx-18.17.tar.bz2  drakx-18.17.tar.xz  drakx-18.17.zip  Jani Välimaa7 years
1.61drakx-1.61.tar  drakx-1.61.tar.gz  drakx-1.61.tar.bz2  drakx-1.61.tar.xz  drakx-1.61.zip  Thomas Backlund7 years
18.16drakx-18.16.tar  drakx-18.16.tar.gz  drakx-18.16.tar.bz2  drakx-18.16.tar.xz  drakx-18.16.zip  Thomas Backlund7 years
2.60drakx-2.60.tar  drakx-2.60.tar.gz  drakx-2.60.tar.bz2  drakx-2.60.tar.xz  drakx-2.60.zip  Thomas Backlund7 years
2.39drakx-2.39.tar  drakx-2.39.tar.gz  drakx-2.39.tar.bz2  drakx-2.39.tar.xz  drakx-2.39.zip  Thomas Backlund7 years
18.15drakx-18.15.tar  drakx-18.15.tar.gz  drakx-18.15.tar.bz2  drakx-18.15.tar.xz  drakx-18.15.zip  Thierry Vignaud7 years
18.14drakx-18.14.tar  drakx-18.14.tar.gz  drakx-18.14.tar.bz2  drakx-18.14.tar.xz  drakx-18.14.zip  Thierry Vignaud7 years
18.13drakx-18.13.tar  drakx-18.13.tar.gz  drakx-18.13.tar.bz2  drakx-18.13.tar.xz  drakx-18.13.zip  Martin Whitaker7 years
2.58drakx-2.58.tar  drakx-2.58.tar.gz  drakx-2.58.tar.bz2  drakx-2.58.tar.xz  drakx-2.58.zip  Martin Whitaker7 years
18.12drakx-18.12.tar  drakx-18.12.tar.gz  drakx-18.12.tar.bz2  drakx-18.12.tar.xz  drakx-18.12.zip  Martin Whitaker7 years
18.11drakx-18.11.tar  drakx-18.11.tar.gz  drakx-18.11.tar.bz2  drakx-18.11.tar.xz  drakx-18.11.zip  Martin Whitaker7 years
18.10drakx-18.10.tar  drakx-18.10.tar.gz  drakx-18.10.tar.bz2  drakx-18.10.tar.xz  drakx-18.10.zip  Martin Whitaker7 years
2.36drakx-2.36.tar  drakx-2.36.tar.gz  drakx-2.36.tar.bz2  drakx-2.36.tar.xz  drakx-2.36.zip  Martin Whitaker7 years
18.9drakx-18.9.tar  drakx-18.9.tar.gz  drakx-18.9.tar.bz2  drakx-18.9.tar.xz  drakx-18.9.zip  Martin Whitaker7 years
18.8.1drakx-18.8.1.tar  drakx-18.8.1.tar.gz  drakx-18.8.1.tar.bz2  drakx-18.8.1.tar.xz  drakx-18.8.1.zip  Thomas Backlund7 years
2.33drakx-2.33.tar  drakx-2.33.tar.gz  drakx-2.33.tar.bz2  drakx-2.33.tar.xz  drakx-2.33.zip  Thierry Vignaud7 years
18.8drakx-18.8.tar  drakx-18.8.tar.gz  drakx-18.8.tar.bz2  drakx-18.8.tar.xz  drakx-18.8.zip  Thierry Vignaud7 years
18.7drakx-18.7.tar  drakx-18.7.tar.gz  drakx-18.7.tar.bz2  drakx-18.7.tar.xz  drakx-18.7.zip  Thierry Vignaud7 years
1.60drakx-1.60.tar  drakx-1.60.tar.gz  drakx-1.60.tar.bz2  drakx-1.60.tar.xz  drakx-1.60.zip  Thierry Vignaud7 years
18.6drakx-18.6.tar  drakx-18.6.tar.gz  drakx-18.6.tar.bz2  drakx-18.6.tar.xz  drakx-18.6.zip  Thierry Vignaud7 years
18.5drakx-18.5.tar  drakx-18.5.tar.gz  drakx-18.5.tar.bz2  drakx-18.5.tar.xz  drakx-18.5.zip  Thierry Vignaud7 years
2.54drakx-2.54.tar  drakx-2.54.tar.gz  drakx-2.54.tar.bz2  drakx-2.54.tar.xz  drakx-2.54.zip  Martin Whitaker7 years
2.32drakx-2.32.tar  drakx-2.32.tar.gz  drakx-2.32.tar.bz2  drakx-2.32.tar.xz  drakx-2.32.zip  Martin Whitaker7 years
18.4drakx-18.4.tar  drakx-18.4.tar.gz  drakx-18.4.tar.bz2  drakx-18.4.tar.xz  drakx-18.4.zip  Martin Whitaker8 years
18.2drakx-18.2.tar  drakx-18.2.tar.gz  drakx-18.2.tar.bz2  drakx-18.2.tar.xz  drakx-18.2.zip  Thomas Backlund8 years
18.1drakx-18.1.tar  drakx-18.1.tar.gz  drakx-18.1.tar.bz2  drakx-18.1.tar.xz  drakx-18.1.zip  Thierry Vignaud8 years
1.59drakx-1.59.tar  drakx-1.59.tar.gz  drakx-1.59.tar.bz2  drakx-1.59.tar.xz  drakx-1.59.zip  Thomas Backlund8 years
1.58drakx-1.58.tar  drakx-1.58.tar.gz  drakx-1.58.tar.bz2  drakx-1.58.tar.xz  drakx-1.58.zip  Thomas Backlund8 years
18.0drakx-18.0.tar  drakx-18.0.tar.gz  drakx-18.0.tar.bz2  drakx-18.0.tar.xz  drakx-18.0.zip  Thierry Vignaud8 years
17.88.3drakx-17.88.3.tar  drakx-17.88.3.tar.gz  drakx-17.88.3.tar.bz2  drakx-17.88.3.tar.xz  drakx-17.88.3.zip  Martin Whitaker8 years
17.99drakx-17.99.tar  drakx-17.99.tar.gz  drakx-17.99.tar.bz2  drakx-17.99.tar.xz  drakx-17.99.zip  Thierry Vignaud8 years
2.46.3drakx-2.46.3.tar  drakx-2.46.3.tar.gz  drakx-2.46.3.tar.bz2  drakx-2.46.3.tar.xz  drakx-2.46.3.zip  Thomas Backlund8 years
2.24.2drakx-2.24.2.tar  drakx-2.24.2.tar.gz  drakx-2.24.2.tar.bz2  drakx-2.24.2.tar.xz  drakx-2.24.2.zip  Thomas Backlund8 years
2.52drakx-2.52.tar  drakx-2.52.tar.gz  drakx-2.52.tar.bz2  drakx-2.52.tar.xz  drakx-2.52.zip  Thomas Backlund8 years
2.30drakx-2.30.tar  drakx-2.30.tar.gz  drakx-2.30.tar.bz2  drakx-2.30.tar.xz  drakx-2.30.zip  Thomas Backlund8 years
2.51drakx-2.51.tar  drakx-2.51.tar.gz  drakx-2.51.tar.bz2  drakx-2.51.tar.xz  drakx-2.51.zip  Thomas Backlund8 years
2.29drakx-2.29.tar  drakx-2.29.tar.gz  drakx-2.29.tar.bz2  drakx-2.29.tar.xz  drakx-2.29.zip  Thomas Backlund8 years
17.98drakx-17.98.tar  drakx-17.98.tar.gz  drakx-17.98.tar.bz2  drakx-17.98.tar.xz  drakx-17.98.zip  Thierry Vignaud8 years
12.75e36beb8669302615274ffbb013ac2c92605cafa6drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar  drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar.gz  drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar.bz2  drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.tar.xz  drakx-12.75e36beb8669302615274ffbb013ac2c92605cafa6.zip  Thierry Vignaud8 years
17.97drakx-17.97.tar  drakx-17.97.tar.gz  drakx-17.97.tar.bz2  drakx-17.97.tar.xz  drakx-17.97.zip  Thierry Vignaud8 years
17.88.2drakx-17.88.2.tar  drakx-17.88.2.tar.gz  drakx-17.88.2.tar.bz2  drakx-17.88.2.tar.xz  drakx-17.88.2.zip  Martin Whitaker8 years
17.96drakx-17.96.tar  drakx-17.96.tar.gz  drakx-17.96.tar.bz2  drakx-17.96.tar.xz  drakx-17.96.zip  Martin Whitaker8 years
1.57drakx-1.57.tar  drakx-1.57.tar.gz  drakx-1.57.tar.bz2  drakx-1.57.tar.xz  drakx-1.57.zip  Thierry Vignaud8 years
17.95drakx-17.95.tar  drakx-17.95.tar.gz  drakx-17.95.tar.bz2  drakx-17.95.tar.xz  drakx-17.95.zip  Thierry Vignaud8 years
17.94drakx-17.94.tar  drakx-17.94.tar.gz  drakx-17.94.tar.bz2  drakx-17.94.tar.xz  drakx-17.94.zip  Thierry Vignaud8 years
1.56drakx-1.56.tar  drakx-1.56.tar.gz  drakx-1.56.tar.bz2  drakx-1.56.tar.xz  drakx-1.56.zip  Thomas Backlund8 years
17.93drakx-17.93.tar  drakx-17.93.tar.gz  drakx-17.93.tar.bz2  drakx-17.93.tar.xz  drakx-17.93.zip  Thomas Backlund8 years
2.48drakx-2.48.tar  drakx-2.48.tar.gz  drakx-2.48.tar.bz2  drakx-2.48.tar.xz  drakx-2.48.zip  Thomas Backlund8 years
2.26drakx-2.26.tar  drakx-2.26.tar.gz  drakx-2.26.tar.bz2  drakx-2.26.tar.xz  drakx-2.26.zip  Thomas Backlund8 years
17.92drakx-17.92.tar  drakx-17.92.tar.gz  drakx-17.92.tar.bz2  drakx-17.92.tar.xz  drakx-17.92.zip  Thomas Backlund8 years
17.91drakx-17.91.tar  drakx-17.91.tar.gz  drakx-17.91.tar.bz2  drakx-17.91.tar.xz  drakx-17.91.zip  Thierry Vignaud9 years
17.88.1drakx-17.88.1.tar  drakx-17.88.1.tar.gz  drakx-17.88.1.tar.bz2  drakx-17.88.1.tar.xz  drakx-17.88.1.zip  Thierry Vignaud9 years
17.90drakx-17.90.tar  drakx-17.90.tar.gz  drakx-17.90.tar.bz2  drakx-17.90.tar.xz  drakx-17.90.zip  Thierry Vignaud9 years
17.89drakx-17.89.tar  drakx-17.89.tar.gz  drakx-17.89.tar.bz2  drakx-17.89.tar.xz  drakx-17.89.zip  Thierry Vignaud9 years
17.88drakx-17.88.tar  drakx-17.88.tar.gz  drakx-17.88.tar.bz2  drakx-17.88.tar.xz  drakx-17.88.zip  Thomas Backlund9 years
17.87drakx-17.87.tar  drakx-17.87.tar.gz  drakx-17.87.tar.bz2  drakx-17.87.tar.xz  drakx-17.87.zip  Anne Nicolas9 years
17.86drakx-17.86.tar  drakx-17.86.tar.gz  drakx-17.86.tar.bz2  drakx-17.86.tar.xz  drakx-17.86.zip  Martin Whitaker9 years
17.85drakx-17.85.tar  drakx-17.85.tar.gz  drakx-17.85.tar.bz2  drakx-17.85.tar.xz  drakx-17.85.zip  Thierry Vignaud9 years
17.84drakx-17.84.tar  drakx-17.84.tar.gz  drakx-17.84.tar.bz2  drakx-17.84.tar.xz  drakx-17.84.zip  Rémi Verschelde9 years
17.83drakx-17.83.tar  drakx-17.83.tar.gz  drakx-17.83.tar.bz2  drakx-17.83.tar.xz  drakx-17.83.zip  Thierry Vignaud9 years
17.82drakx-17.82.tar  drakx-17.82.tar.gz  drakx-17.82.tar.bz2  drakx-17.82.tar.xz  drakx-17.82.zip  Martin Whitaker9 years
17.81drakx-17.81.tar  drakx-17.81.tar.gz  drakx-17.81.tar.bz2  drakx-17.81.tar.xz  drakx-17.81.zip  Rémi Verschelde9 years
17.80drakx-17.80.tar  drakx-17.80.tar.gzatches acp/acp_board.php $cache_name = 'feed_excluded_forum_ids'; if (!isset($forum_ids) && ($forum_ids = $cache->get('_' . $cache_name)) === false) { $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE ' . $db->sql_bit_and('forum_options', FORUM_OPTION_FEED_EXCLUDE, '<> 0'); $result = $db->sql_query($sql); $forum_ids = array(); while ($forum_id = (int) $db->sql_fetchfield('forum_id')) { $forum_ids[$forum_id] = $forum_id; } $db->sql_freeresult($result); $cache->put('_' . $cache_name, $forum_ids); } return $forum_ids; } function is_excluded_forum($forum_id) { $forum_ids = $this->get_excluded_forums(); return isset($forum_ids[$forum_id]) ? true : false; } function get_passworded_forums() { global $user; return $user->get_passworded_forums(); } function get_item() { global $db, $cache; static $result; if (!isset($result)) { if (!$this->get_sql()) { return false; } // Query database $sql = $db->sql_build_query('SELECT', $this->sql); $result = $db->sql_query_limit($sql, $this->num_items); } return $db->sql_fetchrow($result); } function user_viewprofile($row) { global $phpEx, $user; $author_id = (int) $row[$this->get('author_id')]; if ($author_id == ANONYMOUS) { // Since we cannot link to a profile, we just return GUEST // instead of $row['username'] return $user->lang['GUEST']; } return '<a href="' . feed_append_sid('/memberlist.' . $phpEx, 'mode=viewprofile&amp;u=' . $author_id) . '">' . $row[$this->get('creator')] . '</a>'; } } /** * Abstract class for post based feeds * * @package phpBB3 */ class phpbb_feed_post_base extends phpbb_feed_base { var $num_items = 'feed_limit_post'; function set_keys() { $this->set('title', 'post_subject'); $this->set('title2', 'topic_title'); $this->set('author_id', 'user_id'); $this->set('creator', 'username'); $this->set('published', 'post_time'); $this->set('updated', 'post_edit_time'); $this->set('text', 'post_text'); $this->set('bitfield', 'bbcode_bitfield'); $this->set('bbcode_uid','bbcode_uid'); $this->set('enable_bbcode', 'enable_bbcode'); $this->set('enable_smilies', 'enable_smilies'); $this->set('enable_magic_url', 'enable_magic_url'); } function adjust_item(&$item_row, &$row) { global $phpEx, $config, $user; $item_row['link'] = feed_append_sid('/viewtopic.' . $phpEx, "t={$row['topic_id']}&amp;p={$row['post_id']}#p{$row['post_id']}"); if ($config['feed_item_statistics']) { $item_row['statistics'] = $user->lang['POSTED'] . ' ' . $user->lang['POST_BY_AUTHOR'] . ' ' . $this->user_viewprofile($row) . ' ' . $this->separator_stats . ' ' . $user->format_date($row[$this->get('published')]) . (($this->is_moderator_approve_forum($row['forum_id']) && !$row['post_approved']) ? ' ' . $this->separator_stats . ' ' . $user->lang['POST_UNAPPROVED'] : ''); } } } /** * Abstract class for topic based feeds * * @package phpBB3 */ class phpbb_feed_topic_base extends phpbb_feed_base { var $num_items = 'feed_limit_topic'; function set_keys() { $this->set('title', 'topic_title'); $this->set('title2', 'forum_name'); $this->set('author_id', 'topic_poster'); $this->set('creator', 'topic_first_poster_name'); $this->set('published', 'post_time'); $this->set('updated', 'post_edit_time'); $this->set('text', 'post_text'); $this->set('bitfield', 'bbcode_bitfield'); $this->set('bbcode_uid','bbcode_uid'); $this->set('enable_bbcode', 'enable_bbcode'); $this->set('enable_smilies', 'enable_smilies'); $this->set('enable_magic_url', 'enable_magic_url'); } function adjust_item(&$item_row, &$row) { global $phpEx, $config, $user; $item_row['link'] = feed_append_sid('/viewtopic.' . $phpEx, 't=' . $row['topic_id'] . '&amp;p=' . $row['post_id'] . '#p' . $row['post_id']); if ($config['feed_item_statistics']) { $item_row['statistics'] = $user->lang['POSTED'] . ' ' . $user->lang['POST_BY_AUTHOR'] . ' ' . $this->user_viewprofile($row) . ' ' . $this->separator_stats . ' ' . $user->format_date($row[$this->get('published')]) . ' ' . $this->separator_stats . ' ' . $user->lang['REPLIES'] . ' ' . (($this->is_moderator_approve_forum($row['forum_id'])) ? $row['topic_replies_real'] : $row['topic_replies']) . ' ' . $this->separator_stats . ' ' . $user->lang['VIEWS'] . ' ' . $row['topic_views'] . (($this->is_moderator_approve_forum($row['forum_id']) && ($row['topic_replies_real'] != $row['topic_replies'])) ? ' ' . $this->separator_stats . ' ' . $user->lang['POSTS_UNAPPROVED'] : ''); } } } /** * Board wide feed (aka overall feed) * * This will give you the newest {$this->num_items} posts * from the whole board. * * @package phpBB3 */ class phpbb_feed_overall extends phpbb_feed_post_base { function get_sql() { global $auth, $db; $forum_ids = array_diff($this->get_readable_forums(), $this->get_excluded_forums(), $this->get_passworded_forums()); if (empty($forum_ids)) { return false; } // m_approve forums $fid_m_approve = $this->get_moderator_approve_forums(); $sql_m_approve = (!empty($fid_m_approve)) ? 'OR ' . $db->sql_in_set('forum_id', $fid_m_approve) : ''; // Determine topics with recent activity $sql = 'SELECT topic_id, topic_last_post_time FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('forum_id', $forum_ids) . ' AND topic_moved_id = 0 AND (topic_approved = 1 ' . $sql_m_approve . ') ORDER BY topic_last_post_time DESC'; $result = $db->sql_query_limit($sql, $this->num_items); $topic_ids = array(); $min_post_time = 0; while ($row = $db->sql_fetchrow()) { $topic_ids[] = (int) $row['topic_id']; $min_post_time = (int) $row['topic_last_post_time']; } $db->sql_freeresult($result); if (empty($topic_ids)) { return false; } // Get the actual data $this->sql = array( 'SELECT' => 'f.forum_id, f.forum_name, ' . 'p.post_id, p.topic_id, p.post_time, p.post_edit_time, p.post_approved, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' . 'u.username, u.user_id', 'FROM' => array( USERS_TABLE => 'u', POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(FORUMS_TABLE => 'f'), 'ON' => 'f.forum_id = p.forum_id', ), ), 'WHERE' => $db->sql_in_set('p.topic_id', $topic_ids) . ' AND (p.post_approved = 1 ' . str_replace('forum_id', 'p.forum_id', $sql_m_approve) . ') AND p.post_time >= ' . $min_post_time . ' AND u.user_id = p.poster_id', 'ORDER_BY' => 'p.post_time DESC', ); return true; } function adjust_item(&$item_row, &$row) { parent::adjust_item($item_row, $row); $item_row['title'] = (isset($row['forum_name']) && $row['forum_name'] !== '') ? $row['forum_name'] . ' ' . $this->separator . ' ' . $item_row['title'] : $item_row['title']; } } /** * Forum feed * * This will give you the last {$this->num_items} posts made * within a specific forum. * * @package phpBB3 */ class phpbb_feed_forum extends phpbb_feed_post_base { var $forum_id = 0; var $forum_data = array(); function phpbb_feed_forum($forum_id) { parent::phpbb_feed_base(); $this->forum_id = (int) $forum_id; } function open() { global $db, $auth; // Check if forum exists $sql = 'SELECT forum_id, forum_name, forum_password, forum_type, forum_options FROM ' . FORUMS_TABLE . ' WHERE forum_id = ' . $this->forum_id; $result = $db->sql_query($sql); $this->forum_data = $db->sql_fetchrow($result); $db->sql_freeresult($result); if (empty($this->forum_data)) { trigger_error('NO_FORUM'); } // Forum needs to be postable if ($this->forum_data['forum_type'] != FORUM_POST) { trigger_error('NO_FEED'); } // Make sure forum is not excluded from feed if (phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $this->forum_data['forum_options'])) { trigger_error('NO_FEED'); } // Make sure we can read this forum if (!$auth->acl_get('f_read', $this->forum_id)) { trigger_error('SORRY_AUTH_READ'); } // Make sure forum is not passworded or user is authed if ($this->forum_data['forum_password']) { $forum_ids_passworded = $this->get_passworded_forums(); if (isset($forum_ids_passworded[$this->forum_id])) { trigger_error('SORRY_AUTH_READ'); } unset($forum_ids_passworded); } } function get_sql() { global $auth, $db; $m_approve = ($auth->acl_get('m_approve', $this->forum_id)) ? true : false; // Determine topics with recent activity $sql = 'SELECT topic_id, topic_last_post_time FROM ' . TOPICS_TABLE . ' WHERE forum_id = ' . $this->forum_id . ' AND topic_moved_id = 0 ' . ((!$m_approve) ? 'AND topic_approved = 1' : '') . ' ORDER BY topic_last_post_time DESC'; $result = $db->sql_query_limit($sql, $this->num_items); $topic_ids = array(); $min_post_time = 0; while ($row = $db->sql_fetchrow()) { $topic_ids[] = (int) $row['topic_id']; $min_post_time = (int) $row['topic_last_post_time']; } $db->sql_freeresult($result); if (empty($topic_ids)) { return false; } $this->sql = array( 'SELECT' => 'p.post_id, p.topic_id, p.post_time, p.post_edit_time, p.post_approved, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' . 'u.username, u.user_id', 'FROM' => array( POSTS_TABLE => 'p', USERS_TABLE => 'u', ), 'WHERE' => $db->sql_in_set('p.topic_id', $topic_ids) . ' ' . ((!$m_approve) ? 'AND p.post_approved = 1' : '') . ' AND p.post_time >= ' . $min_post_time . ' AND p.poster_id = u.user_id', 'ORDER_BY' => 'p.post_time DESC', ); return true; } function adjust_item(&$item_row, &$row) { parent::adjust_item($item_row, $row); $item_row['title'] = (isset($row['forum_name']) && $row['forum_name'] !== '') ? $row['forum_name'] . ' ' . $this->separator . ' ' . $item_row['title'] : $item_row['title']; } function get_item() { return ($row = parent::get_item()) ? array_merge($this->forum_data, $row) : $row; } } /** * Topic feed for a specific topic * * This will give you the last {$this->num_items} posts made within this topic. * * @package phpBB3 */ class phpbb_feed_topic extends phpbb_feed_post_base { var $topic_id = 0; var $forum_id = 0; var $topic_data = array(); function phpbb_feed_topic($topic_id) { parent::phpbb_feed_base(); $this->topic_id = (int) $topic_id; } function open() { global $auth, $db, $user; $sql = 'SELECT f.forum_options, f.forum_password, t.topic_id, t.forum_id, t.topic_approved, t.topic_title, t.topic_time, t.topic_views, t.topic_replies, t.topic_type FROM ' . TOPICS_TABLE . ' t LEFT JOIN ' . FORUMS_TABLE . ' f ON (f.forum_id = t.forum_id) WHERE t.topic_id = ' . $this->topic_id; $result = $db->sql_query($sql); $this->topic_data = $db->sql_fetchrow($result); $db->sql_freeresult($result); if (empty($this->topic_data)) { trigger_error('NO_TOPIC'); } $this->forum_id = (int) $this->topic_data['forum_id']; // Make sure topic is either approved or user authed if (!$this->topic_data['topic_approved'] && !$auth->acl_get('m_approve', $this->forum_id)) { trigger_error('SORRY_AUTH_READ'); } // Make sure forum is not excluded from feed if (phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $this->topic_data['forum_options'])) { trigger_error('NO_FEED'); } // Make sure we can read this forum if (!$auth->acl_get('f_read', $this->forum_id)) { trigger_error('SORRY_AUTH_READ'); } // Make sure forum is not passworded or user is authed if ($this->topic_data['forum_password']) { $forum_ids_passworded = $this->get_passworded_forums(); if (isset($forum_ids_passworded[$this->forum_id])) { trigger_error('SORRY_AUTH_READ'); } unset($forum_ids_passworded); } } function get_sql() { global $auth, $db; $this->sql = array( 'SELECT' => 'p.post_id, p.post_time, p.post_edit_time, p.post_approved, p.post_subject, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url, ' . 'u.username, u.user_id', 'FROM' => array( POSTS_TABLE => 'p', USERS_TABLE => 'u', ), 'WHERE' => 'p.topic_id = ' . $this->topic_id . ' ' . ($this->forum_id && !$auth->acl_get('m_approve', $this->forum_id) ? 'AND p.post_approved = 1' : '') . ' AND p.poster_id = u.user_id', 'ORDER_BY' => 'p.post_time DESC', ); return true; } function get_item() { return ($row = parent::get_item()) ? array_merge($this->topic_data, $row) : $row; } } /** * 'All Forums' feed * * This will give you a list of all postable forums where feeds are enabled * including forum description, topic stats and post stats * * @package phpBB3 */ class phpbb_feed_forums extends phpbb_feed_base { var $num_items = 0; function set_keys() { $this->set('title', 'forum_name'); $this->set('text', 'forum_desc'); $this->set('bitfield', 'forum_desc_bitfield'); $this->set('bbcode_uid','forum_desc_uid'); $this->set('updated', 'forum_last_post_time'); $this->set('options', 'forum_desc_options'); } function get_sql() { global $auth, $db; $in_fid_ary = array_diff($this->get_readable_forums(), $this->get_excluded_forums()); if (empty($in_fid_ary)) { return false; } // Build SQL Query $this->sql = array( 'SELECT' => 'f.forum_id, f.left_id, f.forum_name, f.forum_last_post_time, f.forum_desc, f.forum_desc_bitfield, f.forum_desc_uid, f.forum_desc_options, f.forum_topics, f.forum_posts', 'FROM' => array(FORUMS_TABLE => 'f'), 'WHERE' => 'f.forum_type = ' . FORUM_POST . ' AND ' . $db->sql_in_set('f.forum_id', $in_fid_ary), 'ORDER_BY' => 'f.left_id ASC', ); return true; } function adjust_item(&$item_row, &$row) { global $phpEx, $config; $item_row['link'] = feed_append_sid('/viewforum.' . $phpEx, 'f=' . $row['forum_id']); if ($config['feed_item_statistics']) { global $user; $item_row['statistics'] = $user->lang('TOTAL_TOPICS', (int) $row['forum_topics']) . ' ' . $this->separator_stats . ' ' . $user->lang('TOTAL_POSTS_COUNT', (int) $row['forum_posts']); } } } /** * News feed * * This will give you {$this->num_items} first posts * of all topics in the selected news forums. * * @package phpBB3 */ class phpbb_feed_news extends phpbb_feed_topic_base { function get_news_forums() { global $db, $cache; static $forum_ids; // Matches acp/acp_board.php $cache_name = 'feed_news_forum_ids'; if (!isset($forum_ids) && ($forum_ids = $cache->get('_' . $cache_name)) === false) { $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE ' . $db->sql_bit_and('forum_options', FORUM_OPTION_FEED_NEWS, '<> 0'); $result = $db->sql_query($sql); $forum_ids = array(); while ($forum_id = (int) $db->sql_fetchfield('forum_id')) { $forum_ids[$forum_id] = $forum_id; } $db->sql_freeresult($result); $cache->put('_' . $cache_name, $forum_ids); } return $forum_ids; } function get_sql() { global $auth, $config, $db; // Determine forum ids $in_fid_ary = array_intersect($this->get_news_forums(), $this->get_readable_forums()); if (empty($in_fid_ary)) { return false; } $in_fid_ary = array_diff($in_fid_ary, $this->get_passworded_forums()); if (empty($in_fid_ary)) { return false; } // We really have to get the post ids first! $sql = 'SELECT topic_first_post_id, topic_time FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('forum_id', $in_fid_ary) . ' AND topic_moved_id = 0 AND topic_approved = 1 ORDER BY topic_time DESC'; $result = $db->sql_query_limit($sql, $this->num_items); $post_ids = array(); while ($row = $db->sql_fetchrow($result)) { $post_ids[] = (int) $row['topic_first_post_id']; } $db->sql_freeresult($result); if (empty($post_ids)) { return false; } $this->sql = array( 'SELECT' => 'f.forum_id, f.forum_name, t.topic_id, t.topic_title, t.topic_poster, t.topic_first_poster_name, t.topic_replies, t.topic_replies_real, t.topic_views, t.topic_time, t.topic_last_post_time, p.post_id, p.post_time, p.post_edit_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url', 'FROM' => array( TOPICS_TABLE => 't', POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(FORUMS_TABLE => 'f'), 'ON' => 'p.forum_id = f.forum_id', ), ), 'WHERE' => 'p.topic_id = t.topic_id AND ' . $db->sql_in_set('p.post_id', $post_ids), 'ORDER_BY' => 'p.post_time DESC', ); return true; } } /** * New Topics feed * * This will give you the last {$this->num_items} created topics * including the first post. * * @package phpBB3 */ class phpbb_feed_topics extends phpbb_feed_topic_base { function get_sql() { global $db, $config; $forum_ids_read = $this->get_readable_forums(); if (empty($forum_ids_read)) { return false; } $in_fid_ary = array_diff($forum_ids_read, $this->get_excluded_forums(), $this->get_passworded_forums()); if (empty($in_fid_ary)) { return false; } // We really have to get the post ids first! $sql = 'SELECT topic_first_post_id, topic_time FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('forum_id', $in_fid_ary) . ' AND topic_moved_id = 0 AND topic_approved = 1 ORDER BY topic_time DESC'; $result = $db->sql_query_limit($sql, $this->num_items); $post_ids = array(); while ($row = $db->sql_fetchrow($result)) { $post_ids[] = (int) $row['topic_first_post_id']; } $db->sql_freeresult($result); if (empty($post_ids)) { return false; } $this->sql = array( 'SELECT' => 'f.forum_id, f.forum_name, t.topic_id, t.topic_title, t.topic_poster, t.topic_first_poster_name, t.topic_replies, t.topic_replies_real, t.topic_views, t.topic_time, t.topic_last_post_time, p.post_id, p.post_time, p.post_edit_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url', 'FROM' => array( TOPICS_TABLE => 't', POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(FORUMS_TABLE => 'f'), 'ON' => 'p.forum_id = f.forum_id', ), ), 'WHERE' => 'p.topic_id = t.topic_id AND ' . $db->sql_in_set('p.post_id', $post_ids), 'ORDER_BY' => 'p.post_time DESC', ); return true; } function adjust_item(&$item_row, &$row) { parent::adjust_item($item_row, $row); $item_row['title'] = (isset($row['forum_name']) && $row['forum_name'] !== '') ? $row['forum_name'] . ' ' . $this->separator . ' ' . $item_row['title'] : $item_row['title']; } } /** * Active Topics feed * * This will give you the last {$this->num_items} topics * with replies made withing the last {$this->sort_days} days * including the last post. * * @package phpBB3 */ class phpbb_feed_topics_active extends phpbb_feed_topic_base { var $sort_days = 7; function set_keys() { parent::set_keys(); $this->set('author_id', 'topic_last_poster_id'); $this->set('creator', 'topic_last_poster_name'); } function get_sql() { global $db, $config; $forum_ids_read = $this->get_readable_forums(); if (empty($forum_ids_read)) { return false; } $in_fid_ary = array_intersect($forum_ids_read, $this->get_forum_ids()); $in_fid_ary = array_diff($in_fid_ary, $this->get_passworded_forums()); if (empty($in_fid_ary)) { return false; } // Search for topics in last X days $last_post_time_sql = ($this->sort_days) ? ' AND topic_last_post_time > ' . (time() - ($this->sort_days * 24 * 3600)) : ''; // We really have to get the post ids first! $sql = 'SELECT topic_last_post_id, topic_last_post_time FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('forum_id', $in_fid_ary) . ' AND topic_moved_id = 0 AND topic_approved = 1 ' . $last_post_time_sql . ' ORDER BY topic_last_post_time DESC'; $result = $db->sql_query_limit($sql, $this->num_items); $post_ids = array(); while ($row = $db->sql_fetchrow($result)) { $post_ids[] = (int) $row['topic_last_post_id']; } $db->sql_freeresult($result); if (empty($post_ids)) { return false; } $this->sql = array( 'SELECT' => 'f.forum_id, f.forum_name, t.topic_id, t.topic_title, t.topic_replies, t.topic_replies_real, t.topic_views, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_post_time, p.post_id, p.post_time, p.post_edit_time, p.post_text, p.bbcode_bitfield, p.bbcode_uid, p.enable_bbcode, p.enable_smilies, p.enable_magic_url', 'FROM' => array( TOPICS_TABLE => 't', POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(FORUMS_TABLE => 'f'), 'ON' => 'p.forum_id = f.forum_id', ), ), 'WHERE' => 'p.topic_id = t.topic_id AND ' . $db->sql_in_set('p.post_id', $post_ids), 'ORDER_BY' => 'p.post_time DESC', ); return true; } function get_forum_ids() { global $db, $cache; static $forum_ids; $cache_name = 'feed_topic_active_forum_ids'; if (!isset($forum_ids) && ($forum_ids = $cache->get('_' . $cache_name)) === false) { $sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE forum_type = ' . FORUM_POST . ' AND ' . $db->sql_bit_and('forum_options', FORUM_OPTION_FEED_EXCLUDE, '= 0') . ' AND ' . $db->sql_bit_and('forum_flags', log(FORUM_FLAG_ACTIVE_TOPICS, 2), '<> 0'); $result = $db->sql_query($sql); $forum_ids = array(); while ($forum_id = (int) $db->sql_fetchfield('forum_id')) { $forum_ids[$forum_id] = $forum_id; } $db->sql_freeresult($result); $cache->put('_' . $cache_name, $forum_ids, 180); } return $forum_ids; } function adjust_item(&$item_row, &$row) { parent::adjust_item($item_row, $row); $item_row['title'] = (isset($row['forum_name']) && $row['forum_name'] !== '') ? $row['forum_name'] . ' ' . $this->separator . ' ' . $item_row['title'] : $item_row['title']; } }