Conflicts: apps/contacts/js/contacts.js apps/contacts/lib/search.php apps/files_archive/js/archive.js apps/gallery/lib/tiles.php apps/gallery/templates/index.php lib/ocs.phpremotes/origin/stable5
commit
b483f2aab8
@ -1,182 +0,0 @@ |
||||
[main] |
||||
host = https://www.transifex.net |
||||
|
||||
[owncloud.core] |
||||
file_filter = l10n/<lang>/core.po |
||||
host = http://www.transifex.net |
||||
source_file = l10n/templates/core.pot |
||||
source_lang = en |
||||
trans.bg_BG = l10n/bg_BG/core.po |
||||
trans.ca = l10n/ca/core.po |
||||
trans.cs_CZ = l10n/cs_CZ/core.po |
||||
trans.da = l10n/da/core.po |
||||
trans.de = l10n/de/core.po |
||||
trans.el = l10n/el/core.po |
||||
trans.es = l10n/es/core.po |
||||
trans.et_EE = l10n/et_EE/core.po |
||||
trans.fr = l10n/fr/core.po |
||||
trans.id = l10n/id/core.po |
||||
trans.it = l10n/it/core.po |
||||
trans.lb = l10n/lb/core.po |
||||
trans.ms_MY = l10n/ms_MY/core.po |
||||
trans.nb_NO = l10n/nb_NO/core.po |
||||
trans.nl = l10n/nl/core.po |
||||
trans.pl = l10n/pl/core.po |
||||
trans.pt_BR = l10n/pt_BR/core.po |
||||
trans.pt_PT = l10n/pt_PT/core.po |
||||
trans.ro = l10n/ro/core.po |
||||
trans.ru = l10n/ru/core.po |
||||
trans.sr = l10n/sr/core.po |
||||
trans.sr@latin = l10n/sr@latin/core.po |
||||
trans.sv = l10n/sv/core.po |
||||
trans.zh_CN = l10n/zh_CN/core.po |
||||
|
||||
[owncloud.settings] |
||||
file_filter = l10n/<lang>/settings.po |
||||
host = http://www.transifex.net |
||||
source_file = l10n/templates/settings.pot |
||||
source_lang = en |
||||
trans.bg_BG = l10n/bg_BG/settings.po |
||||
trans.ca = l10n/ca/settings.po |
||||
trans.cs_CZ = l10n/cs_CZ/settings.po |
||||
trans.da = l10n/da/settings.po |
||||
trans.de = l10n/de/settings.po |
||||
trans.el = l10n/el/settings.po |
||||
trans.es = l10n/es/settings.po |
||||
trans.et_EE = l10n/et_EE/settings.po |
||||
trans.fr = l10n/fr/settings.po |
||||
trans.id = l10n/id/settings.po |
||||
trans.it = l10n/it/settings.po |
||||
trans.lb = l10n/lb/settings.po |
||||
trans.ms_MY = l10n/ms_MY/settings.po |
||||
trans.nb_NO = l10n/nb_NO/settings.po |
||||
trans.nl = l10n/nl/settings.po |
||||
trans.pl = l10n/pl/settings.po |
||||
trans.pt_BR = l10n/pt_BR/settings.po |
||||
trans.pt_PT = l10n/pt_PT/settings.po |
||||
trans.ro = l10n/ro/settings.po |
||||
trans.ru = l10n/ru/settings.po |
||||
trans.sr = l10n/sr/settings.po |
||||
trans.sr@latin = l10n/sr@latin/settings.po |
||||
trans.sv = l10n/sv/settings.po |
||||
trans.zh_CN = l10n/zh_CN/settings.po |
||||
|
||||
[owncloud.files] |
||||
file_filter = translations/owncloud.files/<lang>.po |
||||
host = http://www.transifex.net |
||||
source_file = l10n/templates/files.pot |
||||
source_lang = en |
||||
trans.bg_BG = l10n/bg_BG/files.po |
||||
trans.ca = l10n/ca/files.po |
||||
trans.cs_CZ = l10n/cs_CZ/files.po |
||||
trans.da = l10n/da/files.po |
||||
trans.de = l10n/de/files.po |
||||
trans.el = l10n/el/files.po |
||||
trans.es = l10n/es/files.po |
||||
trans.et_EE = l10n/et_EE/files.po |
||||
trans.fr = l10n/fr/files.po |
||||
trans.id = l10n/id/files.po |
||||
trans.it = l10n/it/files.po |
||||
trans.lb = l10n/lb/files.po |
||||
trans.ms_MY = l10n/ms_MY/files.po |
||||
trans.nb_NO = l10n/nb_NO/files.po |
||||
trans.nl = l10n/nl/files.po |
||||
trans.pl = l10n/pl/files.po |
||||
trans.pt_BR = l10n/pt_BR/files.po |
||||
trans.pt_PT = l10n/pt_PT/files.po |
||||
trans.ro = l10n/ro/files.po |
||||
trans.ru = l10n/ru/files.po |
||||
trans.sr = l10n/sr/files.po |
||||
trans.sr@latin = l10n/sr@latin/files.po |
||||
trans.sv = l10n/sv/files.po |
||||
trans.zh_CN = l10n/zh_CN/files.po |
||||
|
||||
[owncloud.media] |
||||
file_filter = translations/owncloud.media/<lang>.po |
||||
host = http://www.transifex.net |
||||
source_file = l10n/templates/media.pot |
||||
source_lang = en |
||||
trans.bg_BG = l10n/bg_BG/media.po |
||||
trans.ca = l10n/ca/media.po |
||||
trans.cs_CZ = l10n/cs_CZ/media.po |
||||
trans.da = l10n/da/media.po |
||||
trans.de = l10n/de/media.po |
||||
trans.el = l10n/el/media.po |
||||
trans.es = l10n/es/media.po |
||||
trans.et_EE = l10n/et_EE/media.po |
||||
trans.fr = l10n/fr/media.po |
||||
trans.id = l10n/id/media.po |
||||
trans.it = l10n/it/media.po |
||||
trans.lb = l10n/lb/media.po |
||||
trans.ms_MY = l10n/ms_MY/media.po |
||||
trans.nb_NO = l10n/nb_NO/media.po |
||||
trans.nl = l10n/nl/media.po |
||||
trans.pl = l10n/pl/media.po |
||||
trans.pt_BR = l10n/pt_BR/media.po |
||||
trans.pt_PT = l10n/pt_PT/media.po |
||||
trans.ro = l10n/ro/media.po |
||||
trans.ru = l10n/ru/media.po |
||||
trans.sr = l10n/sr/media.po |
||||
trans.sr@latin = l10n/sr@latin/media.po |
||||
trans.sv = l10n/sv/media.po |
||||
trans.zh_CN = l10n/zh_CN/media.po |
||||
|
||||
[owncloud.calendar] |
||||
file_filter = l10n/<lang>/calendar.po |
||||
host = http://www.transifex.net |
||||
source_file = l10n/templates/calendar.pot |
||||
source_lang = en |
||||
trans.bg_BG = l10n/bg_BG/calendar.po |
||||
trans.ca = l10n/ca/calendar.po |
||||
trans.cs_CZ = l10n/cs_CZ/calendar.po |
||||
trans.da = l10n/da/calendar.po |
||||
trans.de = l10n/de/calendar.po |
||||
trans.el = l10n/el/calendar.po |
||||
trans.es = l10n/es/calendar.po |
||||
trans.et_EE = l10n/et_EE/calendar.po |
||||
trans.fr = l10n/fr/calendar.po |
||||
trans.id = l10n/id/calendar.po |
||||
trans.it = l10n/it/calendar.po |
||||
trans.lb = l10n/lb/calendar.po |
||||
trans.ms_MY = l10n/ms_MY/calendar.po |
||||
trans.nb_NO = l10n/nb_NO/calendar.po |
||||
trans.nl = l10n/nl/calendar.po |
||||
trans.pl = l10n/pl/calendar.po |
||||
trans.pt_BR = l10n/pt_BR/calendar.po |
||||
trans.pt_PT = l10n/pt_PT/calendar.po |
||||
trans.ro = l10n/ro/calendar.po |
||||
trans.ru = l10n/ru/calendar.po |
||||
trans.sr = l10n/sr/calendar.po |
||||
trans.sr@latin = l10n/sr@latin/calendar.po |
||||
trans.sv = l10n/sv/calendar.po |
||||
trans.zh_CN = l10n/zh_CN/calendar.po |
||||
|
||||
[owncloud.contacts] |
||||
file_filter = translations/owncloud.contacts/<lang>.po |
||||
host = http://www.transifex.net |
||||
source_file = l10n/templates/contacts.pot |
||||
source_lang = en |
||||
trans.bg_BG = l10n/bg_BG/contacts.po |
||||
trans.ca = l10n/ca/contacts.po |
||||
trans.cs_CZ = l10n/cs_CZ/contacts.po |
||||
trans.da = l10n/da/contacts.po |
||||
trans.de = l10n/de/contacts.po |
||||
trans.el = l10n/el/contacts.po |
||||
trans.es = l10n/es/contacts.po |
||||
trans.et_EE = l10n/et_EE/contacts.po |
||||
trans.fr = l10n/fr/contacts.po |
||||
trans.id = l10n/id/contacts.po |
||||
trans.it = l10n/it/contacts.po |
||||
trans.lb = l10n/lb/contacts.po |
||||
trans.ms_MY = l10n/ms_MY/contacts.po |
||||
trans.nb_NO = l10n/nb_NO/contacts.po |
||||
trans.nl = l10n/nl/contacts.po |
||||
trans.pl = l10n/pl/contacts.po |
||||
trans.pt_BR = l10n/pt_BR/contacts.po |
||||
trans.pt_PT = l10n/pt_PT/contacts.po |
||||
trans.ro = l10n/ro/contacts.po |
||||
trans.ru = l10n/ru/contacts.po |
||||
trans.sr = l10n/sr/contacts.po |
||||
trans.sr@latin = l10n/sr@latin/contacts.po |
||||
trans.sv = l10n/sv/contacts.po |
||||
trans.zh_CN = l10n/zh_CN/contacts.po |
@ -0,0 +1,29 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* Include this in any file to start coverage, coverage will automatically end |
||||
* when process dies. |
||||
*/ |
||||
require_once(dirname(__FILE__) .'/coverage.php'); |
||||
|
||||
if (CodeCoverage::isCoverageOn()) { |
||||
$coverage = CodeCoverage::getInstance(); |
||||
$coverage->startCoverage(); |
||||
register_shutdown_function("stop_coverage"); |
||||
} |
||||
|
||||
function stop_coverage() { |
||||
# hack until i can think of a way to run tests first and w/o exiting |
||||
$autorun = function_exists("run_local_tests"); |
||||
if ($autorun) { |
||||
$result = run_local_tests(); |
||||
} |
||||
CodeCoverage::getInstance()->stopCoverage(); |
||||
if ($autorun) { |
||||
exit($result ? 0 : 1); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,14 @@ |
||||
<?php |
||||
/** |
||||
* Close code coverage data collection, next step is to generate report |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* include coverage files |
||||
*/ |
||||
require_once(dirname(__FILE__) . '/../coverage.php'); |
||||
$cc = CodeCoverage::getInstance(); |
||||
$cc->readSettings(); |
||||
$cc->writeUntouched(); |
||||
?> |
@ -0,0 +1,31 @@ |
||||
<?php |
||||
/** |
||||
* Initialize code coverage data collection, next step is to run your tests |
||||
* with ini setting auto_prepend_file=autocoverage.php ... |
||||
* |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
# optional arguments: |
||||
# --include=<some filepath regexp> these files should be included coverage report |
||||
# --exclude=<come filepath regexp> these files should not be included in coverage report |
||||
# --maxdepth=2 when considering which file were not touched, scan directories |
||||
# |
||||
# Example: |
||||
# php-coverage-open.php --include='.*\.php$' --include='.*\.inc$' --exclude='.*/tests/.*' |
||||
/**#@+ |
||||
* include coverage files |
||||
*/ |
||||
require_once(dirname(__FILE__) . '/../coverage_utils.php'); |
||||
CoverageUtils::requireSqlite(); |
||||
require_once(dirname(__FILE__) . '/../coverage.php'); |
||||
/**#@-*/ |
||||
$cc = new CodeCoverage(); |
||||
$cc->log = 'coverage.sqlite'; |
||||
$args = CoverageUtils::parseArguments($_SERVER['argv'], TRUE); |
||||
$cc->includes = CoverageUtils::issetOr($args['include[]'], array('.*\.php$')); |
||||
$cc->excludes = CoverageUtils::issetOr($args['exclude[]']); |
||||
$cc->maxDirectoryDepth = (int)CoverageUtils::issetOr($args['maxdepth'], '1'); |
||||
$cc->resetLog(); |
||||
$cc->writeSettings(); |
||||
?> |
@ -0,0 +1,29 @@ |
||||
<?php |
||||
/** |
||||
* Generate a code coverage report |
||||
* |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
# optional arguments: |
||||
# --reportDir=some/directory the default is ./coverage-report |
||||
# --title='My Coverage Report' title the main page of your report |
||||
|
||||
/**#@+ |
||||
* include coverage files |
||||
*/ |
||||
require_once(dirname(__FILE__) . '/../coverage_utils.php'); |
||||
require_once(dirname(__FILE__) . '/../coverage.php'); |
||||
require_once(dirname(__FILE__) . '/../coverage_reporter.php'); |
||||
/**#@-*/ |
||||
$cc = CodeCoverage::getInstance(); |
||||
$cc->readSettings(); |
||||
$handler = new CoverageDataHandler($cc->log); |
||||
$report = new CoverageReporter(); |
||||
$args = CoverageUtils::parseArguments($_SERVER['argv']); |
||||
$report->reportDir = CoverageUtils::issetOr($args['reportDir'], 'coverage-report'); |
||||
$report->title = CoverageUtils::issetOr($args['title'], "Simpletest Coverage"); |
||||
$report->coverage = $handler->read(); |
||||
$report->untouched = $handler->readUntouchedFiles(); |
||||
$report->generate(); |
||||
?> |
@ -0,0 +1,196 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* load coverage data handle |
||||
*/ |
||||
require_once dirname(__FILE__) . '/coverage_data_handler.php'; |
||||
|
||||
/** |
||||
* Orchestrates code coverage both in this thread and in subthread under apache |
||||
* Assumes this is running on same machine as apache. |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
class CodeCoverage { |
||||
var $log; |
||||
var $root; |
||||
var $includes; |
||||
var $excludes; |
||||
var $directoryDepth; |
||||
var $maxDirectoryDepth = 20; // reasonable, otherwise arbitrary |
||||
var $title = "Code Coverage"; |
||||
|
||||
# NOTE: This assumes all code shares the same current working directory. |
||||
var $settingsFile = './code-coverage-settings.dat'; |
||||
|
||||
static $instance; |
||||
|
||||
function writeUntouched() { |
||||
$touched = array_flip($this->getTouchedFiles()); |
||||
$untouched = array(); |
||||
$this->getUntouchedFiles($untouched, $touched, '.', '.'); |
||||
$this->includeUntouchedFiles($untouched); |
||||
} |
||||
|
||||
function &getTouchedFiles() { |
||||
$handler = new CoverageDataHandler($this->log); |
||||
$touched = $handler->getFilenames(); |
||||
return $touched; |
||||
} |
||||
|
||||
function includeUntouchedFiles($untouched) { |
||||
$handler = new CoverageDataHandler($this->log); |
||||
foreach ($untouched as $file) { |
||||
$handler->writeUntouchedFile($file); |
||||
} |
||||
} |
||||
|
||||
function getUntouchedFiles(&$untouched, $touched, $parentPath, $rootPath, $directoryDepth = 1) { |
||||
$parent = opendir($parentPath); |
||||
while ($file = readdir($parent)) { |
||||
$path = "$parentPath/$file"; |
||||
if (is_dir($path)) { |
||||
if ($file != '.' && $file != '..') { |
||||
if ($this->isDirectoryIncluded($path, $directoryDepth)) { |
||||
$this->getUntouchedFiles($untouched, $touched, $path, $rootPath, $directoryDepth + 1); |
||||
} |
||||
} |
||||
} |
||||
else if ($this->isFileIncluded($path)) { |
||||
$relativePath = CoverageDataHandler::ltrim($rootPath .'/', $path); |
||||
if (!array_key_exists($relativePath, $touched)) { |
||||
$untouched[] = $relativePath; |
||||
} |
||||
} |
||||
} |
||||
closedir($parent); |
||||
} |
||||
|
||||
function resetLog() { |
||||
error_log('reseting log'); |
||||
$new_file = fopen($this->log, "w"); |
||||
if (!$new_file) { |
||||
throw new Exception("Could not create ". $this->log); |
||||
} |
||||
fclose($new_file); |
||||
if (!chmod($this->log, 0666)) { |
||||
throw new Exception("Could not change ownership on file ". $this->log); |
||||
} |
||||
$handler = new CoverageDataHandler($this->log); |
||||
$handler->createSchema(); |
||||
} |
||||
|
||||
function startCoverage() { |
||||
$this->root = getcwd(); |
||||
if(!extension_loaded("xdebug")) { |
||||
throw new Exception("Could not load xdebug extension"); |
||||
}; |
||||
xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); |
||||
} |
||||
|
||||
function stopCoverage() { |
||||
$cov = xdebug_get_code_coverage(); |
||||
$this->filter($cov); |
||||
$data = new CoverageDataHandler($this->log); |
||||
chdir($this->root); |
||||
$data->write($cov); |
||||
unset($data); // release sqlite connection |
||||
xdebug_stop_code_coverage(); |
||||
// make sure we wind up on same current working directory, otherwise |
||||
// coverage handler writer doesn't know what directory to chop off |
||||
chdir($this->root); |
||||
} |
||||
|
||||
function readSettings() { |
||||
if (file_exists($this->settingsFile)) { |
||||
$this->setSettings(file_get_contents($this->settingsFile)); |
||||
} else { |
||||
error_log("could not find file ". $this->settingsFile); |
||||
} |
||||
} |
||||
|
||||
function writeSettings() { |
||||
file_put_contents($this->settingsFile, $this->getSettings()); |
||||
} |
||||
|
||||
function getSettings() { |
||||
$data = array( |
||||
'log' => realpath($this->log), |
||||
'includes' => $this->includes, |
||||
'excludes' => $this->excludes); |
||||
return serialize($data); |
||||
} |
||||
|
||||
function setSettings($settings) { |
||||
$data = unserialize($settings); |
||||
$this->log = $data['log']; |
||||
$this->includes = $data['includes']; |
||||
$this->excludes = $data['excludes']; |
||||
} |
||||
|
||||
function filter(&$coverage) { |
||||
foreach ($coverage as $file => $line) { |
||||
if (!$this->isFileIncluded($file)) { |
||||
unset($coverage[$file]); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function isFileIncluded($file) { |
||||
if (!empty($this->excludes)) { |
||||
foreach ($this->excludes as $path) { |
||||
if (preg_match('|' . $path . '|', $file)) { |
||||
return False; |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (!empty($this->includes)) { |
||||
foreach ($this->includes as $path) { |
||||
if (preg_match('|' . $path . '|', $file)) { |
||||
return True; |
||||
} |
||||
} |
||||
return False; |
||||
} |
||||
|
||||
return True; |
||||
} |
||||
|
||||
function isDirectoryIncluded($dir, $directoryDepth) { |
||||
if ($directoryDepth >= $this->maxDirectoryDepth) { |
||||
return false; |
||||
} |
||||
if (isset($this->excludes)) { |
||||
foreach ($this->excludes as $path) { |
||||
if (preg_match('|' . $path . '|', $dir)) { |
||||
return False; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return True; |
||||
} |
||||
|
||||
static function isCoverageOn() { |
||||
$coverage = self::getInstance(); |
||||
$coverage->readSettings(); |
||||
if (empty($coverage->log) || !file_exists($coverage->log)) { |
||||
trigger_error('No coverage log'); |
||||
return False; |
||||
} |
||||
return True; |
||||
} |
||||
|
||||
static function getInstance() { |
||||
if (self::$instance == NULL) { |
||||
self::$instance = new CodeCoverage(); |
||||
self::$instance->readSettings(); |
||||
} |
||||
return self::$instance; |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,98 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
class CoverageCalculator { |
||||
|
||||
function coverageByFileVariables($file, $coverage) { |
||||
$hnd = fopen($file, 'r'); |
||||
if ($hnd == null) { |
||||
throw new Exception("File $file is missing"); |
||||
} |
||||
$lines = array(); |
||||
for ($i = 1; !feof($hnd); $i++) { |
||||
$line = fgets($hnd); |
||||
$lineCoverage = $this->lineCoverageCodeToStyleClass($coverage, $i); |
||||
$lines[$i] = array('lineCoverage' => $lineCoverage, 'code' => $line); |
||||
} |
||||
|
||||
fclose($hnd); |
||||
|
||||
$var = compact('file', 'lines', 'coverage'); |
||||
return $var; |
||||
} |
||||
|
||||
function lineCoverageCodeToStyleClass($coverage, $line) { |
||||
if (!array_key_exists($line, $coverage)) { |
||||
return "comment"; |
||||
} |
||||
$code = $coverage[$line]; |
||||
if (empty($code)) { |
||||
return "comment"; |
||||
} |
||||
switch ($code) { |
||||
case -1: |
||||
return "missed"; |
||||
case -2: |
||||
return "dead"; |
||||
} |
||||
|
||||
return "covered"; |
||||
} |
||||
|
||||
function totalLoc($total, $coverage) { |
||||
return $total + sizeof($coverage); |
||||
} |
||||
|
||||
function lineCoverage($total, $line) { |
||||
# NOTE: counting dead code as covered, as it's almost always an executable line |
||||
# strange artifact of xdebug or underlying system |
||||
return $total + ($line > 0 || $line == -2 ? 1 : 0); |
||||
} |
||||
|
||||
function totalCoverage($total, $coverage) { |
||||
return $total + array_reduce($coverage, array(&$this, "lineCoverage")); |
||||
} |
||||
|
||||
static function reportFilename($filename) { |
||||
return preg_replace('|[/\\\\]|', '_', $filename) . '.html'; |
||||
} |
||||
|
||||
function percentCoverageByFile($coverage, $file, &$results) { |
||||
$byFileReport = self::reportFilename($file); |
||||
|
||||
$loc = sizeof($coverage); |
||||
if ($loc == 0) |
||||
return 0; |
||||
$lineCoverage = array_reduce($coverage, array(&$this, "lineCoverage")); |
||||
$percentage = 100 * ($lineCoverage / $loc); |
||||
$results[0][$file] = array('byFileReport' => $byFileReport, 'percentage' => $percentage); |
||||
} |
||||
|
||||
function variables($coverage, $untouched) { |
||||
$coverageByFile = array(); |
||||
array_walk($coverage, array(&$this, "percentCoverageByFile"), array(&$coverageByFile)); |
||||
|
||||
$totalLoc = array_reduce($coverage, array(&$this, "totalLoc")); |
||||
|
||||
if ($totalLoc > 0) { |
||||
$totalLinesOfCoverage = array_reduce($coverage, array(&$this, "totalCoverage")); |
||||
$totalPercentCoverage = 100 * ($totalLinesOfCoverage / $totalLoc); |
||||
} |
||||
|
||||
$untouchedPercentageDenominator = sizeof($coverage) + sizeof($untouched); |
||||
if ($untouchedPercentageDenominator > 0) { |
||||
$filesTouchedPercentage = 100 * sizeof($coverage) / $untouchedPercentageDenominator; |
||||
} |
||||
|
||||
$var = compact('coverageByFile', 'totalPercentCoverage', 'totalLoc', 'totalLinesOfCoverage', 'filesTouchedPercentage'); |
||||
$var['untouched'] = $untouched; |
||||
return $var; |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,125 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* @todo which db abstraction layer is this? |
||||
*/ |
||||
require_once 'DB/sqlite.php'; |
||||
|
||||
/** |
||||
* Persists code coverage data into SQLite database and aggregate data for convienent |
||||
* interpretation in report generator. Be sure to not to keep an instance longer |
||||
* than you have, otherwise you risk overwriting database edits from another process |
||||
* also trying to make updates. |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
class CoverageDataHandler { |
||||
|
||||
var $db; |
||||
|
||||
function __construct($filename) { |
||||
$this->filename = $filename; |
||||
$this->db = new SQLiteDatabase($filename); |
||||
if (empty($this->db)) { |
||||
throw new Exception("Could not create sqlite db ". $filename); |
||||
} |
||||
} |
||||
|
||||
function createSchema() { |
||||
$this->db->queryExec("create table untouched (filename text)"); |
||||
$this->db->queryExec("create table coverage (name text, coverage text)"); |
||||
} |
||||
|
||||
function &getFilenames() { |
||||
$filenames = array(); |
||||
$cursor = $this->db->unbufferedQuery("select distinct name from coverage"); |
||||
while ($row = $cursor->fetch()) { |
||||
$filenames[] = $row[0]; |
||||
} |
||||
|
||||
return $filenames; |
||||
} |
||||
|
||||
function write($coverage) { |
||||
foreach ($coverage as $file => $lines) { |
||||
$coverageStr = serialize($lines); |
||||
$relativeFilename = self::ltrim(getcwd() . '/', $file); |
||||
$sql = "insert into coverage (name, coverage) values ('$relativeFilename', '$coverageStr')"; |
||||
# if this fails, check you have write permission |
||||
$this->db->queryExec($sql); |
||||
} |
||||
} |
||||
|
||||
function read() { |
||||
$coverage = array_flip($this->getFilenames()); |
||||
foreach($coverage as $file => $garbage) { |
||||
$coverage[$file] = $this->readFile($file); |
||||
} |
||||
return $coverage; |
||||
} |
||||
|
||||
function &readFile($file) { |
||||
$sql = "select coverage from coverage where name = '$file'"; |
||||
$aggregate = array(); |
||||
$result = $this->db->query($sql); |
||||
while ($result->valid()) { |
||||
$row = $result->current(); |
||||
$this->aggregateCoverage($aggregate, unserialize($row[0])); |
||||
$result->next(); |
||||
} |
||||
|
||||
return $aggregate; |
||||
} |
||||
|
||||
function aggregateCoverage(&$total, $next) { |
||||
foreach ($next as $lineno => $code) { |
||||
if (!isset($total[$lineno])) { |
||||
$total[$lineno] = $code; |
||||
} else { |
||||
$total[$lineno] = $this->aggregateCoverageCode($total[$lineno], $code); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function aggregateCoverageCode($code1, $code2) { |
||||
switch($code1) { |
||||
case -2: return -2; |
||||
case -1: return $code2; |
||||
default: |
||||
switch ($code2) { |
||||
case -2: return -2; |
||||
case -1: return $code1; |
||||
} |
||||
} |
||||
return $code1 + $code2; |
||||
} |
||||
|
||||
static function ltrim($cruft, $pristine) { |
||||
if(stripos($pristine, $cruft) === 0) { |
||||
return substr($pristine, strlen($cruft)); |
||||
} |
||||
return $pristine; |
||||
} |
||||
|
||||
function writeUntouchedFile($file) { |
||||
$relativeFile = CoverageDataHandler::ltrim('./', $file); |
||||
$sql = "insert into untouched values ('$relativeFile')"; |
||||
$this->db->queryExec($sql); |
||||
} |
||||
|
||||
function &readUntouchedFiles() { |
||||
$untouched = array(); |
||||
$result = $this->db->query("select filename from untouched order by filename"); |
||||
while ($result->valid()) { |
||||
$row = $result->current(); |
||||
$untouched[] = $row[0]; |
||||
$result->next(); |
||||
} |
||||
|
||||
return $untouched; |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,68 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/**#@+ |
||||
* include additional coverage files |
||||
*/ |
||||
require_once dirname(__FILE__) .'/coverage_calculator.php'; |
||||
require_once dirname(__FILE__) .'/coverage_utils.php'; |
||||
require_once dirname(__FILE__) .'/simple_coverage_writer.php'; |
||||
/**#@-*/ |
||||
|
||||
/** |
||||
* Take aggregated coverage data and generate reports from it using smarty |
||||
* templates |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
class CoverageReporter { |
||||
var $coverage; |
||||
var $untouched; |
||||
var $reportDir; |
||||
var $title = 'Coverage'; |
||||
var $writer; |
||||
var $calculator; |
||||
|
||||
function __construct() { |
||||
$this->writer = new SimpleCoverageWriter(); |
||||
$this->calculator = new CoverageCalculator(); |
||||
} |
||||
|
||||
function generateSummaryReport($out) { |
||||
$variables = $this->calculator->variables($this->coverage, $this->untouched); |
||||
$variables['title'] = $this->title; |
||||
$report = $this->writer->writeSummary($out, $variables); |
||||
fwrite($out, $report); |
||||
} |
||||
|
||||
function generate() { |
||||
CoverageUtils::mkdir($this->reportDir); |
||||
|
||||
$index = $this->reportDir .'/index.html'; |
||||
$hnd = fopen($index, 'w'); |
||||
$this->generateSummaryReport($hnd); |
||||
fclose($hnd); |
||||
|
||||
foreach ($this->coverage as $file => $cov) { |
||||
$byFile = $this->reportDir .'/'. self::reportFilename($file); |
||||
$byFileHnd = fopen($byFile, 'w'); |
||||
$this->generateCoverageByFile($byFileHnd, $file, $cov); |
||||
fclose($byFileHnd); |
||||
} |
||||
|
||||
echo "generated report $index\n"; |
||||
} |
||||
|
||||
function generateCoverageByFile($out, $file, $cov) { |
||||
$variables = $this->calculator->coverageByFileVariables($file, $cov); |
||||
$variables['title'] = $this->title .' - '. $file; |
||||
$this->writer->writeByFile($out, $variables); |
||||
} |
||||
|
||||
static function reportFilename($filename) { |
||||
return preg_replace('|[/\\\\]|', '_', $filename) . '.html'; |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,114 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
class CoverageUtils { |
||||
|
||||
static function mkdir($dir) { |
||||
if (!file_exists($dir)) { |
||||
mkdir($dir, 0777, True); |
||||
} else { |
||||
if (!is_dir($dir)) { |
||||
throw new Exception($dir .' exists as a file, not a directory'); |
||||
} |
||||
} |
||||
} |
||||
|
||||
static function requireSqlite() { |
||||
if (!self::isPackageClassAvailable('DB/sqlite.php', 'SQLiteDatabase')) { |
||||
echo "sqlite library is required to be installed and available in include_path"; |
||||
exit(1); |
||||
} |
||||
} |
||||
|
||||
static function isPackageClassAvailable($includeFile, $class) { |
||||
@include_once($includeFile); |
||||
return class_exists($class); |
||||
} |
||||
|
||||
/** |
||||
* Parses simple parameters from CLI. |
||||
* |
||||
* Puts trailing parameters into string array in 'extraArguments' |
||||
* |
||||
* Example: |
||||
* $args = CoverageUtil::parseArguments($_SERVER['argv']); |
||||
* if ($args['verbose']) echo "Verbose Mode On\n"; |
||||
* $files = $args['extraArguments']; |
||||
* |
||||
* Example CLI: |
||||
* --foo=blah -x -h some trailing arguments |
||||
* |
||||
* if multiValueMode is true |
||||
* Example CLI: |
||||
* --include=a --include=b --exclude=c |
||||
* Then |
||||
* $args = CoverageUtil::parseArguments($_SERVER['argv']); |
||||
* $args['include[]'] will equal array('a', 'b') |
||||
* $args['exclude[]'] will equal array('c') |
||||
* $args['exclude'] will equal c |
||||
* $args['include'] will equal b NOTE: only keeps last value |
||||
* |
||||
* @param unknown_type $argv |
||||
* @param supportMutliValue - will store 2nd copy of value in an array with key "foo[]" |
||||
* @return unknown |
||||
*/ |
||||
static public function parseArguments($argv, $mutliValueMode = False) { |
||||
$args = array(); |
||||
$args['extraArguments'] = array(); |
||||
array_shift($argv); // scriptname |
||||
foreach ($argv as $arg) { |
||||
if (ereg('^--([^=]+)=(.*)', $arg, $reg)) { |
||||
$args[$reg[1]] = $reg[2]; |
||||
if ($mutliValueMode) { |
||||
self::addItemAsArray($args, $reg[1], $reg[2]); |
||||
} |
||||
} elseif (ereg('^[-]{1,2}([^[:blank:]]+)', $arg, $reg)) { |
||||
$nonnull = ''; |
||||
$args[$reg[1]] = $nonnull; |
||||
if ($mutliValueMode) { |
||||
self::addItemAsArray($args, $reg[1], $nonnull); |
||||
} |
||||
} else { |
||||
$args['extraArguments'][] = $arg; |
||||
} |
||||
} |
||||
|
||||
return $args; |
||||
} |
||||
|
||||
/** |
||||
* Adds a value as an array of one, or appends to an existing array elements |
||||
* |
||||
* @param unknown_type $array |
||||
* @param unknown_type $item |
||||
*/ |
||||
static function addItemAsArray(&$array, $key, $item) { |
||||
$array_key = $key .'[]'; |
||||
if (array_key_exists($array_key, $array)) { |
||||
$array[$array_key][] = $item; |
||||
} else { |
||||
$array[$array_key] = array($item); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* isset function with default value |
||||
* |
||||
* Example: $z = CoverageUtils::issetOr($array[$key], 'no value given') |
||||
* |
||||
* @param unknown_type $val |
||||
* @param unknown_type $default |
||||
* @return first value unless value is not set then returns 2nd arg or null if no 2nd arg |
||||
*/ |
||||
static public function issetOr(&$val, $default = null) |
||||
{ |
||||
return isset($val) ? $val : $default; |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,16 @@ |
||||
<?php |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
/** |
||||
* @package SimpleTest |
||||
* @subpackage Extensions |
||||
*/ |
||||
interface CoverageWriter { |
||||
|
||||
function writeSummary($out, $variables); |
||||
|
||||
function writeByFile($out, $variables); |
||||
} |
||||
?> |
@ -0,0 +1,39 @@ |
||||
<?php |
||||
/** |
||||
* SimpleCoverageWriter class file |
||||
* @package SimpleTest |
||||
* @subpackage UnitTester |
||||
* @version $Id: unit_tester.php 1882 2009-07-01 14:30:05Z lastcraft $ |
||||
*/ |
||||
/** |
||||
* base coverage writer class |
||||
*/ |
||||
require_once dirname(__FILE__) .'/coverage_writer.php'; |
||||
|
||||
/** |
||||
* SimpleCoverageWriter class |
||||
* @package SimpleTest |
||||
* @subpackage UnitTester |
||||
*/ |
||||
class SimpleCoverageWriter implements CoverageWriter { |
||||
|
||||
function writeSummary($out, $variables) { |
||||
extract($variables); |
||||
$now = date("F j, Y, g:i a"); |
||||
ob_start(); |
||||
include dirname(__FILE__) . '/templates/index.php'; |
||||
$contents = ob_get_contents(); |
||||
fwrite ($out, $contents); |
||||
ob_end_clean(); |
||||
} |
||||
|
||||
function writeByFile($out, $variables) { |
||||
extract($variables); |
||||
ob_start(); |
||||
include dirname(__FILE__) . '/templates/file.php'; |
||||
$contents = ob_get_contents(); |
||||
fwrite ($out, $contents); |
||||
ob_end_clean(); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,60 @@ |
||||
<html> |
||||
<head> |
||||
<title><?php echo $title ?></title>
|
||||
</head> |
||||
<style type="text/css"> |
||||
body { |
||||
font-family: "Gill Sans MT", "Gill Sans", GillSans, Arial, Helvetica, sans-serif; |
||||
} |
||||
h1 { |
||||
font-size: medium; |
||||
} |
||||
#code { |
||||
border-spacing: 0; |
||||
} |
||||
.lineNo { |
||||
color: #ccc; |
||||
} |
||||
.code, .lineNo { |
||||
white-space: pre; |
||||
font-family: monospace; |
||||
} |
||||
.covered { |
||||
color: #090; |
||||
} |
||||
.missed { |
||||
color: #f00; |
||||
} |
||||
.dead { |
||||
color: #00f; |
||||
} |
||||
.comment { |
||||
color: #333; |
||||
} |
||||
</style> |
||||
<body> |
||||
<h1 id="title"><?php echo $title ?></h1>
|
||||
<table id="code"> |
||||
<tbody> |
||||
<?php foreach ($lines as $lineNo => $line) { ?> |
||||
<tr> |
||||
<td><span class="lineNo"><?php echo $lineNo ?></span></td>
|
||||
<td><span class="<?php echo $line['lineCoverage'] ?> code"><?php echo htmlentities($line['code']) ?></span></td>
|
||||
</tr> |
||||
<?php } ?> |
||||
</tbody> |
||||
</table> |
||||
<h2>Legend</h2> |
||||
<dl> |
||||
<dt><span class="missed">Missed</span></dt> |
||||
<dd>lines code that <strong>were not</strong> excersized during program execution.</dd> |
||||
<dt><span class="covered">Covered</span></dt> |
||||
<dd>lines code <strong>were</strong> excersized during program execution.</dd> |
||||
<dt><span class="comment">Comment/non executable</span></dt> |
||||
<dd>Comment or non-executable line of code.</dd> |
||||
<dt><span class="dead">Dead</span></dt> |
||||
<dd>lines of code that according to xdebug could not be executed. This is counted as coverage code because |
||||
in almost all cases it is code that runnable.</dd> |
||||
</dl> |
||||
</body> |
||||
</html> |
@ -0,0 +1,106 @@ |
||||
<html> |
||||
<head> |
||||
<title><?php echo $title ?></title>
|
||||
</head> |
||||
<style type="text/css"> |
||||
h1 { |
||||
font-size: medium; |
||||
} |
||||
|
||||
body { |
||||
font-family: "Gill Sans MT", "Gill Sans", GillSans, Arial, Helvetica, |
||||
sans-serif; |
||||
} |
||||
|
||||
td.percentage { |
||||
text-align: right; |
||||
} |
||||
|
||||
caption { |
||||
border-bottom: thin solid; |
||||
font-weight: bolder; |
||||
} |
||||
|
||||
dt { |
||||
font-weight: bolder; |
||||
} |
||||
|
||||
table { |
||||
margin: 1em; |
||||
} |
||||
</style> |
||||
<body> |
||||
<h1 id="title"><?php echo $title ?></h1>
|
||||
<table> |
||||
<caption>Summary</caption> |
||||
<tbody> |
||||
<tr> |
||||
<td>Total Coverage (<a href="#total-coverage">?</a>) :</td> |
||||
<td class="percentage"><span class="totalPercentCoverage"><?php echo number_format($totalPercentCoverage, 0) ?>%</span></td>
|
||||
</tr> |
||||
<tr> |
||||
<td>Total Files Covered (<a href="#total-files-covered">?</a>) :</td> |
||||
<td class="percentage"><span class="filesTouchedPercentage"><?php echo number_format($filesTouchedPercentage, 0) ?>%</span></td>
|
||||
</tr> |
||||
<tr> |
||||
<td>Report Generation Date :</td> |
||||
<td><?php echo $now ?></td>
|
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
<table id="covered-files"> |
||||
<caption>Coverage (<a href="#coverage">?</a>)</caption> |
||||
<thead> |
||||
<tr> |
||||
<th>File</th> |
||||
<th>Coverage</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<?php foreach ($coverageByFile as $file => $coverage) { ?> |
||||
<tr> |
||||
<td><a class="byFileReportLink" href="<?php echo $coverage['byFileReport'] ?>"><?php echo $file ?></a></td>
|
||||
<td class="percentage"><span class="percentCoverage"><?php echo number_format($coverage['percentage'], 0) ?>%</span></td>
|
||||
</tr> |
||||
<?php } ?> |
||||
</tbody> |
||||
</table> |
||||
<table> |
||||
<caption>Files Not Covered (<a href="#untouched">?</a>)</caption> |
||||
<tbody> |
||||
<?php foreach ($untouched as $key => $file) { ?> |
||||
<tr> |
||||
<td><span class="untouchedFile"><?php echo $file ?></span></td>
|
||||
</tr> |
||||
<?php } ?> |
||||
</tbody> |
||||
</table> |
||||
|
||||
<h2>Glossary</h2> |
||||
<dl> |
||||
<dt><a name="total-coverage">Total Coverage</a></dt> |
||||
<dd>Ratio of all the lines of executable code that were executed to the |
||||
lines of code that were not executed. This does not include the files |
||||
that were not covered at all.</dd> |
||||
<dt><a name="total-files-covered">Total Files Covered</a></dt> |
||||
<dd>This is the ratio of the number of files tested, to the number of |
||||
files not tested at all.</dd> |
||||
<dt><a name="coverage">Coverage</a></dt> |
||||
<dd>These files were parsed and loaded by the php interpreter while |
||||
running the tests. Percentage is determined by the ratio of number of |
||||
lines of code executed to the number of possible executable lines of |
||||
code. "dead" lines of code, or code that could not be executed |
||||
according to xdebug, are counted as covered because in almost all cases |
||||
it is the end of a logical loop.</dd> |
||||
<dt><a name="untouched">Files Not Covered</a></dt> |
||||
<dd>These files were not loaded by the php interpreter at anytime |
||||
during a unit test. You could consider these files having 0% coverage, |
||||
but because it is difficult to determine the total coverage unless you |
||||
could count the lines for executable code, this is not reflected in the |
||||
Total Coverage calculation.</dd> |
||||
</dl> |
||||
|
||||
<p>Code coverage generated by <a href="http://www.simpletest.org">SimpleTest</a></p> |
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,65 @@ |
||||
<?php |
||||
require_once(dirname(__FILE__) . '/../../../autorun.php'); |
||||
|
||||
class CoverageCalculatorTest extends UnitTestCase { |
||||
function skip() { |
||||
$this->skipIf( |
||||
!file_exists('DB/sqlite.php'), |
||||
'The Coverage extension needs to have PEAR installed'); |
||||
} |
||||
|
||||
function setUp() { |
||||
require_once dirname(__FILE__) .'/../coverage_calculator.php'; |
||||
$this->calc = new CoverageCalculator(); |
||||
} |
||||
|
||||
function testVariables() { |
||||
$coverage = array('file' => array(1,1,1,1)); |
||||
$untouched = array('missed-file'); |
||||
$variables = $this->calc->variables($coverage, $untouched); |
||||
$this->assertEqual(4, $variables['totalLoc']); |
||||
$this->assertEqual(100, $variables['totalPercentCoverage']); |
||||
$this->assertEqual(4, $variables['totalLinesOfCoverage']); |
||||
$expected = array('file' => array('byFileReport' => 'file.html', 'percentage' => 100)); |
||||
$this->assertEqual($expected, $variables['coverageByFile']); |
||||
$this->assertEqual(50, $variables['filesTouchedPercentage']); |
||||
$this->assertEqual($untouched, $variables['untouched']); |
||||
} |
||||
|
||||
function testPercentageCoverageByFile() { |
||||
$coverage = array(0,0,0,1,1,1); |
||||
$results = array(); |
||||
$this->calc->percentCoverageByFile($coverage, 'file', $results); |
||||
$pct = $results[0]; |
||||
$this->assertEqual(50, $pct['file']['percentage']); |
||||
$this->assertEqual('file.html', $pct['file']['byFileReport']); |
||||
} |
||||
|
||||
function testTotalLoc() { |
||||
$this->assertEqual(13, $this->calc->totalLoc(10, array(1,2,3))); |
||||
} |
||||
|
||||
function testLineCoverage() { |
||||
$this->assertEqual(10, $this->calc->lineCoverage(10, -1)); |
||||
$this->assertEqual(10, $this->calc->lineCoverage(10, 0)); |
||||
$this->assertEqual(11, $this->calc->lineCoverage(10, 1)); |
||||
} |
||||
|
||||
function testTotalCoverage() { |
||||
$this->assertEqual(11, $this->calc->totalCoverage(10, array(-1,1))); |
||||
} |
||||
|
||||
static function getAttribute($element, $attribute) { |
||||
$a = $element->attributes(); |
||||
return $a[$attribute]; |
||||
} |
||||
|
||||
static function dom($stream) { |
||||
rewind($stream); |
||||
$actual = stream_get_contents($stream); |
||||
$html = DOMDocument::loadHTML($actual); |
||||
return simplexml_import_dom($html); |
||||
} |
||||
} |
||||
|
||||
?> |
@ -0,0 +1,83 @@ |
||||
<?php |
||||
require_once(dirname(__FILE__) . '/../../../autorun.php'); |
||||
|
||||
class CoverageDataHandlerTest extends UnitTestCase { |
||||
function skip() { |
||||
$this->skipIf( |
||||
!file_exists('DB/sqlite.php'), |
||||
'The Coverage extension needs to have PEAR installed'); |
||||
} |
||||
|
||||
function setUp() { |
||||
require_once dirname(__FILE__) .'/../coverage_data_handler.php'; |
||||
} |
||||
|
||||
function testAggregateCoverageCode() { |
||||
$handler = new CoverageDataHandler($this->tempdb()); |
||||
$this->assertEqual(-2, $handler->aggregateCoverageCode(-2, -2)); |
||||
$this->assertEqual(-2, $handler->aggregateCoverageCode(-2, 10)); |
||||
$this->assertEqual(-2, $handler->aggregateCoverageCode(10, -2)); |
||||
$this->assertEqual(-1, $handler->aggregateCoverageCode(-1, -1)); |
||||
$this->assertEqual(10, $handler->aggregateCoverageCode(-1, 10)); |
||||
$this->assertEqual(10, $handler->aggregateCoverageCode(10, -1)); |
||||
$this->assertEqual(20, $handler->aggregateCoverageCode(10, 10)); |
||||
} |
||||
|
||||
function testSimpleWriteRead() { |
||||
$handler = new CoverageDataHandler($this->tempdb()); |
||||
$handler->createSchema(); |
||||
$coverage = array(10 => -2, 20 => -1, 30 => 0, 40 => 1); |
||||
$handler->write(array('file' => $coverage)); |
||||
|
||||
$actual = $handler->readFile('file'); |
||||
$expected = array(10 => -2, 20 => -1, 30 => 0, 40 => 1); |
||||
$this->assertEqual($expected, $actual); |
||||
} |
||||
|
||||
function testMultiFileWriteRead() { |
||||
$handler = new CoverageDataHandler($this->tempdb()); |
||||
$handler->createSchema(); |
||||
$handler->write(array( |
||||
'file1' => array(-2, -1, 1), |
||||
'file2' => array(-2, -1, 1) |
||||
)); |
||||
$handler->write(array( |
||||
'file1' => array(-2, -1, 1) |
||||
)); |
||||
|
||||
$expected = array( |
||||
'file1' => array(-2, -1, 2), |
||||
'file2' => array(-2, -1, 1) |
||||
); |
||||
$actual = $handler->read(); |
||||
$this->assertEqual($expected, $actual); |
||||
} |
||||
|
||||
function testGetfilenames() { |
||||
$handler = new CoverageDataHandler($this->tempdb()); |
||||
$handler->createSchema(); |
||||
$rawCoverage = array('file0' => array(), 'file1' => array()); |
||||
$handler->write($rawCoverage); |
||||
$actual = $handler->getFilenames(); |
||||
$this->assertEqual(array('file0', 'file1'), $actual); |
||||
} |
||||
|
||||
function testWriteUntouchedFiles() { |
||||
$handler = new CoverageDataHandler($this->tempdb()); |
||||
$handler->createSchema(); |
||||
$handler->writeUntouchedFile('bluejay'); |
||||
$handler->writeUntouchedFile('robin'); |
||||
$this->assertEqual(array('bluejay', 'robin'), $handler->readUntouchedFiles()); |
||||
} |
||||
|
||||
function testLtrim() { |
||||
$this->assertEqual('ber', CoverageDataHandler::ltrim('goo', 'goober')); |
||||
$this->assertEqual('some/file', CoverageDataHandler::ltrim('./', './some/file')); |
||||
$this->assertEqual('/x/y/z/a/b/c', CoverageDataHandler::ltrim('/a/b/', '/x/y/z/a/b/c')); |
||||
} |
||||
|
||||
function tempdb() { |
||||
return tempnam(NULL, 'coverage.test.db'); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,22 @@ |
||||
<?php |
||||
require_once(dirname(__FILE__) . '/../../../autorun.php'); |
||||
|
||||
class CoverageReporterTest extends UnitTestCase { |
||||
function skip() { |
||||
$this->skipIf( |
||||
!file_exists('DB/sqlite.php'), |
||||
'The Coverage extension needs to have PEAR installed'); |
||||
} |
||||
|
||||
function setUp() { |
||||
require_once dirname(__FILE__) .'/../coverage_reporter.php'; |
||||
new CoverageReporter(); |
||||
} |
||||
|
||||
function testreportFilename() { |
||||
$this->assertEqual("parula.php.html", CoverageReporter::reportFilename("parula.php")); |
||||
$this->assertEqual("warbler_parula.php.html", CoverageReporter::reportFilename("warbler/parula.php")); |
||||
$this->assertEqual("warbler_parula.php.html", CoverageReporter::reportFilename("warbler\\parula.php")); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,109 @@ |
||||
<?php |
||||
require_once(dirname(__FILE__) . '/../../../autorun.php'); |
||||
require_once(dirname(__FILE__) . '/../../../mock_objects.php'); |
||||
|
||||
class CodeCoverageTest extends UnitTestCase { |
||||
function skip() { |
||||
$this->skipIf( |
||||
!file_exists('DB/sqlite.php'), |
||||
'The Coverage extension needs to have PEAR installed'); |
||||
} |
||||
|
||||
function setUp() { |
||||
require_once dirname(__FILE__) .'/../coverage.php'; |
||||
} |
||||
|
||||
function testIsFileIncluded() { |
||||
$coverage = new CodeCoverage(); |
||||
$this->assertTrue($coverage->isFileIncluded('aaa')); |
||||
$coverage->includes = array('a'); |
||||
$this->assertTrue($coverage->isFileIncluded('aaa')); |
||||
$coverage->includes = array('x'); |
||||
$this->assertFalse($coverage->isFileIncluded('aaa')); |
||||
$coverage->excludes = array('aa'); |
||||
$this->assertFalse($coverage->isFileIncluded('aaa')); |
||||
} |
||||
|
||||
function testIsFileIncludedRegexp() { |
||||
$coverage = new CodeCoverage(); |
||||
$coverage->includes = array('modules/.*\.php$'); |
||||
$coverage->excludes = array('bad-bunny.php'); |
||||
$this->assertFalse($coverage->isFileIncluded('modules/a.test')); |
||||
$this->assertFalse($coverage->isFileIncluded('modules/bad-bunny.test')); |
||||
$this->assertTrue($coverage->isFileIncluded('modules/test.php')); |
||||
$this->assertFalse($coverage->isFileIncluded('module-bad/good-bunny.php')); |
||||
$this->assertTrue($coverage->isFileIncluded('modules/good-bunny.php')); |
||||
} |
||||
|
||||
function testIsDirectoryIncludedPastMaxDepth() { |
||||
$coverage = new CodeCoverage(); |
||||
$coverage->maxDirectoryDepth = 5; |
||||
$this->assertTrue($coverage->isDirectoryIncluded('aaa', 1)); |
||||
$this->assertFalse($coverage->isDirectoryIncluded('aaa', 5)); |
||||
} |
||||
|
||||
function testIsDirectoryIncluded() { |
||||
$coverage = new CodeCoverage(); |
||||
$this->assertTrue($coverage->isDirectoryIncluded('aaa', 0)); |
||||
$coverage->excludes = array('b$'); |
||||
$this->assertTrue($coverage->isDirectoryIncluded('aaa', 0)); |
||||
$coverage->includes = array('a$'); // includes are ignore, all dirs are included unless excluded |
||||
$this->assertTrue($coverage->isDirectoryIncluded('aaa', 0)); |
||||
$coverage->excludes = array('.*a$'); |
||||
$this->assertFalse($coverage->isDirectoryIncluded('aaa', 0)); |
||||
} |
||||
|
||||
function testFilter() { |
||||
$coverage = new CodeCoverage(); |
||||
$data = array('a' => 0, 'b' => 0, 'c' => 0); |
||||
$coverage->includes = array('b'); |
||||
$coverage->filter($data); |
||||
$this->assertEqual(array('b' => 0), $data); |
||||
} |
||||
|
||||
function testUntouchedFiles() { |
||||
$coverage = new CodeCoverage(); |
||||
$touched = array_flip(array("test/coverage_test.php")); |
||||
$actual = array(); |
||||
$coverage->includes = array('coverage_test\.php$'); |
||||
$parentDir = realpath(dirname(__FILE__)); |
||||
$coverage->getUntouchedFiles($actual, $touched, $parentDir, $parentDir); |
||||
$this->assertEqual(array("coverage_test.php"), $actual); |
||||
} |
||||
|
||||
function testResetLog() { |
||||
$coverage = new CodeCoverage(); |
||||
$coverage->log = tempnam(NULL, 'php.xdebug.coverage.test.'); |
||||
$coverage->resetLog(); |
||||
$this->assertTrue(file_exists($coverage->log)); |
||||
} |
||||
|
||||
function testSettingsSerialization() { |
||||
$coverage = new CodeCoverage(); |
||||
$coverage->log = '/banana/boat'; |
||||
$coverage->includes = array('apple', 'orange'); |
||||
$coverage->excludes = array('tomato', 'pea'); |
||||
$data = $coverage->getSettings(); |
||||
$this->assertNotNull($data); |
||||
|
||||
$actual = new CodeCoverage(); |
||||
$actual->setSettings($data); |
||||
$this->assertEqual('/banana/boat', $actual->log); |
||||
$this->assertEqual(array('apple', 'orange'), $actual->includes); |
||||
$this->assertEqual(array('tomato', 'pea'), $actual->excludes); |
||||
} |
||||
|
||||
function testSettingsCanBeReadWrittenToDisk() { |
||||
$settings_file = 'banana-boat-coverage-settings-test.dat'; |
||||
$coverage = new CodeCoverage(); |
||||
$coverage->log = '/banana/boat'; |
||||
$coverage->settingsFile = $settings_file; |
||||
$coverage->writeSettings(); |
||||
|
||||
$actual = new CodeCoverage(); |
||||
$actual->settingsFile = $settings_file; |
||||
$actual->readSettings(); |
||||
$this->assertEqual('/banana/boat', $actual->log); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,70 @@ |
||||
<?php |
||||
require_once dirname(__FILE__) . '/../../../autorun.php'; |
||||
|
||||
class CoverageUtilsTest extends UnitTestCase { |
||||
function skip() { |
||||
$this->skipIf( |
||||
!file_exists('DB/sqlite.php'), |
||||
'The Coverage extension needs to have PEAR installed'); |
||||
} |
||||
|
||||
function setUp() { |
||||
require_once dirname(__FILE__) .'/../coverage_utils.php'; |
||||
} |
||||
|
||||
function testMkdir() { |
||||
CoverageUtils::mkdir(dirname(__FILE__)); |
||||
try { |
||||
CoverageUtils::mkdir(__FILE__); |
||||
$this->fail("Should give error about cannot create dir of a file"); |
||||
} catch (Exception $expected) { |
||||
} |
||||
} |
||||
|
||||
function testIsPackageClassAvailable() { |
||||
$coverageSource = dirname(__FILE__) .'/../coverage_calculator.php'; |
||||
$this->assertTrue(CoverageUtils::isPackageClassAvailable($coverageSource, 'CoverageCalculator')); |
||||
$this->assertFalse(CoverageUtils::isPackageClassAvailable($coverageSource, 'BogusCoverage')); |
||||
$this->assertFalse(CoverageUtils::isPackageClassAvailable('bogus-file', 'BogusCoverage')); |
||||
$this->assertTrue(CoverageUtils::isPackageClassAvailable('bogus-file', 'CoverageUtils')); |
||||
} |
||||
|
||||
function testParseArgumentsMultiValue() { |
||||
$actual = CoverageUtils::parseArguments(array('scriptname', '--a=b', '--a=c'), True); |
||||
$expected = array('extraArguments' => array(), 'a' => 'c', 'a[]' => array('b', 'c')); |
||||
$this->assertEqual($expected, $actual); |
||||
} |
||||
|
||||
function testParseArguments() { |
||||
$actual = CoverageUtils::parseArguments(array('scriptname', '--a=b', '-c', 'xxx')); |
||||
$expected = array('a' => 'b', 'c' => '', 'extraArguments' => array('xxx')); |
||||
$this->assertEqual($expected, $actual); |
||||
} |
||||
|
||||
function testParseDoubleDashNoArguments() { |
||||
$actual = CoverageUtils::parseArguments(array('scriptname', '--aa')); |
||||
$this->assertTrue(isset($actual['aa'])); |
||||
} |
||||
|
||||
function testParseHyphenedExtraArguments() { |
||||
$actual = CoverageUtils::parseArguments(array('scriptname', '--alpha-beta=b', 'gamma-lambda')); |
||||
$expected = array('alpha-beta' => 'b', 'extraArguments' => array('gamma-lambda')); |
||||
$this->assertEqual($expected, $actual); |
||||
} |
||||
|
||||
function testAddItemAsArray() { |
||||
$actual = array(); |
||||
CoverageUtils::addItemAsArray($actual, 'bird', 'duck'); |
||||
$this->assertEqual(array('bird[]' => array('duck')), $actual); |
||||
|
||||
CoverageUtils::addItemAsArray(&$actual, 'bird', 'pigeon'); |
||||
$this->assertEqual(array('bird[]' => array('duck', 'pigeon')), $actual); |
||||
} |
||||
|
||||
function testIssetOr() { |
||||
$data = array('bird' => 'gull'); |
||||
$this->assertEqual('lab', CoverageUtils::issetOr($data['dog'], 'lab')); |
||||
$this->assertEqual('gull', CoverageUtils::issetOr($data['bird'], 'sparrow')); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,4 @@ |
||||
<?php |
||||
// sample code |
||||
$x = 1 + 2; |
||||
if (false) echo "dead"; |
@ -0,0 +1,69 @@ |
||||
<?php |
||||
require_once(dirname(__FILE__) . '/../../../autorun.php'); |
||||
|
||||
class SimpleCoverageWriterTest extends UnitTestCase { |
||||
function skip() { |
||||
$this->skipIf( |
||||
!file_exists('DB/sqlite.php'), |
||||
'The Coverage extension needs to have PEAR installed'); |
||||
} |
||||
|
||||
function setUp() { |
||||
require_once dirname(__FILE__) .'/../simple_coverage_writer.php'; |
||||
require_once dirname(__FILE__) .'/../coverage_calculator.php'; |
||||
|
||||
} |
||||
|
||||
function testGenerateSummaryReport() { |
||||
$writer = new SimpleCoverageWriter(); |
||||
$coverage = array('file' => array(0, 1)); |
||||
$untouched = array('missed-file'); |
||||
$calc = new CoverageCalculator(); |
||||
$variables = $calc->variables($coverage, $untouched); |
||||
$variables['title'] = 'coverage'; |
||||
$out = fopen("php://memory", 'w'); |
||||
$writer->writeSummary($out, $variables); |
||||
$dom = self::dom($out); |
||||
$totalPercentCoverage = $dom->elements->xpath("//span[@class='totalPercentCoverage']"); |
||||
$this->assertEqual('50%', (string)$totalPercentCoverage[0]); |
||||
|
||||
$fileLinks = $dom->elements->xpath("//a[@class='byFileReportLink']"); |
||||
$fileLinkAttr = $fileLinks[0]->attributes(); |
||||
$this->assertEqual('file.html', $fileLinkAttr['href']); |
||||
$this->assertEqual('file', (string)($fileLinks[0])); |
||||
|
||||
$untouchedFile = $dom->elements->xpath("//span[@class='untouchedFile']"); |
||||
$this->assertEqual('missed-file', (string)$untouchedFile[0]); |
||||
} |
||||
|
||||
function testGenerateCoverageByFile() { |
||||
$writer = new SimpleCoverageWriter(); |
||||
$cov = array(3 => 1, 4 => -2); // 2 comments, 1 code, 1 dead (1-based indexes) |
||||
$out = fopen("php://memory", 'w'); |
||||
$file = dirname(__FILE__) .'/sample/code.php'; |
||||
$calc = new CoverageCalculator(); |
||||
$variables = $calc->coverageByFileVariables($file, $cov); |
||||
$variables['title'] = 'coverage'; |
||||
$writer->writeByFile($out, $variables); |
||||
$dom = self::dom($out); |
||||
|
||||
$cells = $dom->elements->xpath("//table[@id='code']/tbody/tr/td/span"); |
||||
$this->assertEqual("comment code", self::getAttribute($cells[1], 'class')); |
||||
$this->assertEqual("comment code", self::getAttribute($cells[3], 'class')); |
||||
$this->assertEqual("covered code", self::getAttribute($cells[5], 'class')); |
||||
$this->assertEqual("dead code", self::getAttribute($cells[7], 'class')); |
||||
} |
||||
|
||||
static function getAttribute($element, $attribute) { |
||||
$a = $element->attributes(); |
||||
return $a[$attribute]; |
||||
} |
||||
|
||||
static function dom($stream) { |
||||
rewind($stream); |
||||
$actual = stream_get_contents($stream); |
||||
$html = DOMDocument::loadHTML($actual); |
||||
return simplexml_import_dom($html); |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,14 @@ |
||||
<?php |
||||
// $Id: $ |
||||
require_once(dirname(__FILE__) . '/../../../autorun.php'); |
||||
|
||||
class CoverageUnitTests extends TestSuite { |
||||
function CoverageUnitTests() { |
||||
$this->TestSuite('Coverage Unit tests'); |
||||
$path = dirname(__FILE__) . '/*_test.php'; |
||||
foreach(glob($path) as $test) { |
||||
$this->addFile($test); |
||||
} |
||||
} |
||||
} |
||||
?> |
@ -1,21 +0,0 @@ |
||||
<?php |
||||
|
||||
OC::$CLASSPATH['OC_Admin_Audit_Hooks_Handlers'] = 'apps/admin_audit/lib/hooks_handlers.php'; |
||||
|
||||
OCP\Util::connectHook('OCP\User', 'pre_login', 'OC_Admin_Audit_Hooks_Handlers', 'pre_login'); |
||||
OCP\Util::connectHook('OCP\User', 'post_login', 'OC_Admin_Audit_Hooks_Handlers', 'post_login'); |
||||
OCP\Util::connectHook('OCP\User', 'logout', 'OC_Admin_Audit_Hooks_Handlers', 'logout'); |
||||
|
||||
OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename, 'OC_Admin_Audit_Hooks_Handlers', 'rename'); |
||||
OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_create, 'OC_Admin_Audit_Hooks_Handlers', 'create'); |
||||
OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_copy, 'OC_Admin_Audit_Hooks_Handlers', 'copy'); |
||||
OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_write, 'OC_Admin_Audit_Hooks_Handlers', 'write'); |
||||
OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_read, 'OC_Admin_Audit_Hooks_Handlers', 'read'); |
||||
OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, 'OC_Admin_Audit_Hooks_Handlers', 'delete'); |
||||
|
||||
//FIXME OC_Share does no longer exist |
||||
/* |
||||
OCP\Util::connectHook('OC_Share', 'public', 'OC_Admin_Audit_Hooks_Handlers', 'share_public'); |
||||
OCP\Util::connectHook('OC_Share', 'public-download', 'OC_Admin_Audit_Hooks_Handlers', 'share_public_download'); |
||||
OCP\Util::connectHook('OC_Share', 'user', 'OC_Admin_Audit_Hooks_Handlers', 'share_user'); |
||||
*/ |
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0"?> |
||||
<info> |
||||
<id>admin_audit</id> |
||||
<name>Log audit info</name> |
||||
<version>0.1</version> |
||||
<licence>AGPL</licence> |
||||
<author>Bart Visscher</author> |
||||
<require>4</require> |
||||
<description>Audit user actions in Owncloud</description> |
||||
<shipped>true</shipped> |
||||
</info> |
@ -1,73 +0,0 @@ |
||||
<?php |
||||
|
||||
class OC_Admin_Audit_Hooks_Handlers { |
||||
static public function pre_login($params) { |
||||
$path = $params['uid']; |
||||
self::log('Trying login '.$user); |
||||
} |
||||
static public function post_login($params) { |
||||
$path = $params['uid']; |
||||
self::log('Login '.$user); |
||||
} |
||||
static public function logout($params) { |
||||
$user = OCP\User::getUser(); |
||||
self::log('Logout '.$user); |
||||
} |
||||
|
||||
static public function rename($params) { |
||||
$oldpath = $params[OC_Filesystem::signal_param_oldpath]; |
||||
$newpath = $params[OC_Filesystem::signal_param_newpath]; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Rename "'.$oldpath.'" to "'.$newpath.'" by '.$user); |
||||
} |
||||
static public function create($params) { |
||||
$path = $params[OC_Filesystem::signal_param_path]; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Create "'.$path.'" by '.$user); |
||||
} |
||||
static public function copy($params) { |
||||
$oldpath = $params[OC_Filesystem::signal_param_oldpath]; |
||||
$newpath = $params[OC_Filesystem::signal_param_newpath]; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Copy "'.$oldpath.'" to "'.$newpath.'" by '.$user); |
||||
} |
||||
static public function write($params) { |
||||
$path = $params[OC_Filesystem::signal_param_path]; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Write "'.$path.'" by '.$user); |
||||
} |
||||
static public function read($params) { |
||||
$path = $params[OC_Filesystem::signal_param_path]; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Read "'.$path.'" by '.$user); |
||||
} |
||||
static public function delete($params) { |
||||
$path = $params[OC_Filesystem::signal_param_path]; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Delete "'.$path.'" by '.$user); |
||||
} |
||||
static public function share_public($params) { |
||||
$path = $params['source']; |
||||
$token = $params['token']; |
||||
$user = OCP\User::getUser(); |
||||
self::log('Shared "'.$path.'" with public, token="'.$token.'" by '.$user); |
||||
} |
||||
static public function share_public_download($params) { |
||||
$path = $params['source']; |
||||
$token = $params['token']; |
||||
$user = $_SERVER['REMOTE_ADDR']; |
||||
self::log('Download of shared "'.$path.'" token="'.$token.'" by '.$user); |
||||
} |
||||
static public function share_user($params) { |
||||
$path = $params['source']; |
||||
$permissions = $params['permissions']; |
||||
$with = $params['with']; |
||||
$user = OCP\User::getUser(); |
||||
//$rw = $permissions & OC_Share::WRITE ? 'w' : 'o'; //FIXME OC_Share no longer exists, hack to check permissions |
||||
$rw = $permissions & 1 ? 'w' : 'o'; |
||||
self::log('Shared "'.$path.'" (r'.$rw.') with user "'.$with.'" by '.$user); |
||||
} |
||||
static protected function log($msg) { |
||||
OCP\Util::writeLog('admin_audit', $msg, OCP\Util::INFO); |
||||
} |
||||
} |
@ -1,4 +0,0 @@ |
||||
<?php |
||||
$l=OC_L10N::get('admin_dependencies_chk'); |
||||
|
||||
OCP\App::registerAdmin('admin_dependencies_chk','settings'); |
@ -1,10 +0,0 @@ |
||||
<?xml version="1.0"?> |
||||
<info> |
||||
<id>admin_dependencies_chk</id> |
||||
<name>ownCloud dependencies info</name> |
||||
<licence>AGPL</licence> |
||||
<author>Brice Maron (eMerzh)</author> |
||||
<require>4</require> |
||||
<shipped>true</shipped> |
||||
<description>Display OwnCloud's dependencies informations (missings modules, ...)</description> |
||||
</info> |
@ -1 +0,0 @@ |
||||
0.01 |
@ -1,9 +0,0 @@ |
||||
#status_list legend { font-weight: bold; color: #888888; } |
||||
.state > li { margin-bottom: 3px; padding-left: 0.5em; list-style-type: circle; } |
||||
.state .state_module { font-weight:bold; text-shadow: 0 1px 0 #DDD; cursor:help;} |
||||
|
||||
.state_used ul, .state_used li { display:inline; } |
||||
|
||||
.state_ok .state_module { color: #009700; } |
||||
.state_warning .state_module { color: #FF9B29; } |
||||
.state_error .state_module { color: #FF3B3B; } |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "El mòdul php-json és necessari per moltes aplicacions per comunicacions internes", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "El mòdul php-curl és necessari per mostrar el títol de la pàgina quan s'afegeixen adreces d'interès", |
||||
"The php-gd module is needed to create thumbnails of your images" => "El mòdul php-gd és necessari per generar miniatures d'imatges", |
||||
"The php-ldap module is needed connect to your ldap server" => "El mòdul php-ldap és necessari per connectar amb el servidor ldap", |
||||
"The php-zip module is needed download multiple files at once" => "El mòdul php-zip és necessari per baixar múltiples fitxers de cop", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "El mòdul php-mb_multibyte és necessari per gestionar correctament la codificació.", |
||||
"The php-ctype module is needed validate data." => "El mòdul php-ctype és necessari per validar dades.", |
||||
"The php-xml module is needed to share files with webdav." => "El mòdul php-xml és necessari per compatir els fitxers amb webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La directiva allow_url_fopen de php.ini hauria d'establir-se en 1 per accedir a la base de coneixements dels servidors OCS", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "El mòdul php-pdo és necessari per desar les dades d'ownCloud en una base de dades.", |
||||
"Dependencies status" => "Estat de dependències", |
||||
"Used by :" => "Usat per:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Modul php-json je třeba pro vzájemnou komunikaci mnoha aplikací", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modul php-curl je třeba pro zobrazení titulu strany v okamžiku přidání záložky", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Modul php-gd je třeba pro tvorbu náhledů Vašich obrázků", |
||||
"The php-ldap module is needed connect to your ldap server" => "Modul php-ldap je třeba pro připojení na Váš ldap server", |
||||
"The php-zip module is needed download multiple files at once" => "Modul php-zip je třeba pro souběžné stahování souborů", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Modul php-mb_multibyte je třeba pro správnou funkci kódování.", |
||||
"The php-ctype module is needed validate data." => "Modul php-ctype je třeba k ověřování dat.", |
||||
"The php-xml module is needed to share files with webdav." => "Modul php-xml je třeba ke sdílení souborů prostřednictvím WebDAV.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Příkaz allow_url_fopen ve Vašem php.ini souboru by měl být nastaven na 1 kvůli získávání informací z OCS serverů", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Modul php-pdo je třeba pro ukládání dat ownCloud do databáze", |
||||
"Dependencies status" => "Status závislostí", |
||||
"Used by :" => "Používáno:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Das Modul php-json wird von vielen Anwendungen zur internen Kommunikation benötigt.", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Das Modul php-curl wird benötigt, um den Titel der Seite für die Lesezeichen hinzuzufügen.", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Das Modul php-gd wird für die Erzeugung der Vorschaubilder benötigt.", |
||||
"The php-ldap module is needed connect to your ldap server" => "Das Modul php-ldap wird für die Verbindung mit dem LDAP-Server benötigt.", |
||||
"The php-zip module is needed download multiple files at once" => "Das Modul php-zip wird für den gleichzeitigen Download mehrerer Dateien benötigt.", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Das Modul php_mb_multibyte wird benötigt, um das Encoding richtig zu handhaben.", |
||||
"The php-ctype module is needed validate data." => "Das Modul php-ctype wird benötigt, um Daten zu prüfen.", |
||||
"The php-xml module is needed to share files with webdav." => "Das Modul php-xml wird benötigt, um Dateien über WebDAV zu teilen.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Die Richtlinie allow_url_fopen in Ihrer php.ini sollte auf 1 gesetzt werden, um die Wissensbasis vom OCS-Server abrufen.", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Das Modul php-pdo wird benötigt, um Daten in der Datenbank zu speichern.", |
||||
"Dependencies status" => "Status der Abhängigkeiten", |
||||
"Used by :" => "Benutzt von:" |
||||
); |
@ -1,4 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Dependencies status" => "Κατάσταση εξαρτήσεων", |
||||
"Used by :" => "Χρησιμοποιήθηκε από:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "La modulo php-json necesas por komuniko inter la multaj aplikaĵoj", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "La modulo php-curl necesas por venigi la paĝotitolon dum aldono de legosigno", |
||||
"The php-gd module is needed to create thumbnails of your images" => "La modulo php-gd necesas por krei bildetojn.", |
||||
"The php-ldap module is needed connect to your ldap server" => "La modulo php-ldap necesas por konekti al via LDAP-servilo.", |
||||
"The php-zip module is needed download multiple files at once" => "La modulo php-zip necesas por elŝuti plurajn dosierojn per unu fojo.", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "La modulo php-mb_multibyte necesas por ĝuste administri la kodprezenton.", |
||||
"The php-ctype module is needed validate data." => "La modulo php-ctype necesas por validkontroli datumojn.", |
||||
"The php-xml module is needed to share files with webdav." => "La modulo php-xml necesas por kunhavigi dosierojn per WebDAV.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La ordono allow_url_fopen de via php.ini devus valori 1 por ricevi scibazon el OCS-serviloj", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "La modulo php-pdo necesas por konservi datumojn de ownCloud en datumbazo.", |
||||
"Dependencies status" => "Stato de dependoj", |
||||
"Used by :" => "Uzata de:" |
||||
); |
@ -1,4 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Dependencies status" => "Estado de las dependencias", |
||||
"Used by :" => "Usado por:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "php-json moodul on vajalik paljude rakenduse poolt omvahelise suhtlemise jaoks", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "php-curl moodul on vajalik lehe pealkirja tõmbamiseks järjehoidja lisamisel", |
||||
"The php-gd module is needed to create thumbnails of your images" => "php-gd moodul on vajalik sinu piltidest pisipiltide loomiseks", |
||||
"The php-ldap module is needed connect to your ldap server" => "php-ldap moodul on vajalik sinu ldap serveriga ühendumiseks", |
||||
"The php-zip module is needed download multiple files at once" => "php-zip moodul on vajalik mitme faili korraga alla laadimiseks", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "php-mb_multibyte moodul on vajalik kodeerimise korrektseks haldamiseks.", |
||||
"The php-ctype module is needed validate data." => "php-ctype moodul on vajalik andmete kontrollimiseks.", |
||||
"The php-xml module is needed to share files with webdav." => "php-xml moodul on vajalik failide jagamiseks webdav-iga.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Sinu php.ini failis oleva direktiivi allow_url_fopen väärtuseks peaks määrama 1, et saaks tõmmata teadmistebaasi OCS-i serveritest", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "php-pdo moodul on vajalik owncloudi andmete salvestamiseks andmebaasi.", |
||||
"Dependencies status" => "Sõltuvuse staatus", |
||||
"Used by :" => "Kasutab :" |
||||
); |
@ -1,9 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-gd module is needed to create thumbnails of your images" => "php-gd-moduuli vaaditaan, jotta kuvista on mahdollista luoda esikatselukuvia", |
||||
"The php-ldap module is needed connect to your ldap server" => "php-ldap-moduuli vaaditaan, jotta yhteys ldap-palvelimeen on mahdollista", |
||||
"The php-zip module is needed download multiple files at once" => "php-zip-moduuli vaaditaan, jotta useiden tiedostojen samanaikainen lataus on mahdollista", |
||||
"The php-xml module is needed to share files with webdav." => "php-xml-moduuli vaaditaan, jotta tiedostojen jako webdavia käyttäen on mahdollista", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "php-pdo-moduuli tarvitaan, jotta ownCloud-tietojen tallennus tietokantaan on mahdollista", |
||||
"Dependencies status" => "Riippuvuuksien tila", |
||||
"Used by :" => "Käyttökohde:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Le module php-json est requis pour l'inter-communication de nombreux modules.", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Le module php-curl est requis afin de rapatrier le titre des pages lorsque vous ajoutez un marque-pages.", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Le module php-gd est requis afin de permettre la création d'aperçus pour vos images.", |
||||
"The php-ldap module is needed connect to your ldap server" => "Le module php-ldap est requis afin de permettre la connexion à votre serveur ldap.", |
||||
"The php-zip module is needed download multiple files at once" => "Le module php-zip est requis pour le téléchargement simultané de plusieurs fichiers.", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Le module php-mb_multibyte est requis pour une gestion correcte des encodages.", |
||||
"The php-ctype module is needed validate data." => "Le module php-ctype est requis pour la validation des données.", |
||||
"The php-xml module is needed to share files with webdav." => "Le module php-xml est requis pour le partage de fichiers via webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La directive allow_url_fopen de votre fichier php.ini doit être à la valeur 1 afin de permettre le rapatriement de la base de connaissance depuis les serveurs OCS.", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "le module php-pdo est requis pour le stockage des données ownCloud en base de données.", |
||||
"Dependencies status" => "Statut des dépendances", |
||||
"Used by :" => "Utilisé par :" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Il modulo php-json è richiesto per l'intercomunicazione di diverse applicazioni", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Il modulo php-curl è richiesto per scaricare il titolo della pagina quando si aggiunge un segnalibro", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Il modulo php-gd è richiesto per creare miniature delle tue immagini", |
||||
"The php-ldap module is needed connect to your ldap server" => "Il modulo php-ldap è richiesto per collegarsi a un server ldap", |
||||
"The php-zip module is needed download multiple files at once" => "Il modulo php-zip è richiesto per scaricare diversi file contemporaneamente", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Il modulo php-mb_multibyte è richiesto per gestire correttamente la codifica.", |
||||
"The php-ctype module is needed validate data." => "Il modulo php-ctype è richiesto per la validazione dei dati.", |
||||
"The php-xml module is needed to share files with webdav." => "Il modulo php-xml è richiesto per condividere i file con webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La direttiva allow_url_fopen del tuo php.ini deve essere impostata a 1 per recuperare la base di conoscenza dai server di OCS", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Il modulo php-pdo è richiesto per archiviare i dati di ownCloud in un database.", |
||||
"Dependencies status" => "Stato delle dipendenze", |
||||
"Used by :" => "Usato da:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "php-jsonモジュールはアプリケーション間の内部通信に必要です", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "php-curlモジュールはブックマーク追加時のページタイトル取得に必要です", |
||||
"The php-gd module is needed to create thumbnails of your images" => "php-gdモジュールはサムネイル画像の生成に必要です", |
||||
"The php-ldap module is needed connect to your ldap server" => "php-ldapモジュールはLDAPサーバへの接続に必要です", |
||||
"The php-zip module is needed download multiple files at once" => "php-zipモジュールは複数ファイルの同時ダウンロードに必要です", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "php-mb_multibyteモジュールはエンコードを正しく扱うために必要です", |
||||
"The php-ctype module is needed validate data." => "php-ctypeモジュールはデータのバリデーションに必要です", |
||||
"The php-xml module is needed to share files with webdav." => "php-xmlモジュールはWebDAVでのファイル共有に必要です", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "php.iniのallow_url_fopenはOCSサーバから知識ベースを取得するために1に設定しなくてはなりません", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "php-pdoモジュールはデータベースにownCloudのデータを格納するために必要です", |
||||
"Dependencies status" => "依存関係の状況", |
||||
"Used by :" => "利用先 :" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Php-json modulis yra reikalingas duomenų keitimuisi tarp programų", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Php-curl modulis automatiškai nuskaito tinklapio pavadinimą kuomet išsaugoma žymelė.", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Php-gd modulis yra naudojamas paveikslėlių miniatiūroms kurti.", |
||||
"The php-ldap module is needed connect to your ldap server" => "Php-ldap modulis yra reikalingas prisijungimui prie jūsų ldap serverio", |
||||
"The php-zip module is needed download multiple files at once" => "Php-zip modulis yra reikalingas kelių failų atsiuntimui iš karto.", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Php-mb_multibyte modulis yra naudojamas apdoroti įvairius teksto kodavimo formatus.", |
||||
"The php-ctype module is needed validate data." => "Php-ctype modulis yra reikalingas duomenų tikrinimui.", |
||||
"The php-xml module is needed to share files with webdav." => "Php-xml modulis yra reikalingas failų dalinimuisi naudojant webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "allow_url_fopen direktyva turėtų būti nustatyta į \"1\" jei norite automatiškai gauti žinių bazės informaciją iš OCS serverių.", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Php-pdo modulis yra reikalingas duomenų saugojimui į owncloud duomenų bazę.", |
||||
"Dependencies status" => "Priklausomybės", |
||||
"Used by :" => "Naudojama:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Moduł php-json jest wymagane przez wiele aplikacji do wewnętrznej łączności", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modude php-curl jest wymagany do pobrania tytułu strony podczas dodawania zakładki", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Moduł php-gd jest wymagany do tworzenia miniatury obrazów", |
||||
"The php-ldap module is needed connect to your ldap server" => "Moduł php-ldap jest wymagany aby połączyć się z serwerem ldap", |
||||
"The php-zip module is needed download multiple files at once" => "Moduł php-zip jest wymagany aby pobrać wiele plików na raz", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Moduł php-mb_multibyte jest wymagany do poprawnego zarządzania kodowaniem.", |
||||
"The php-ctype module is needed validate data." => "Moduł php-ctype jest wymagany do sprawdzania poprawności danych.", |
||||
"The php-xml module is needed to share files with webdav." => "Moduł php-xml jest wymagany do udostępniania plików przy użyciu protokołu webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Dyrektywy allow_url_fopen użytkownika php.ini powinna być ustawiona na 1 do pobierania bazy wiedzy z serwerów OCS", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Moduł php-pdo jest wymagany do przechowywania danych owncloud w bazie danych.", |
||||
"Dependencies status" => "Stan zależności", |
||||
"Used by :" => "Używane przez:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Модуль php-json необходим многим приложениям для внутренних связей", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Модуль php-curl необходим для получения заголовка страницы при добавлении закладок", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Модуль php-gd необходим для создания уменьшенной копии для предпросмотра ваших картинок.", |
||||
"The php-ldap module is needed connect to your ldap server" => "Модуль php-ldap необходим для соединения с вашим ldap сервером", |
||||
"The php-zip module is needed download multiple files at once" => "Модуль php-zip необходим для загрузки нескольких файлов за раз", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Модуль php-mb_multibyte необходим для корректного управления кодировками.", |
||||
"The php-ctype module is needed validate data." => "Модуль php-ctype необходим для проверки данных.", |
||||
"The php-xml module is needed to share files with webdav." => "Модуль php-xml необходим для открытия файлов через webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Директива allow_url_fopen в файле php.ini должна быть установлена в 1 для получения базы знаний с серверов OCS", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Модуль php-pdo необходим для хранения данных ownСloud в базе данных.", |
||||
"Dependencies status" => "Статус зависимостей", |
||||
"Used by :" => "Используется:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Modul php-json je potreben za medsebojno komunikacijo veliko aplikacij.", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modul php-curl je potreben za pridobivanje naslova strani pri dodajanju zaznamkov.", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Modul php-gd je potreben za ustvarjanje sličic za predogled.", |
||||
"The php-ldap module is needed connect to your ldap server" => "Modul php-ldap je potreben za povezavo z vašim ldap strežnikom.", |
||||
"The php-zip module is needed download multiple files at once" => "Modul php-zip je potreben za prenašanje večih datotek hkrati.", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Modul php-mb_multibyte je potreben za pravilno upravljanje kodiranja.", |
||||
"The php-ctype module is needed validate data." => "Modul php-ctype je potreben za preverjanje veljavnosti podatkov.", |
||||
"The php-xml module is needed to share files with webdav." => "Modul php-xml je potreben za izmenjavo datotek preko protokola WebDAV.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Direktiva allow_url_fopen v vaši php.ini datoteki mora biti nastavljena na 1, če želite omogočiti dostop do zbirke znanja na strežnikih OCS.", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Modul php-pdo je potreben za shranjevanje ownCloud podatkov v podatkovno zbirko.", |
||||
"Dependencies status" => "Stanje odvisnosti", |
||||
"Used by :" => "Uporablja:" |
||||
); |
@ -1,14 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"The php-json module is needed by the many applications for inter communications" => "Modulen php-json behövs av många applikationer som interagerar.", |
||||
"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modulen php-curl behövs för att hämta sidans titel när du lägger till bokmärken.", |
||||
"The php-gd module is needed to create thumbnails of your images" => "Modulen php-gd behövs för att skapa miniatyrer av dina bilder.", |
||||
"The php-ldap module is needed connect to your ldap server" => "Modulen php-ldap behövs för att ansluta mot din ldapserver.", |
||||
"The php-zip module is needed download multiple files at once" => "Modulen php-zip behövs för att kunna ladda ner flera filer på en gång.", |
||||
"The php-mb_multibyte module is needed to manage correctly the encoding." => "Modulen php-mb_multibyte behövs för att hantera korrekt teckenkodning.", |
||||
"The php-ctype module is needed validate data." => "Modulen php-ctype behövs för att validera data.", |
||||
"The php-xml module is needed to share files with webdav." => "Modulen php-xml behövs för att kunna dela filer med webdav.", |
||||
"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Direktivet allow_url_fopen i php.ini bör sättas till 1 för att kunna hämta kunskapsbasen från OCS-servrar.", |
||||
"The php-pdo module is needed to store owncloud data into a database." => "Modulen php-pdo behövs för att kunna lagra ownCloud data i en databas.", |
||||
"Dependencies status" => "Beroenden status", |
||||
"Used by :" => "Används av:" |
||||
); |
@ -1,102 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - user_ldap |
||||
* |
||||
* @author Brice Maron |
||||
* @copyright 2011 Brice Maron brice __from__ bmaron _DOT_ net |
||||
* |
||||
* 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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
$l=OC_L10N::get('admin_dependencies_chk'); |
||||
$tmpl = new OCP\Template( 'admin_dependencies_chk', 'settings'); |
||||
|
||||
$modules = array(); |
||||
|
||||
//Possible status are : ok, error, warning |
||||
$modules[] =array( |
||||
'status' => function_exists('json_encode') ? 'ok' : 'error', |
||||
'part'=> 'php-json', |
||||
'modules'=> array('core'), |
||||
'message'=> $l->t('The php-json module is needed by the many applications for inter communications')); |
||||
|
||||
$modules[] =array( |
||||
'status' => function_exists('curl_init') ? 'ok' : 'error', |
||||
'part'=> 'php-curl', |
||||
'modules'=> array('bookmarks'), |
||||
'message'=> $l->t('The php-curl modude is needed to fetch the page title when adding a bookmarks')); |
||||
|
||||
$modules[] =array( |
||||
'status' => function_exists('imagepng') ? 'ok' : 'error', |
||||
'part'=> 'php-gd', |
||||
'modules'=> array('gallery'), |
||||
'message'=> $l->t('The php-gd module is needed to create thumbnails of your images')); |
||||
|
||||
$modules[] =array( |
||||
'status' => function_exists("ldap_bind") ? 'ok' : 'error', |
||||
'part'=> 'php-ldap', |
||||
'modules'=> array('user_ldap'), |
||||
'message'=> $l->t('The php-ldap module is needed connect to your ldap server')); |
||||
|
||||
$modules[] =array( |
||||
'status' => class_exists('ZipArchive') ? 'ok' : 'warning', |
||||
'part'=> 'php-zip', |
||||
'modules'=> array('admin_export','core'), |
||||
'message'=> $l->t('The php-zip module is needed download multiple files at once')); |
||||
|
||||
$modules[] =array( |
||||
'status' => function_exists('mb_detect_encoding') ? 'ok' : 'error', |
||||
'part'=> 'php-mb_multibyte ', |
||||
'modules'=> array('core'), |
||||
'message'=> $l->t('The php-mb_multibyte module is needed to manage correctly the encoding.')); |
||||
|
||||
$modules[] =array( |
||||
'status' => function_exists('ctype_digit') ? 'ok' : 'error', |
||||
'part'=> 'php-ctype', |
||||
'modules'=> array('core'), |
||||
'message'=> $l->t('The php-ctype module is needed validate data.')); |
||||
|
||||
$modules[] =array( |
||||
'status' => class_exists('DOMDocument') ? 'ok' : 'error', |
||||
'part'=> 'php-xml', |
||||
'modules'=> array('core'), |
||||
'message'=> $l->t('The php-xml module is needed to share files with webdav.')); |
||||
|
||||
$modules[] =array( |
||||
'status' => ini_get('allow_url_fopen') == '1' ? 'ok' : 'error', |
||||
'part'=> 'allow_url_fopen', |
||||
'modules'=> array('core'), |
||||
'message'=> $l->t('The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers')); |
||||
|
||||
$modules[] =array( |
||||
'status' => class_exists('PDO') ? 'ok' : 'warning', |
||||
'part'=> 'php-pdo', |
||||
'modules'=> array('core'), |
||||
'message'=> $l->t('The php-pdo module is needed to store owncloud data into a database.')); |
||||
|
||||
foreach($modules as $key => $module) { |
||||
$enabled = false ; |
||||
foreach($module['modules'] as $app) { |
||||
if(OCP\App::isEnabled($app) || $app=='core'){ |
||||
$enabled = true; |
||||
} |
||||
} |
||||
if($enabled == false) unset($modules[$key]); |
||||
} |
||||
|
||||
OCP\UTIL::addStyle('admin_dependencies_chk', 'style'); |
||||
$tmpl->assign( 'items', $modules ); |
||||
|
||||
return $tmpl->fetchPage(); |
@ -1,16 +0,0 @@ |
||||
<fieldset id="status_list" class="personalblock"> |
||||
<legend><?php echo $l->t('Dependencies status');?></legend>
|
||||
<ul class="state"> |
||||
<?php foreach($_['items'] as $item):?> |
||||
<li class="state_<?php echo $item['status'];?>">
|
||||
<span class="state_module" title="<?php echo $item['message'];?>"><?php echo $item['part'];?></span>
|
||||
<div class="state_used"><?php echo $l->t('Used by :');?> |
||||
<ul> |
||||
<?php foreach($item['modules'] as $module):?> |
||||
<li><?php echo $module;?></li>
|
||||
<?php endforeach;?> |
||||
</ul> |
||||
</li> |
||||
<?php endforeach;?> |
||||
</ul> |
||||
</fieldset> |
@ -1,33 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - admin_migrate |
||||
* |
||||
* @author Tom Needham |
||||
* @copyright 2012 Tom Needham tom@owncloud.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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
OCP\App::registerAdmin('admin_migrate','settings'); |
||||
|
||||
// add settings page to navigation |
||||
$entry = array( |
||||
'id' => "admin_migrate_settings", |
||||
'order'=>1, |
||||
'href' => OCP\Util::linkTo( "admin_migrate", "settings.php" ), |
||||
'name' => 'Export' |
||||
); |
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0"?> |
||||
<info> |
||||
<id>admin_migrate</id> |
||||
<name>ownCloud Instance Migration</name> |
||||
<description>Import/Export your owncloud instance</description> |
||||
<licence>AGPL</licence> |
||||
<author>Thomas Schmidt and Tom Needham</author> |
||||
<require>4</require> |
||||
<shipped>true</shipped> |
||||
<default_enable/> |
||||
</info> |
@ -1 +0,0 @@ |
||||
0.1 |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Exporta aquesta instància de ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Això crearà un fitxer comprimit amb les dades d'aquesta instància ownCloud.\n Escolliu el tipus d'exportació:", |
||||
"Export" => "Exporta" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Export této instance ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Bude vytvořen komprimovaný soubor obsahující data této instance ownCloud.⏎ Zvolte typ exportu:", |
||||
"Export" => "Export" |
||||
); |
@ -1,4 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Eksporter ownCloud instans", |
||||
"Export" => "Eksporter" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Diese ownCloud-Instanz exportieren.", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Dies wird eine komprimierte Datei erzeugen, welche die Daten dieser ownCloud-Instanz enthält.\n Bitte wählen Sie den Exporttyp:", |
||||
"Export" => "Exportieren" |
||||
); |
@ -1,4 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Αυτό θα δημιουργήσει ένα συμπιεσμένο αρχείο που θα περιέχει τα δεδομένα από αυτό το ownCloud.\n Παρακαλώ επιλέξτε τον τύπο εξαγωγής:", |
||||
"Export" => "Εξαγωγή" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Malenporti ĉi tiun aperon de ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Ĉi tio kreos densigitan dosieron, kiu enhavos la datumojn de ĉi tiu apero de ownCloud.\nBonvolu elekti la tipon de malenportado:", |
||||
"Export" => "Malenporti" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Exportar esta instancia de ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Se creará un archivo comprimido que contendrá los datos de esta instancia de owncloud.\n Por favor elegir el tipo de exportación:", |
||||
"Export" => "Exportar" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Ekspordi see ownCloudi paigaldus", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "See loob pakitud faili, milles on sinu owncloudi paigalduse andmed.\n Palun vali eksporditava faili tüüp:", |
||||
"Export" => "Ekspordi" |
||||
); |
@ -1,4 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Vie tämä ownCloud-istanssi", |
||||
"Export" => "Vie" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Exporter cette instance ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Ceci va créer une archive compressée contenant les données de cette instance ownCloud.\n Veuillez choisir le type d'export :", |
||||
"Export" => "Exporter" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Exporta esta instancia de ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Esto creará un ficheiro comprimido que contén os datos de esta instancia de ownCloud.\nPor favor escolla o modo de exportación:", |
||||
"Export" => "Exportar" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Esporta questa istanza di ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Questa operazione creerà un file compresso che contiene i dati dell'istanza di ownCloud. Scegli il tipo di esportazione:", |
||||
"Export" => "Esporta" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "ownCloudをエクスポート", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "このownCloudのデータを含む圧縮ファイルを生成します。\nエクスポートの種類を選択してください:", |
||||
"Export" => "エクスポート" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Eksportuoti šią ownCloud instaliaciją", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Bus sukurtas archyvas su visais owncloud duomenimis ir failais.\n Pasirinkite eksportavimo tipą:", |
||||
"Export" => "Eksportuoti" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Eksporter denne ownCloud forekomsten", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Dette vil opprette en komprimert fil som inneholder dataene fra denne ownCloud forekomsten.⏎ Vennligst velg eksporttype:", |
||||
"Export" => "Eksport" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Exporteer deze ownCloud instantie", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Dit maakt een gecomprimeerd bestand, met de inhoud van deze ownCloud instantie. Kies het export type:", |
||||
"Export" => "Exporteer" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Eksportuj instancję ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Spowoduje to utworzenie pliku skompresowanego, który zawiera dane tej instancji ownCloud.⏎ proszę wybrać typ eksportu:", |
||||
"Export" => "Eksport" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Экспортировать этот экземпляр ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Будет создан сжатый файл, содержащий данные этого экземпляра owncloud.\n Выберите тип экспорта:", |
||||
"Export" => "Экспорт" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Izvozi to ownCloud namestitev", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Ustvarjena bo stisnjena datoteka s podatki te ownCloud namestitve.\n Prosimo, če izberete vrsto izvoza:", |
||||
"Export" => "Izvozi" |
||||
); |
@ -1,5 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Export this ownCloud instance" => "Exportera denna instans av ownCloud", |
||||
"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Detta kommer att skapa en komprimerad fil som innehåller all data från denna instans av ownCloud.\n Välj exporttyp:", |
||||
"Export" => "Exportera" |
||||
); |
@ -1,57 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - admin_migrate |
||||
* |
||||
* @author Thomas Schmidt |
||||
* @copyright 2011 Thomas Schmidt tom@opensuse.org |
||||
* @author Tom Needham |
||||
* @copyright 2012 Tom Needham tom@owncloud.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 Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
OCP\User::checkAdminUser(); |
||||
OCP\App::checkAppEnabled('admin_migrate'); |
||||
|
||||
// Export? |
||||
if (isset($_POST['admin_export'])) { |
||||
// Create the export zip |
||||
$response = json_decode( OC_Migrate::export( null, $_POST['export_type'] ) ); |
||||
if( !$response->success ){ |
||||
// Error |
||||
die('error'); |
||||
} else { |
||||
$path = $response->data; |
||||
// Download it |
||||
header("Content-Type: application/zip"); |
||||
header("Content-Disposition: attachment; filename=" . basename($path)); |
||||
header("Content-Length: " . filesize($path)); |
||||
@ob_end_clean(); |
||||
readfile( $path ); |
||||
unlink( $path ); |
||||
} |
||||
// Import? |
||||
} else if( isset($_POST['admin_import']) ){ |
||||
$from = $_FILES['owncloud_import']['tmp_name']; |
||||
|
||||
if( !OC_Migrate::import( $from, 'instance' ) ){ |
||||
die('failed'); |
||||
} |
||||
|
||||
} else { |
||||
// fill template |
||||
$tmpl = new OCP\Template('admin_migrate', 'settings'); |
||||
return $tmpl->fetchPage(); |
||||
} |
@ -1,31 +0,0 @@ |
||||
<form id="export" action="#" method="post"> |
||||
<fieldset class="personalblock"> |
||||
<legend><strong><?php echo $l->t('Export this ownCloud instance');?></strong></legend>
|
||||
<p><?php echo $l->t('This will create a compressed file that contains the data of this owncloud instance. |
||||
Please choose the export type:');?> |
||||
</p> |
||||
<h3>What would you like to export?</h3> |
||||
<p> |
||||
<input type="radio" name="export_type" value="instance" style="width:20px;" /> ownCloud instance (suitable for import )<br /> |
||||
<input type="radio" name="export_type" value="system" style="width:20px;" /> ownCloud system files<br /> |
||||
<input type="radio" name="export_type" value="userfiles" style="width:20px;" /> Just user files<br /> |
||||
<input type="submit" name="admin_export" value="<?php echo $l->t('Export'); ?>" />
|
||||
</fieldset> |
||||
</form> |
||||
<?php
|
||||
/* |
||||
* EXPERIMENTAL |
||||
?> |
||||
<form id="import" action="#" method="post" enctype="multipart/form-data"> |
||||
<fieldset class="personalblock"> |
||||
<legend><strong><?php echo $l->t('Import an ownCloud instance. THIS WILL DELETE ALL CURRENT OWNCLOUD DATA');?></strong></legend>
|
||||
<p><?php echo $l->t('All current ownCloud data will be replaced by the ownCloud instance that is uploaded.');?> |
||||
</p> |
||||
<p><input type="file" id="owncloud_import" name="owncloud_import"><label for="owncloud_import"><?php echo $l->t('ownCloud Export Zip File');?></label>
|
||||
</p> |
||||
<input type="submit" name="admin_import" value="<?php echo $l->t('Import'); ?>" />
|
||||
</fieldset> |
||||
</form> |
||||
<?php
|
||||
*/ |
||||
?> |
@ -1,33 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin |
||||
* |
||||
* @author Arthur Schiwon |
||||
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
|
||||
// Check if we are a user |
||||
OCP\User::checkLoggedIn(); |
||||
OCP\App::checkAppEnabled('bookmarks'); |
||||
|
||||
require_once('bookmarksHelper.php'); |
||||
addBookmark($_GET['url'], '', 'Read-Later'); |
||||
|
||||
include 'templates/addBm.php'; |
@ -1,37 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin |
||||
* |
||||
* @author Arthur Schiwon |
||||
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
//no apps or filesystem |
||||
$RUNTIME_NOSETUPFS=true; |
||||
|
||||
|
||||
|
||||
// Check if we are a user |
||||
OCP\JSON::checkLoggedIn(); |
||||
OCP\JSON::callCheck(); |
||||
|
||||
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)); |
@ -1,37 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin |
||||
* |
||||
* @author Arthur Schiwon |
||||
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
// 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)){ |
||||
OC_JSON::error(); |
||||
exit(); |
||||
} |
||||
|
||||
OCP\JSON::success(); |
@ -1,90 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin - edit bookmark script |
||||
* |
||||
* @author Golnaz Nilieh |
||||
* @copyright 2011 Golnaz Nilieh <golnaz.nilieh@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/>. |
||||
* |
||||
*/ |
||||
|
||||
// Check if we are a user |
||||
OCP\JSON::checkLoggedIn(); |
||||
OCP\JSON::callCheck(); |
||||
|
||||
OCP\JSON::checkAppEnabled('bookmarks'); |
||||
|
||||
$CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" ); |
||||
if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){ |
||||
$_ut = "strftime('%s','now')"; |
||||
} elseif($CONFIG_DBTYPE == 'pgsql') { |
||||
$_ut = 'date_part(\'epoch\',now())::integer'; |
||||
} elseif($CONFIG_DBTYPE == 'oci') { |
||||
$_ut = '(oracletime - to_date(\'19700101\',\'YYYYMMDD\')) * 86400'; |
||||
} else { |
||||
$_ut = "UNIX_TIMESTAMP()"; |
||||
} |
||||
|
||||
$bookmark_id = (int)$_POST["id"]; |
||||
$user_id = OCP\USER::getUser(); |
||||
|
||||
//TODO check using CURRENT_TIMESTAMP? prepare already does magic when using now() |
||||
$query = OCP\DB::prepare(' |
||||
UPDATE `*PREFIX*bookmarks` |
||||
SET `url` = ?, `title` = ?, `lastmodified` = '.$_ut.' |
||||
WHERE `id` = ? |
||||
AND `user_id` = ? |
||||
'); |
||||
|
||||
$params=array( |
||||
htmlspecialchars_decode($_POST["url"]), |
||||
htmlspecialchars_decode($_POST["title"]), |
||||
$bookmark_id, |
||||
$user_id, |
||||
); |
||||
|
||||
$result = $query->execute($params); |
||||
|
||||
# Abort the operation if bookmark couldn't be set (probably because the user is not allowed to edit this bookmark) |
||||
if ($result->numRows() == 0) exit(); |
||||
|
||||
# Remove old tags and insert new ones. |
||||
$query = OCP\DB::prepare(' |
||||
DELETE FROM `*PREFIX*bookmarks_tags` |
||||
WHERE `bookmark_id` = ? |
||||
'); |
||||
|
||||
$params=array( |
||||
$bookmark_id |
||||
); |
||||
|
||||
$query->execute($params); |
||||
|
||||
$query = OCP\DB::prepare(' |
||||
INSERT INTO `*PREFIX*bookmarks_tags` |
||||
(`bookmark_id`, `tag`) |
||||
VALUES (?, ?) |
||||
'); |
||||
|
||||
$tags = explode(' ', urldecode($_POST["tags"])); |
||||
foreach ($tags as $tag) { |
||||
if(empty($tag)) { |
||||
//avoid saving blankspaces |
||||
continue; |
||||
} |
||||
$params = array($bookmark_id, trim($tag)); |
||||
$query->execute($params); |
||||
} |
@ -1,39 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin |
||||
* |
||||
* @author Arthur Schiwon |
||||
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
// Check if we are a user |
||||
OCP\JSON::checkLoggedIn(); |
||||
OCP\JSON::checkAppEnabled('bookmarks'); |
||||
|
||||
$query = OCP\DB::prepare(' |
||||
UPDATE `*PREFIX*bookmarks` |
||||
SET `clickcount` = `clickcount` + 1 |
||||
WHERE `user_id` = ? |
||||
AND `url` LIKE ? |
||||
'); |
||||
|
||||
$params=array(OCP\USER::getUser(), htmlspecialchars_decode($_POST["url"])); |
||||
$bookmarks = $query->execute($params); |
||||
|
||||
header( "HTTP/1.1 204 No Content" ); |
||||
|
@ -1,45 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin |
||||
* |
||||
* @author Arthur Schiwon |
||||
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de |
||||
* @copyright 2012 David Iwanowitsch <david at unclouded dot de> |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
// Check if we are a user |
||||
OCP\JSON::checkLoggedIn(); |
||||
OCP\JSON::checkAppEnabled('bookmarks'); |
||||
|
||||
|
||||
//Filter for tag? |
||||
$filterTag = isset($_POST['tag']) ? htmlspecialchars_decode($_POST['tag']) : false; |
||||
|
||||
$offset = isset($_POST['page']) ? intval($_POST['page']) * 10 : 0; |
||||
|
||||
$sort = isset($_POST['sort']) ? ($_POST['sort']) : 'bookmarks_sorting_recent'; |
||||
if($sort == 'bookmarks_sorting_clicks') { |
||||
$sqlSortColumn = 'clickcount'; |
||||
} else { |
||||
$sqlSortColumn = 'id'; |
||||
} |
||||
|
||||
|
||||
$bookmarks = OC_Bookmarks_Bookmarks::findBookmarks($offset, $sqlSortColumn, $filterTag, true); |
||||
|
||||
OCP\JSON::success(array('data' => $bookmarks)); |
@ -1,19 +0,0 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2011 Marvin Thomas Rabe <mrabe@marvinrabe.de> |
||||
* Copyright (c) 2011 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* This file is licensed under the Affero General Public License version 3 or |
||||
* later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
|
||||
OC::$CLASSPATH['OC_Bookmarks_Bookmarks'] = 'apps/bookmarks/lib/bookmarks.php'; |
||||
OC::$CLASSPATH['OC_Search_Provider_Bookmarks'] = 'apps/bookmarks/lib/search.php'; |
||||
|
||||
$l = new OC_l10n('bookmarks'); |
||||
OCP\App::addNavigationEntry( array( 'id' => 'bookmarks_index', 'order' => 70, 'href' => OCP\Util::linkTo( 'bookmarks', 'index.php' ), 'icon' => OCP\Util::imagePath( 'bookmarks', 'bookmarks.png' ), 'name' => $l->t('Bookmarks'))); |
||||
|
||||
OCP\App::registerPersonal('bookmarks', 'settings'); |
||||
OCP\Util::addscript('bookmarks','bookmarksearch'); |
||||
|
||||
OC_Search::registerProvider('OC_Search_Provider_Bookmarks'); |
@ -1,112 +0,0 @@ |
||||
<?xml version="1.0" encoding="ISO-8859-1" ?> |
||||
<database> |
||||
<name>*dbname*</name> |
||||
<create>true</create> |
||||
<overwrite>false</overwrite> |
||||
<charset>utf8</charset> |
||||
<table> |
||||
<name>*dbprefix*bookmarks</name> |
||||
<declaration> |
||||
<field> |
||||
<name>id</name> |
||||
<type>integer</type> |
||||
<autoincrement>1</autoincrement> |
||||
<default>0</default> |
||||
<notnull>true</notnull> |
||||
<length>4</length> |
||||
</field> |
||||
<field> |
||||
<name>url</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>true</notnull> |
||||
<length>4096</length> |
||||
</field> |
||||
<field> |
||||
<name>title</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>true</notnull> |
||||
<length>140</length> |
||||
</field> |
||||
<field> |
||||
<name>user_id</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>true</notnull> |
||||
<length>64</length> |
||||
</field> |
||||
<field> |
||||
<name>public</name> |
||||
<type>integer</type> |
||||
<default>0</default> |
||||
<length>1</length> |
||||
</field> |
||||
<field> |
||||
<name>added</name> |
||||
<type>integer</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<unsigned>true</unsigned> |
||||
<length>4</length> |
||||
</field> |
||||
<field> |
||||
<name>lastmodified</name> |
||||
<type>integer</type> |
||||
<default></default> |
||||
<notnull>false</notnull> |
||||
<unsigned>true</unsigned> |
||||
<length>4</length> |
||||
</field> |
||||
<field> |
||||
<name>clickcount</name> |
||||
<type>integer</type> |
||||
<default>0</default> |
||||
<notnull>true</notnull> |
||||
<unsigned>true</unsigned> |
||||
<length>4</length> |
||||
</field> |
||||
|
||||
<index> |
||||
<name>id</name> |
||||
<unique>true</unique> |
||||
<field> |
||||
<name>id</name> |
||||
<sorting>descending</sorting> |
||||
</field> |
||||
</index> |
||||
</declaration> |
||||
</table> |
||||
|
||||
<table> |
||||
<name>*dbprefix*bookmarks_tags</name> |
||||
<declaration> |
||||
<field> |
||||
<name>bookmark_id</name> |
||||
<type>integer</type> |
||||
<length>64</length> |
||||
</field> |
||||
|
||||
<field> |
||||
<name>tag</name> |
||||
<type>text</type> |
||||
<default></default> |
||||
<notnull>true</notnull> |
||||
<length>255</length> |
||||
</field> |
||||
<index> |
||||
<name>bookmark_tag</name> |
||||
<unique>true</unique> |
||||
<field> |
||||
<name>bookmark_id</name> |
||||
<sorting>ascending</sorting> |
||||
</field> |
||||
<field> |
||||
<name>tag</name> |
||||
<sorting>ascending</sorting> |
||||
</field> |
||||
</index> |
||||
</declaration> |
||||
</table> |
||||
</database> |
||||
|
@ -1,11 +0,0 @@ |
||||
<?xml version="1.0"?> |
||||
<info> |
||||
<id>bookmarks</id> |
||||
<name>Bookmarks</name> |
||||
<description>Bookmark manager for ownCloud</description> |
||||
<licence>AGPL</licence> |
||||
<author>Arthur Schiwon, Marvin Thomas Rabe</author> |
||||
<standalone/> |
||||
<require>4</require> |
||||
<shipped>true</shipped> |
||||
</info> |
@ -1,68 +0,0 @@ |
||||
<?php |
||||
class OC_Migration_Provider_Bookmarks extends OC_Migration_Provider{ |
||||
|
||||
// Create the xml for the user supplied |
||||
function export( ){ |
||||
$options = array( |
||||
'table'=>'bookmarks', |
||||
'matchcol'=>'user_id', |
||||
'matchval'=>$this->uid, |
||||
'idcol'=>'id' |
||||
); |
||||
$ids = $this->content->copyRows( $options ); |
||||
|
||||
$options = array( |
||||
'table'=>'bookmarks_tags', |
||||
'matchcol'=>'bookmark_id', |
||||
'matchval'=>$ids |
||||
); |
||||
|
||||
// Export tags |
||||
$ids2 = $this->content->copyRows( $options ); |
||||
|
||||
// If both returned some ids then they worked |
||||
if( is_array( $ids ) && is_array( $ids2 ) ) |
||||
{ |
||||
return true; |
||||
} else { |
||||
return false; |
||||
} |
||||
|
||||
} |
||||
|
||||
// Import function for bookmarks |
||||
function import( ){ |
||||
switch( $this->appinfo->version ){ |
||||
default: |
||||
// All versions of the app have had the same db structure, so all can use the same import function |
||||
$query = $this->content->prepare( "SELECT * FROM `bookmarks` WHERE `user_id` LIKE ?" ); |
||||
$results = $query->execute( array( $this->olduid ) ); |
||||
$idmap = array(); |
||||
while( $row = $results->fetchRow() ){ |
||||
// Import each bookmark, saving its id into the map |
||||
$query = OCP\DB::prepare( "INSERT INTO `*PREFIX*bookmarks`(`url`, `title`, `user_id`, `public`, `added`, `lastmodified`) VALUES (?, ?, ?, ?, ?, ?)" ); |
||||
$query->execute( array( $row['url'], $row['title'], $this->uid, $row['public'], $row['added'], $row['lastmodified'] ) ); |
||||
// Map the id |
||||
$idmap[$row['id']] = OCP\DB::insertid(); |
||||
} |
||||
// Now tags |
||||
foreach($idmap as $oldid => $newid){ |
||||
$query = $this->content->prepare( "SELECT * FROM `bookmarks_tags` WHERE `bookmark_id` LIKE ?" ); |
||||
$results = $query->execute( array( $oldid ) ); |
||||
while( $row = $results->fetchRow() ){ |
||||
// Import the tags for this bookmark, using the new bookmark id |
||||
$query = OCP\DB::prepare( "INSERT INTO `*PREFIX*bookmarks_tags`(`bookmark_id`, `tag`) VALUES (?, ?)" ); |
||||
$query->execute( array( $newid, $row['tag'] ) ); |
||||
} |
||||
} |
||||
// All done! |
||||
break; |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
} |
||||
|
||||
// Load the provider |
||||
new OC_Migration_Provider_Bookmarks( 'bookmarks' ); |
@ -1 +0,0 @@ |
||||
0.2 |
@ -1,130 +0,0 @@ |
||||
<?php |
||||
|
||||
// Source: http://www.php.net/manual/de/function.curl-setopt.php#102121 |
||||
// This works around a safe_mode/open_basedir restriction |
||||
function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) { |
||||
$mr = $maxredirect === null ? 5 : intval($maxredirect); |
||||
if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) { |
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0); |
||||
curl_setopt($ch, CURLOPT_MAXREDIRS, $mr); |
||||
} else { |
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); |
||||
if ($mr > 0) { |
||||
$newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); |
||||
|
||||
$rch = curl_copy_handle($ch); |
||||
curl_setopt($rch, CURLOPT_HEADER, true); |
||||
curl_setopt($rch, CURLOPT_NOBODY, true); |
||||
curl_setopt($rch, CURLOPT_FORBID_REUSE, false); |
||||
curl_setopt($rch, CURLOPT_RETURNTRANSFER, true); |
||||
do { |
||||
curl_setopt($rch, CURLOPT_URL, $newurl); |
||||
$header = curl_exec($rch); |
||||
if (curl_errno($rch)) { |
||||
$code = 0; |
||||
} else { |
||||
$code = curl_getinfo($rch, CURLINFO_HTTP_CODE); |
||||
if ($code == 301 || $code == 302) { |
||||
preg_match('/Location:(.*?)\n/', $header, $matches); |
||||
$newurl = trim(array_pop($matches)); |
||||
} else { |
||||
$code = 0; |
||||
} |
||||
} |
||||
} while ($code && --$mr); |
||||
curl_close($rch); |
||||
if (!$mr) { |
||||
if ($maxredirect === null) { |
||||
trigger_error('Too many redirects. When following redirects, libcurl hit the maximum amount.', E_USER_WARNING); |
||||
} else { |
||||
$maxredirect = 0; |
||||
} |
||||
return false; |
||||
} |
||||
curl_setopt($ch, CURLOPT_URL, $newurl); |
||||
} |
||||
} |
||||
return curl_exec($ch); |
||||
} |
||||
|
||||
function getURLMetadata($url) { |
||||
//allow only http(s) and (s)ftp |
||||
$protocols = '/^[hs]{0,1}[tf]{0,1}tp[s]{0,1}\:\/\//i'; |
||||
//if not (allowed) protocol is given, assume http |
||||
if(preg_match($protocols, $url) == 0) { |
||||
$url = 'http://' . $url; |
||||
} |
||||
$metadata['url'] = $url; |
||||
|
||||
if (!function_exists('curl_init')){ |
||||
return $metadata; |
||||
} |
||||
$ch = curl_init(); |
||||
curl_setopt($ch, CURLOPT_URL, $url); |
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
||||
$page = curl_exec_follow($ch); |
||||
curl_close($ch); |
||||
|
||||
@preg_match( "/<title>(.*)<\/title>/si", $page, $match ); |
||||
$metadata['title'] = htmlspecialchars_decode(@$match[1]); |
||||
|
||||
return $metadata; |
||||
} |
||||
|
||||
function addBookmark($url, $title, $tags='') { |
||||
$CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" ); |
||||
if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){ |
||||
$_ut = "strftime('%s','now')"; |
||||
} elseif($CONFIG_DBTYPE == 'pgsql') { |
||||
$_ut = 'date_part(\'epoch\',now())::integer'; |
||||
} else { |
||||
$_ut = "UNIX_TIMESTAMP()"; |
||||
} |
||||
|
||||
//FIXME: Detect when user adds a known URL |
||||
$query = OCP\DB::prepare(" |
||||
INSERT INTO `*PREFIX*bookmarks` |
||||
(`url`, `title`, `user_id`, `public`, `added`, `lastmodified`) |
||||
VALUES (?, ?, ?, 0, $_ut, $_ut) |
||||
"); |
||||
|
||||
if(empty($title)) { |
||||
$metadata = getURLMetadata($url); |
||||
if(isset($metadata['title'])) // Check for problems fetching the title |
||||
$title = $metadata['title']; |
||||
} |
||||
|
||||
if(empty($title)) { |
||||
$l = OC_L10N::get('bookmarks'); |
||||
$title = $l->t('unnamed'); |
||||
} |
||||
|
||||
$params=array( |
||||
htmlspecialchars_decode($url), |
||||
htmlspecialchars_decode($title), |
||||
OCP\USER::getUser() |
||||
); |
||||
$query->execute($params); |
||||
|
||||
$b_id = OCP\DB::insertid('*PREFIX*bookmarks'); |
||||
|
||||
if($b_id !== false) { |
||||
$query = OCP\DB::prepare(" |
||||
INSERT INTO `*PREFIX*bookmarks_tags` |
||||
(`bookmark_id`, `tag`) |
||||
VALUES (?, ?) |
||||
"); |
||||
|
||||
$tags = explode(' ', urldecode($tags)); |
||||
foreach ($tags as $tag) { |
||||
if(empty($tag)) { |
||||
//avoid saving blankspaces |
||||
continue; |
||||
} |
||||
$params = array($b_id, trim($tag)); |
||||
$query->execute($params); |
||||
} |
||||
|
||||
return $b_id; |
||||
} |
||||
} |
@ -1,87 +0,0 @@ |
||||
#content { overflow: auto; height: 100%; } |
||||
#firstrun { width: 80%; margin: 5em auto auto auto; text-align: center; font-weight:bold; font-size:1.5em; color:#777; position: relative;} |
||||
#firstrun small { display: block; font-weight: normal; font-size: 0.5em; margin-bottom: 1.5em; } |
||||
#firstrun .button { font-size: 0.7em; } |
||||
#firstrun #selections { font-size:0.8em; font-weight: normal; width: 100%; margin: 2em auto auto auto; clear: both; } |
||||
|
||||
.bookmarks_headline { |
||||
font-size: large; |
||||
font-weight: bold; |
||||
margin-left: 2em; |
||||
padding: 2.5ex 0.5ex; |
||||
} |
||||
|
||||
.bookmarks_menu { |
||||
margin-left: 1.5em; |
||||
padding: 0.5ex; |
||||
} |
||||
|
||||
.bookmarks_list { |
||||
overflow: auto; |
||||
position: fixed; |
||||
top: 6.5em; |
||||
} |
||||
|
||||
.bookmarks_addBml { |
||||
text-decoration: underline; |
||||
} |
||||
|
||||
.bookmarks_label { |
||||
width: 7em; |
||||
display: inline-block; |
||||
text-align: right; |
||||
} |
||||
|
||||
.bookmarks_input { |
||||
width: 8em; |
||||
} |
||||
|
||||
.bookmark_actions { |
||||
position: absolute; |
||||
right: 1em; |
||||
top: 0.7em; |
||||
display: none; |
||||
} |
||||
.bookmark_actions span { margin: 0 0.4em; } |
||||
.bookmark_actions img { opacity: 0.3; } |
||||
.bookmark_actions img:hover { opacity: 1; cursor: pointer; } |
||||
|
||||
.bookmark_single { |
||||
position: relative; |
||||
padding: 0.5em 1em; |
||||
border-bottom: 1px solid #DDD; |
||||
-webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; |
||||
} |
||||
|
||||
.bookmark_single:hover { |
||||
background-color:#f8f8f8 |
||||
} |
||||
|
||||
.bookmark_single:hover .bookmark_actions { |
||||
display: block; |
||||
} |
||||
|
||||
.bookmark_title { font-weight: bold; display: inline-block; margin-right: 0.8em; } |
||||
.bookmark_url { display: none; color: #999; } |
||||
.bookmark_single:hover .bookmark_url { display: inline; } |
||||
.bookmark_tags { |
||||
position: absolute; |
||||
top: 0.5em; |
||||
right: 6em; |
||||
text-align: right; |
||||
} |
||||
.bookmark_tag { |
||||
display: inline-block; |
||||
color: white; |
||||
margin: 0 0.2em; |
||||
padding: 0 0.4em; |
||||
background-color: #1D2D44; |
||||
border-radius: 0.4em; |
||||
opacity: 0.2; |
||||
} |
||||
.bookmark_tag:hover { opacity: 0.5; } |
||||
|
||||
.loading_meta { |
||||
display: none; |
||||
margin-left: 5px; |
||||
} |
Before Width: | Height: | Size: 398 B |
@ -1,37 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* ownCloud - bookmarks plugin |
||||
* |
||||
* @author Arthur Schiwon |
||||
* @copyright 2011 Arthur Schiwon blizzz@arthur-schiwon.de |
||||
* |
||||
* 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/>. |
||||
* |
||||
*/ |
||||
|
||||
|
||||
|
||||
// Check if we are a user |
||||
OCP\User::checkLoggedIn(); |
||||
OCP\App::checkAppEnabled('bookmarks'); |
||||
|
||||
OCP\App::setActiveNavigationEntry( 'bookmarks_index' ); |
||||
|
||||
OCP\Util::addscript('bookmarks','bookmarks'); |
||||
OCP\Util::addStyle('bookmarks', 'bookmarks'); |
||||
|
||||
$tmpl = new OCP\Template( 'bookmarks', 'list', 'user' ); |
||||
|
||||
$tmpl->printPage(); |
@ -1,16 +0,0 @@ |
||||
$(document).ready(function() { |
||||
$('#bookmark_add_submit').click(addBookmark); |
||||
}); |
||||
|
||||
function addBookmark(event) { |
||||
var url = $('#bookmark_add_url').val(); |
||||
var tags = $('#bookmark_add_tags').val(); |
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: 'ajax/addBookmark.php', |
||||
data: 'url=' + encodeURI(url) + '&tags=' + encodeURI(tags), |
||||
success: function(data){
|
||||
window.close(); |
||||
} |
||||
}); |
||||
} |
@ -1,201 +0,0 @@ |
||||
var bookmarks_page = 0; |
||||
var bookmarks_loading = false; |
||||
|
||||
var bookmarks_sorting = 'bookmarks_sorting_recent'; |
||||
|
||||
$(document).ready(function() { |
||||
$('#bookmark_add_submit').click(addOrEditBookmark); |
||||
$(window).resize(function () { |
||||
fillWindow($('.bookmarks_list')); |
||||
}); |
||||
$(window).resize(); |
||||
$('.bookmarks_list').scroll(updateOnBottom).empty().width($('#content').width()); |
||||
getBookmarks(); |
||||
}); |
||||
|
||||
function getBookmarks() { |
||||
if(bookmarks_loading) { |
||||
//have patience :)
|
||||
return; |
||||
} |
||||
|
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: OC.filePath('bookmarks', 'ajax', 'updateList.php'), |
||||
data: 'tag=' + encodeURIComponent($('#bookmarkFilterTag').val()) + '&page=' + bookmarks_page + '&sort=' + bookmarks_sorting, |
||||
success: function(bookmarks){ |
||||
if (bookmarks.data.length) { |
||||
bookmarks_page += 1; |
||||
} |
||||
$('.bookmark_link').unbind('click', recordClick); |
||||
$('.bookmark_delete').unbind('click', delBookmark); |
||||
$('.bookmark_edit').unbind('click', showBookmark); |
||||
|
||||
for(var i in bookmarks.data) { |
||||
updateBookmarksList(bookmarks.data[i]); |
||||
$("#firstrun").hide(); |
||||
} |
||||
if($('.bookmarks_list').is(':empty')) { |
||||
$("#firstrun").show(); |
||||
} |
||||
|
||||
$('.bookmark_link').click(recordClick); |
||||
$('.bookmark_delete').click(delBookmark); |
||||
$('.bookmark_edit').click(showBookmark); |
||||
|
||||
bookmarks_loading = false; |
||||
if (bookmarks.data.length) { |
||||
updateOnBottom() |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// function addBookmark() {
|
||||
// Instead of creating editBookmark() function, Converted the one above to
|
||||
// addOrEditBookmark() to make .js file more compact.
|
||||
|
||||
function addOrEditBookmark(event) { |
||||
var id = $('#bookmark_add_id').val(); |
||||
var url = encodeEntities($('#bookmark_add_url').val()); |
||||
var title = encodeEntities($('#bookmark_add_title').val()); |
||||
var tags = encodeEntities($('#bookmark_add_tags').val()); |
||||
$("#firstrun").hide(); |
||||
if($.trim(url) == '') { |
||||
OC.dialogs.alert('A valid bookmark url must be provided', 'Error creating bookmark'); |
||||
return false; |
||||
} |
||||
if($.trim(title) == '') { |
||||
OC.dialogs.alert('A valid bookmark title must be provided', 'Error creating bookmark'); |
||||
return false; |
||||
} |
||||
if (id == 0) { |
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: OC.filePath('bookmarks', 'ajax', 'addBookmark.php'), |
||||
data: 'url=' + encodeURIComponent(url) + '&title=' + encodeURIComponent(title) + '&tags=' + encodeURIComponent(tags), |
||||
success: function(response){ |
||||
$('.bookmarks_input').val(''); |
||||
$('.bookmarks_list').empty(); |
||||
bookmarks_page = 0; |
||||
getBookmarks(); |
||||
} |
||||
}); |
||||
} |
||||
else { |
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: OC.filePath('bookmarks', 'ajax', 'editBookmark.php'), |
||||
data: 'id=' + id + '&url=' + encodeURIComponent(url) + '&title=' + encodeURIComponent(title) + '&tags=' + encodeURIComponent(tags), |
||||
success: function(){ |
||||
$('.bookmarks_input').val(''); |
||||
$('#bookmark_add_id').val('0'); |
||||
$('.bookmarks_list').empty(); |
||||
bookmarks_page = 0; |
||||
getBookmarks(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
} |
||||
|
||||
function delBookmark(event) { |
||||
var record = $(this).parent().parent(); |
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: OC.filePath('bookmarks', 'ajax', 'delBookmark.php'), |
||||
data: 'id=' + record.data('id'), |
||||
success: function(data){ |
||||
if (data.status == 'success') { |
||||
record.remove(); |
||||
if($('.bookmarks_list').is(':empty')) { |
||||
$("#firstrun").show(); |
||||
} |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
function showBookmark(event) { |
||||
var record = $(this).parent().parent(); |
||||
$('#bookmark_add_id').val(record.attr('data-id')); |
||||
$('#bookmark_add_url').val(record.children('.bookmark_url:first').text()); |
||||
$('#bookmark_add_title').val(record.children('.bookmark_title:first').text()); |
||||
$('#bookmark_add_tags').val(record.children('.bookmark_tags:first').text()); |
||||
|
||||
if ($('.bookmarks_add').css('display') == 'none') { |
||||
$('.bookmarks_add').slideToggle(); |
||||
} |
||||
} |
||||
|
||||
function replaceQueryString(url,param,value) { |
||||
var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i"); |
||||
if (url.match(re)) |
||||
return url.replace(re,'$1' + param + "=" + value + '$2'); |
||||
else |
||||
return url + '&' + param + "=" + value; |
||||
} |
||||
|
||||
function updateBookmarksList(bookmark) { |
||||
var tags = encodeEntities(bookmark.tags).split(' '); |
||||
var taglist = ''; |
||||
for ( var i=0, len=tags.length; i<len; ++i ){ |
||||
if(tags[i] != '') |
||||
taglist = taglist + '<a class="bookmark_tag" href="'+replaceQueryString( String(window.location), 'tag', encodeURIComponent(tags[i])) + '">' + tags[i] + '</a> '; |
||||
} |
||||
if(!hasProtocol(bookmark.url)) { |
||||
bookmark.url = 'http://' + bookmark.url; |
||||
} |
||||
if(bookmark.title == '') bookmark.title = bookmark.url; |
||||
$('.bookmarks_list').append( |
||||
'<div class="bookmark_single" data-id="' + bookmark.id +'" >' + |
||||
'<p class="bookmark_actions">' + |
||||
'<span class="bookmark_edit">' + |
||||
'<img class="svg" src="'+OC.imagePath('core', 'actions/rename')+'" title="Edit">' + |
||||
'</span>' + |
||||
'<span class="bookmark_delete">' + |
||||
'<img class="svg" src="'+OC.imagePath('core', 'actions/delete')+'" title="Delete">' + |
||||
'</span> ' + |
||||
'</p>' + |
||||
'<p class="bookmark_title">'+ |
||||
'<a href="' + encodeEntities(bookmark.url) + '" target="_blank" class="bookmark_link">' + encodeEntities(bookmark.title) + '</a>' + |
||||
'</p>' + |
||||
'<p class="bookmark_url"><a href="' + encodeEntities(bookmark.url) + '" target="_blank" class="bookmark_link">' + encodeEntities(bookmark.url) + '</a></p>' + |
||||
'</div>' |
||||
); |
||||
if(taglist != '') { |
||||
$('div[data-id="'+ bookmark.id +'"]').append('<p class="bookmark_tags">' + taglist + '</p>'); |
||||
} |
||||
} |
||||
|
||||
function updateOnBottom() { |
||||
//check wether user is on bottom of the page
|
||||
var top = $('.bookmarks_list>:last-child').position().top; |
||||
var height = $('.bookmarks_list').height(); |
||||
// use a bit of margin to begin loading before we are really at the
|
||||
// bottom
|
||||
if (top < height * 1.2) { |
||||
getBookmarks(); |
||||
} |
||||
} |
||||
|
||||
function recordClick(event) { |
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: OC.filePath('bookmarks', 'ajax', 'recordClick.php'), |
||||
data: 'url=' + encodeURIComponent($(this).attr('href')), |
||||
}); |
||||
} |
||||
|
||||
function encodeEntities(s){ |
||||
try { |
||||
return $('<div/>').text(s).html(); |
||||
} catch (ex) { |
||||
return ""; |
||||
} |
||||
} |
||||
|
||||
function hasProtocol(url) { |
||||
var regexp = /(ftp|http|https|sftp)/; |
||||
return regexp.test(url); |
||||
} |
@ -1,23 +0,0 @@ |
||||
/** |
||||
* Copyright (c) 2012 David Iwanowitsch <david at unclouded dot de> |
||||
* This file is licensed under the Affero General Public License version 3 or |
||||
* later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
$(document).ready(function(){ |
||||
OC.search.customResults['Bookm.'] = function(row,item){ |
||||
var a=row.find('a'); |
||||
a.attr('target','_blank'); |
||||
a.click(recordClick); |
||||
} |
||||
}); |
||||
|
||||
function recordClick(event) { |
||||
var jsFileLocation = $('script[src*=bookmarksearch]').attr('src'); |
||||
jsFileLocation = jsFileLocation.replace('js/bookmarksearch.js', ''); |
||||
$.ajax({ |
||||
type: 'POST', |
||||
url: jsFileLocation + 'ajax/recordClick.php', |
||||
data: 'url=' + encodeURI($(this).attr('href')), |
||||
});
|
||||
} |
@ -1,12 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Bookmarks" => "Отметки", |
||||
"unnamed" => "неозаглавено", |
||||
"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Завлачете това в лентата с отметки на браузъра си и го натискайте, когато искате да отметнете бързо някоя страница:", |
||||
"Read later" => "Отмятане", |
||||
"Address" => "Адрес", |
||||
"Title" => "Заглавие", |
||||
"Tags" => "Етикети", |
||||
"Save bookmark" => "Запис на отметката", |
||||
"You have no bookmarks" => "Нямате отметки", |
||||
"Bookmarklet <br />" => "Бутон за отметки <br />" |
||||
); |
@ -1,12 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Bookmarks" => "Adreces d'interès", |
||||
"unnamed" => "sense nom", |
||||
"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Arrossegueu-ho al navegador i feu-hi un clic quan volgueu marcar ràpidament una adreça d'interès:", |
||||
"Read later" => "Llegeix més tard", |
||||
"Address" => "Adreça", |
||||
"Title" => "Títol", |
||||
"Tags" => "Etiquetes", |
||||
"Save bookmark" => "Desa l'adreça d'interès", |
||||
"You have no bookmarks" => "No teniu adreces d'interès", |
||||
"Bookmarklet <br />" => "Bookmarklet <br />" |
||||
); |
@ -1,12 +0,0 @@ |
||||
<?php $TRANSLATIONS = array( |
||||
"Bookmarks" => "Záložky", |
||||
"unnamed" => "nepojmenovaný", |
||||
"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Přetáhněte do Vašeho prohlížeče a kliněte, pokud si přejete rychle uložit stranu do záložek:", |
||||
"Read later" => "Přečíst později", |
||||
"Address" => "Adresa", |
||||
"Title" => "Název", |
||||
"Tags" => "Tagy", |
||||
"Save bookmark" => "Uložit záložku", |
||||
"You have no bookmarks" => "Nemáte žádné záložky", |
||||
"Bookmarklet <br />" => "Záložky <br />" |
||||
); |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue