]> dev.renevier.net Git - syp.git/blob - changes.php
initial commit
[syp.git] / changes.php
1 <?php
2 /* Copyright (c) 2009 Arnaud Renevier, Inc, published under the modified BSD
3    license. */
4
5 require ("./inc/settings.php");
6 require ("./inc/errors.php");
7 require ("./inc/db/mysql.php");
8 require ("./inc/utils.php");
9
10 function unique_file ($dirname, $relpath, $con) {
11    $relpath = str_replace ('/', '', $relpath); // strip slashes from path
12    $relpath = str_replace ('\\', '', $relpath); // strip antislashes from path
13    $filename = $dirname . '/' . $relpath;
14    $counter = 1;
15
16    $dotpos = strrpos ($relpath, '.');
17    if ($dotpos) {
18        $base = substr ($relpath, 0, $dotpos);
19        $ext = substr ($relpath, $dotpos + 1);
20    } else {
21        $base = $relpath;
22        $ext = "";
23    }
24
25    while ($counter < 1000) {
26        if (!file_exists ($filename) && !$con->imgurl_exists ($filename)) {
27            return $filename;
28        } else {
29             $counter++;
30             $filename = $dirname . '/' . $base . '_' . $counter . '.' . $ext;
31        }
32    }
33    // we tried to find an unused filename 1000 times. Give up now.
34    return null;
35 }
36
37 function checkimgupload ($file) {
38     if (!is_uploaded_file ($file ["tmp_name"])) {
39         if ($file ["error"] ==  UPLOAD_ERR_INI_SIZE) {
40             file_too_big_error ();
41         } else {
42             request_error ();
43         }
44     }
45     if (!getimagesize ($file ["tmp_name"])) {
46         notanimage_error ();
47     }
48 }
49
50 function main ($con) {
51     if (isset ($_FILES ["newimage_input"])) {
52         $file = $_FILES ["newimage_input"];
53         checkimgupload ($file);
54
55         $dest = unique_file (UPLOADDIR, $file ["name"], $con);
56         if (!isset ($dest) || 
57              (!move_uploaded_file ($file ["tmp_name"], $dest))) {
58             server_error ();
59         }
60
61         exit (sprintf ("<p class=\"res\">request accepted</p>
62                         <p class=\"infos\"><span class=\"imgurl\">%s</p></span></p>", 
63                         rawurlencode ($dest)));
64     } else if (isset ($_POST ["feature_imgurl"])) {
65         $imgurl = rawurldecode (unquote ($_POST ["feature_imgurl"]));
66         $title = unquote ($_POST ["feature_title"]);
67         $description = unquote ($_POST ["feature_description"]);
68         $lon = $_POST ["feature_lon"];
69         $lat = $_POST ["feature_lat"];
70
71         try {
72             $feature = new feature ($imgurl, $title, $description, $lon, $lat);
73         } catch (Exception $e) {
74             switch ($e->getMessage ()) {
75                case $feature->err_lonlat_invalid:
76                    request_error ();
77                default:
78                    server_error ();
79             }
80         }
81
82         try {
83             if (!$con->save_feature ($feature)) {
84                 feature_unavailable ();
85             }
86         } catch (Exception $e) {
87             server_error ();
88         }
89
90         request_success ();
91     } else if (isset ($_POST ["feature_delete"])) {
92         $imgurl = rawurldecode (unquote ($_POST ["feature_delete"]));
93         $feature = $con->getfeature ($imgurl);
94         if (!isset ($feature)) {
95             feature_unavailable ();
96         }
97
98         try {
99             $con->delete_feature ($feature);
100         } catch (Exception $e) {
101             server_error ();
102         }
103
104         request_success ();
105     } else if (isset ($_POST ["imgurl_delete_0"])) {
106         $idx = 0;
107         while (isset ($_POST ["imgurl_delete_" . $idx])) {
108             $imgurl = rawurldecode (unquote ($_POST ["imgurl_delete_" .  $idx]));
109             if (!$con->imgurl_exists ($imgurl)) {
110                 if (file_exists ($imgurl)) {
111                     unlink ($imgurl);
112                 } else {
113                     $fname = relative_path ($imgurl);
114                     if (file_exists ($fname)) {
115                         unlink ($fname);
116                     }
117                 }
118             }
119             $idx++;
120         }
121     } else {
122         request_error ();
123     }
124 }
125
126 try {
127     $connection->connect (DBHOST, DBUSER, DBPWD, DBNAME, DBPREFIX);
128 } catch (Exception $e) {
129     server_error ();
130 }
131 $cookie_name = sprintf ("%sauth", DBPREFIX);
132 if (!isset ($_COOKIE [$cookie_name]) ||
133    !$connection->checkpwdmd5 ("admin", $_COOKIE [$cookie_name])) {
134        access_denied ();
135 }
136
137 main ($connection)
138 ?>