Fixes vim mode line.
[platal.git] / include / misc.inc.php
index 3615bcb..27ee642 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -204,7 +204,18 @@ function make_datetime($date)
         return new DateTime("@$date");
     } else {
         try {
+            $list = explode('/', $date);
+            if (count($list) == 3) {
+                $date = $list[1] . '/' . $list[0] . '/' . $list[2];
+            }
+            // FIXME: On PHP < 5.3, parsing error are reported using an error,
+            //        not an exception. Thus count the number of error to detect
+            //        errors.
+            $errors = @count($GLOBALS['pl_errors']);
             $d = new DateTime($date);
+            if (@count($GLOBALS['pl_errors']) > $errors) {
+                return null;
+            }
             return $d;
         } catch (Exception $e) {
             return null;
@@ -323,5 +334,69 @@ function format_datetime($date, $format)
 //    }
 }
 
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+/** Get the first n characters of the string
+ */
+function left($string, $count)
+{
+    return substr($string, 0, $count);
+}
+
+/** Get the last n characters of the string
+ */
+function right($string, $count)
+{
+    return substr($string, -$count);
+}
+
+/** Check if a string is a prefix for another one.
+ */
+function starts_with($string, $prefix, $caseSensitive = true)
+{
+    $prefixLen = strlen($prefix);
+    if (strlen($string) < $prefixLen) {
+        return false;
+    }
+    $part = left($string, $prefixLen);
+    if ($caseSensitive) {
+        return strcmp($prefix, $part) === 0;
+    } else {
+        return strcasecmp($prefix, $part) === 0;
+    }
+}
+
+/** Check if a string is a suffix for another one.
+ */
+function ends_with($string, $suffix, $caseSensitive = true)
+{
+    $suffixLen = strlen($suffix);
+    if (strlen($string) < $suffixLen) {
+        return false;
+    }
+    $part = right($string, $suffixLen);
+    if ($caseSensitive) {
+        return strcmp($suffix, $part) === 0;
+    } else {
+        return strcasecmp($suffix, $part) === 0;
+    }
+}
+
+/** Check if the input data can be seen as an integer.
+ */
+function can_convert_to_integer($data)
+{
+    return is_int($data) || ctype_digit($data) || ($data[0] == '-' && ctype_digit(substr($data, 1)));
+}
+
+/** Interpret the input data as an integer or return false.
+ */
+function to_integer($data)
+{
+    if (!can_convert_to_integer($data)) {
+        return false;
+    }
+    return intval($data);
+}
+
+
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
 ?>