コード例 #1
0
 public function actionConfig()
 {
     $a = Yii::app();
     list($cont, $action) = explode('/', $a->urlManager->parseUrl($a->request));
     if ('site' == $cont) {
         throw new CHttpException(403, 'Forbidden: You are not authorized to access this page.');
     }
     $path = preg_replace('/controllers/', 'config/params.php', dirname(__FILE__));
     Yii::trace("SC.actionConfig called with path {$path}", 'application.controllers.SiteController');
     $model = Parish::model()->findByPk(1);
     if (!isset($model)) {
         $model = new Parish();
     }
     $installed = Yii::app()->params['installed'];
     if (!$installed and !is_writable($path)) {
         Yii::app()->user->setFlash("error", "WARNING: the file {$path} needs to be writable before submitting this form." . "Please change the permissions of the file or, if it does not exist, of the parent config directory");
     } elseif (isset($_POST['Parish'])) {
         $model->attributes = $_POST['Parish'];
         Yii::trace("model attributes: " . var_export($model->attributes, true), 'application.controllers.SiteController');
         try {
             if (isset($_FILES['Parish'])) {
                 $files = $_FILES['Parish'];
                 $filename = $files['name']['logo'];
                 Yii::trace("IC.actionConfig called with logo {$filename}", 'application.controllers.InstallController');
                 if (isset($filename) and !empty($filename)) {
                     $tmp_path = $files['tmp_name']['logo'];
                     Yii::trace("IC.actionConfig logo temp path {$tmp_path}", 'application.controllers.InstallController');
                     if (isset($tmp_path) and !empty($tmp_path)) {
                         $dir = "images/";
                         $fname = preg_replace('/\\.[a-z]+$/i', '', $filename);
                         preg_match('/(\\.[a-z]+)$/i', $filename, $matches);
                         $fext = $matches[0];
                         if (file_exists($dir . $filename)) {
                             $fname .= "_01";
                             while (file_exists($dir . $fname . $fext)) {
                                 ++$fname;
                             }
                         }
                         $dest = $dir . $fname . $fext;
                         $parishLogo = array();
                         $parishLogo['logo_src'] = "/{$dest}";
                         list($width, $height) = getimagesize($tmp_path);
                         Yii::trace("IC.actionConfig logo dimensions {$width} x {$height}", 'application.controllers.InstallController');
                         $parishLogo['logo_width'] = $width;
                         $parishLogo['logo_height'] = $height;
                         if (is_writable($dir)) {
                             move_uploaded_file($tmp_path, $dest);
                             $model->attributes = $parishLogo;
                         } else {
                             $path = preg_replace('?protected/controllers?', $dest, dirname(__FILE__));
                             throw new Exception("Path {$path} not writable. Please ensure write permissions");
                         }
                     } else {
                         $errors = array(1 => "Size exceeds max_upload", 2 => "FORM_SIZE", 3 => "No tmp dir", 4 => "can't write", 5 => "error extension", 6 => "error partial");
                         throw new Exception($errors[$files['error']['logo']]);
                     }
                 }
             }
             if (!$installed) {
                 $params = array('installed' => true);
                 $fh = fopen($path, "r");
                 $header = "";
                 for ($i = 0; $i < 21; ++$i) {
                     if (($line = fgets($fh)) !== false) {
                         $header .= $line;
                     } else {
                         break;
                     }
                 }
                 fclose($fh);
                 $conf = $header . "return " . var_export($params, true) . ";\n";
                 file_put_contents($path, $conf);
             }
             if (!$model->save(false)) {
                 $errs = $model->errors;
                 throw new Exception("Unable to save parish data: " . $errs[0]);
             }
         } catch (Exception $e) {
             Yii::app()->user->setFlash('error', $e->getMessage());
         }
         if ("admin" != $cont) {
             $this->render("/{$cont}/success");
             return;
         } else {
             Yii::app()->user->setFlash('msg', 'Parish data saved successfully');
         }
     }
     $this->render("/{$cont}/config", array('model' => $model));
 }