1
0
Fork 0

initial Commit

This commit is contained in:
Findus23 2016-02-05 11:47:37 +01:00
parent f4ceda336a
commit a9869b7716
8 changed files with 4071 additions and 0 deletions

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
/vendor/
.buildpath
.externalToolBuilders/
.project
.settings/
node_modules/
output/

8
.travis.yml Normal file
View file

@ -0,0 +1,8 @@
language: php
php:
- '5.4'
- '5.5'
- '5.6'
- '7.0'
- hhvm
- nightly

35
Gruntfile.js Normal file
View file

@ -0,0 +1,35 @@
'use strict';
module.exports = function(grunt) {
// load all grunt tasks
require('time-grunt')(grunt);
grunt.initConfig();
grunt.loadNpmTasks('grunt-notify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-exec');
//
grunt.initConfig({
watch: {
options: {
atBegin: true,
},
php: {
files: ['functions.php'],
tasks: 'php',
}
},
exec: {
document: {
command: 'vendor/bin/phpdoc -d ./ -i /vendor/,/plugins/,node_modules/'
},
correct: {
command: 'vendor/bin/phpcbf --standard=PSR2 functions.php'
},
codesniffer: {
command: 'vendor/bin/phpcs --standard=PSR2 functions.php'
}
},
});
// the default task (running "grunt" in console) is "watch"
grunt.registerTask('default', ['watch']);
grunt.registerTask('php', ['exec:document', 'exec:correct', 'exec:codesniffer']);
};

22
composer.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "Findus23/php-functions",
"type": "library",
"description": "useful php functions",
"homepage": "https://github.com/Findus23/php-functions",
"require": {
"php": ">=5.6"
},
"license": "MIT",
"authors": [{
"name": "Lukas Winkler",
"email": "l.winkler23@me.com"
}],
"require-dev": {
"squizlabs/php_codesniffer": "2.*",
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "5.0.*",
},
"autoload": {
"files": ["functions.php"]
}
}

3745
composer.lock generated Normal file

File diff suppressed because it is too large Load diff

195
functions.php Normal file
View file

@ -0,0 +1,195 @@
<?php
/**
* Functions
*
* @author Lukas Winkler <l.winkler23@me.com>
* @license MIT https://opensource.org/licenses/MIT
*/
namespace Findus23;
/**
* For development: dump variable
*
* @param mixed $var
*/
function debug($var)
{
// echo "<pre>";
var_dump($var);
// echo "</pre>";
}
/**
* clean html created by editor
*
* * no inline css
* * no unnecessary tags
* * remove empty tags (<span></span>)
* * remove <span> without attributes
* * add target="_blank" to all links
*
* @param string $input
* input-HTML
* @param string $linkify
* auto-link URLs
* @return string clean HTML
*/
function clean_html($input, $linkify = true)
{
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$config->set('HTML.ForbiddenAttributes', 'style,class,size');
$config->set('HTML.ForbiddenElements', 'font,div');
$config->set('AutoFormat.RemoveEmpty', true);
$config->set('AutoFormat.Linkify', $linkify);
$config->set('AutoFormat.RemoveSpansWithoutAttributes', true);
$config->set('HTML.TargetBlank', true);
$config->set('Output.TidyFormat', true); // doesn't work without tidy
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($input);
return $clean_html;
}
/**
* shorten text for preview
*
* @param string $text
* input text
* @param integer $lenght
* @param integer $tolerance
* how much additional lenght is acceptable
* @return string shortend string
*/
function text_preview($text, $lenght, $tolerance)
{
$text = str_replace("<p", " <p", $text);
$text = str_replace("<div", " <div", $text);
$text = html2text($text); // remove HTML
$text = substr($text, 0, $lenght + $tolerance + 20); // shorten to improve runtime
if (strlen($text) < $lenght) { // if the text is to short, directly export it.
return $text;
}
$separators = array ( // split at first at sentences
".",
",",
" "
);
foreach ($separators as $separator) {
$array = explode($separator, $text);
$preview = "";
$j = 0;
do { // add parts (sentences/words) until it is longer as $length
$preview .= $array[$j] . $separator;
$j += 1;
} while (strlen($preview) < $lenght);
if (strlen($preview) < $lenght + $tolerance) {
// If the length is within the tolerance range, exit.
// If not try again with a different separator.
return $preview;
}
}
return substr($text, 0, $lenght); // if it doesn't work, make a hard cut
}
/**
* generate slug from title
*
* @author Maerlyn
* @link http://stackoverflow.com/a/2955878
* @param $text input
* text
* @return string slug
*/
function slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text)) {
return 'n-a';
}
return $text;
}
/**
* echo a bootstrap alert
*
* @param string $type
* {success|info|waning|danger}
* @param string $message
*
*/
function alert($type, $message)
{
echo "<div class='alert alert-$type' role='alert'>$message</div>"; // TODO: -> return
}
/**
* convert HTML-Code to text
*
* @param string $input
* @param boolean $admin
* @return string text
*/
function html2text($input, $admin = true)
{
if ($admin) {
$path = "../";
} else {
$path = "";
}
// require_once $path . "include/libs/html2text/src/Html2Text.php";
if (! empty($input)) {
// https://github.com/soundasleep/html2text/issues/6
$input = mb_convert_encoding($input, 'HTML-ENTITIES', 'UTF-8');
$text = Html2Text\Html2Text::convert($input);
return $text;
} else {
return "";
}
}
/**
* Generate Date from Timestamp
*
* @param integer $time
* timestamp
* @param string $lang
* @return string 20. Jänner 2014
*/
function format_date($timestamp, $lang)
{
if ($lang == "de") {
$day = strftime("%d", $timestamp)*1; //without leading 0
$month_number = strftime("%m", $timestamp);
$year = strftime("%Y", $timestamp);
$months = array (
"Jänner",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
);
$month = $months[$month_number - 1];
return "$day. $month $year";
} else {
return strftime("%d. %B %Y", $timestamp);
}
}

31
package.json Normal file
View file

@ -0,0 +1,31 @@
{
"name": "@Findus23/php-functions",
"version": "1.0.0",
"description": "useful php functions",
"keywords": [
"php",
"functions"
],
"homepage": "https://github.com/Findus23/php-functions",
"bugs": "https://github.com/Findus23/php-functions/issues",
"repository": {
"type": "git",
"url": "https://github.com/Findus23/php-functions.git"
},
"contributors": {
"name": "Lukas Winkler",
"email": "l.winkler23@me.com"
},
"main": "index.js",
"author": "Lukas Winkler",
"license": "MIT",
"dependencies": {
"grunt-exec": "^0.4.6"
},
"devDependencies": {
"grunt": "^0.4.5",
"grunt-notify": "^0.4.3",
"grunt-contrib-watch": "^0.6.1",
"time-grunt": "^1.3.0"
}
}

28
tests.php Normal file
View file

@ -0,0 +1,28 @@
<?php
namespace Findus23;
class FunctionTest extends \PHPUnit_Framework_TestCase {
public function testslugify() {
$titles = array (
"Test" => "test",
"Überschrift" => "ueberschrift",
"Leer Zeichen" => "leer-zeichen",
"Fuß" => "fuss",
"Sonderzeichen?=%" => "sonderzeichen",
"Rosé" => "rose",
"Weinbrief Nr. 18" => "weinbrief-nr-18"
);
foreach ($titles as $title => $slug) {
$this->assertEquals(slugify($title), $slug);
}
}
public function testformat_time() {
$this->assertEquals("17. Oktober 2010", format_date(strtotime('2010-10-17 00:00:00'),"de"));
$this->assertEquals("5. Jänner 2015", format_date(strtotime('2015-01-5 00:00:00'),"de"));
$this->assertEquals("30. Dezember 2016", format_date(strtotime('2016-12-30 00:00:00'),"de"));
$this->assertEquals("17. October 2010", format_date(strtotime('2010-10-17 00:00:00'),"en"));
;
}
}