+function get_temppath() {
+ $a = get_app();
+
+ $temppath = get_config("system", "temppath");
+
+ if (($temppath != "") && App::directory_usable($temppath)) {
+ // We have a temp path and it is usable
+ return App::realpath($temppath);
+ }
+
+ // We don't have a working preconfigured temp path, so we take the system path.
+ $temppath = sys_get_temp_dir();
+
+ // Check if it is usable
+ if (($temppath != "") && App::directory_usable($temppath)) {
+ // Always store the real path, not the path through symlinks
+ $temppath = App::realpath($temppath);
+
+ // To avoid any interferences with other systems we create our own directory
+ $new_temppath = $temppath . "/" . $a->get_hostname();
+ if (!is_dir($new_temppath)) {
+ /// @TODO There is a mkdir()+chmod() upwards, maybe generalize this (+ configurable) into a function/method?
+ mkdir($new_temppath);
+ }
+
+ if (App::directory_usable($new_temppath)) {
+ // The new path is usable, we are happy
+ set_config("system", "temppath", $new_temppath);
+ return $new_temppath;
+ } else {
+ // We can't create a subdirectory, strange.
+ // But the directory seems to work, so we use it but don't store it.
+ return $temppath;
+ }
+ }
+
+ // Reaching this point means that the operating system is configured badly.
+ return '';
+}
+