示例#1
0
// http://www.codendi.com
//
//
//
//	Originally written by Laurent Julliard 2004, Codendi Team, Xerox
//
$project_manager = ProjectManager::instance();
$project = $project_manager->getProject($group_id);
$project_svnroot = $project->getSVNRootPath();
$dao = new SVN_AccessFile_DAO();
$path = realpath(dirname(__FILE__) . '/../../../templates/svn/');
$renderer = TemplateRendererFactory::build()->getRenderer($path);
$request->valid(new Valid_String('post_changes'));
$request->valid(new Valid_String('SUBMIT'));
if ($request->isPost() && $request->existAndNonEmpty('post_changes')) {
    $vAccessFile = new Valid_Text('form_accessfile');
    $vAccessFile->setErrorMessage($Language->getText('svn_admin_access_control', 'upd_fail'));
    if ($request->valid($vAccessFile)) {
        $saf = new SVNAccessFile();
        $form_accessfile = null;
        //store the custom access file in db
        if ($request->exist('submit_new_version')) {
            $form_accessfile = trim($saf->parseGroupLines($project, $request->get('form_accessfile'), true));
            $dao->saveNewAccessFileVersionInProject($group_id, $form_accessfile);
        } else {
            $form_accessfile = $saf->parseGroupLines($project, $request->get('other_version_content'), true);
            $version_id = $request->get('version_selected');
            $dao->updateAccessFileVersionInProject($group_id, $version_id);
        }
        $buffer = svn_utils_read_svn_access_file_defaults($project_svnroot);
        $buffer .= $form_accessfile;
 /**
  * Validate request values
  *
  * @param HTTPRequest $request request containing form values
  *
  * @return Array
  */
 function validateRequest($request)
 {
     $status = true;
     $invalid = array();
     $valid = new Valid_String('request_summary');
     $valid->required();
     $summary = trim($request->get('request_summary'));
     if ($request->valid($valid) && strlen($summary) < self::MAX_SUMMARY_LENGTH && $summary != '') {
         $params['summary'] = $summary;
     } else {
         $status = false;
         $invalid[] = $GLOBALS['Language']->getText('plugin_requesthelp', 'summary');
     }
     $valid = new Valid_Text('request_description');
     $valid->required();
     $description = trim($request->get('request_description'));
     $defaultDescription = $GLOBALS['Language']->getText('plugin_requesthelp', 'requesthelp_default_description');
     if ($request->valid($valid) && strlen($description) < self::MAX_DESCRIPTION_LENGTH && $description != '' && $description != $defaultDescription) {
         $params['description'] = $description;
     } else {
         $status = false;
         $invalid[] = 'Description';
     }
     $valid = new Valid_UInt('type');
     $valid->required();
     if ($request->valid($valid)) {
         $requestType = $request->get('type');
         $params['type'] = $requestType;
         switch ($requestType) {
             case RequestHelp::TYPE_SUPPORT:
                 $params['text_type'] = $this->_getPluginProperty('support_request');
                 break;
             case RequestHelp::TYPE_ENHANCEMENT:
                 $params['text_type'] = $this->_getPluginProperty('enhancement_request');
                 break;
             default:
                 $status = false;
                 $invalid[] = 'Type';
                 break;
         }
     } else {
         $status = false;
         $invalid[] = 'Type';
     }
     $valid = new Valid_UInt('severity');
     $valid->required();
     if ($request->valid($valid)) {
         $severity = $request->get('severity');
         $params['severity'] = $severity;
         switch ($severity) {
             case RequestHelp::SEVERITY_MINOR:
                 $params['text_severity'] = 'Minor';
                 break;
             case RequestHelp::SEVERITY_SERIOUS:
                 $params['text_severity'] = 'Serious';
                 break;
             case RequestHelp::SEVERITY_CRITICAL:
                 $params['text_severity'] = 'Critical';
                 break;
             default:
                 $status = false;
                 $invalid[] = $GLOBALS['Language']->getText('plugin_requesthelp', 'severity');
                 break;
         }
     } else {
         $status = false;
         $invalid[] = $GLOBALS['Language']->getText('plugin_requesthelp', 'severity');
     }
     $cc = array();
     $mails = array_map('trim', preg_split('/[,;]/', $request->get('cc')));
     $rule = new Rule_Email();
     $um = $this->_getUserManager();
     $invalidCc = array();
     foreach ($mails as $mail) {
         if ($rule->isValid($mail)) {
             $cc[] = $mail;
         } else {
             if (trim($mail) != '') {
                 $user = $um->findUser($mail);
                 if ($user) {
                     $mail = $user->getUserName();
                     if ($mail) {
                         $cc[] = $mail;
                     } else {
                         $invalidCc[] = $mail;
                     }
                 } else {
                     $invalidCc[] = $mail;
                 }
             }
         }
     }
     if (!empty($invalidCc)) {
         $c = $this->getController();
         $c->addWarn($GLOBALS['Language']->getText('plugin_requesthelp', 'requesthelp_invalid_cc', implode(", ", $invalidCc)));
     }
     $params['cc'] = implode(";", $cc);
     return array('status' => $status, 'params' => $params, 'invalid' => $invalid);
 }
示例#3
0
function frs_process_release_form($is_update, $request, $group_id, $title, $url)
{
    global $frspf, $frsrf, $frsff;
    $pm = ProjectManager::instance();
    //get and filter all inputs from $request
    $release = array();
    $res = $request->get('release');
    $vName = new Valid_String();
    $vPackage_id = new Valid_UInt();
    $vStatus_id = new Valid_UInt();
    if ($vName->validate($res['name']) && $vPackage_id->validate($res['package_id']) && $vStatus_id->validate($res['status_id'])) {
        $release['status_id'] = $res['status_id'];
        $release['name'] = $res['name'];
        $release['package_id'] = $res['package_id'];
    } else {
        $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_update_failed'));
        $GLOBALS['Response']->redirect('/file/showfiles.php?group_id=' . $group_id);
    }
    $um = UserManager::instance();
    $user = $um->getCurrentUser();
    $vDate = new Valid_String();
    if ($vDate->validate($res['date'])) {
        $release['date'] = $res['date'];
    } else {
        $release['date'] = "";
    }
    $vRelease_notes = new Valid_Text();
    if ($vRelease_notes->validate($res['release_notes'])) {
        $release['release_notes'] = $res['release_notes'];
    } else {
        $release['release_notes'] = "";
    }
    $vChange_log = new Valid_Text();
    if ($vChange_log->validate($res['change_log'])) {
        $release['change_log'] = $res['change_log'];
    } else {
        $release['change_log'] = "";
    }
    if ($request->valid(new Valid_String('js'))) {
        $js = $request->get('js');
    } else {
        $js = "";
    }
    if ($request->validArray(new Valid_String('ftp_file'))) {
        $ftp_file = $request->get('ftp_file');
    } else {
        $ftp_file = array();
    }
    if ($request->validArray(new Valid_UInt('file_processor'))) {
        $file_processor = $request->get('file_processor');
    } else {
        $file_processor = array();
    }
    if ($request->validArray(new Valid_UInt('file_type'))) {
        $file_type = $request->get('file_type');
    } else {
        $file_type = array();
    }
    if ($request->validArray(new Valid_String('reference_md5'))) {
        $reference_md5 = $request->get('reference_md5');
    } else {
        $reference_md5 = array();
    }
    if ($request->validArray(new Valid_String('comment'))) {
        $comment = $request->get('comment');
    } else {
        $comment = array();
    }
    if ($request->validArray(new Valid_UInt('ftp_file_processor'))) {
        $ftp_file_processor = $request->get('ftp_file_processor');
    } else {
        $ftp_file_processor = array();
    }
    if ($request->validArray(new Valid_UInt('ftp_file_type'))) {
        $ftp_file_type = $request->get('ftp_file_type');
    } else {
        $ftp_file_type = array();
    }
    if ($request->validArray(new Valid_String('ftp_reference_md5'))) {
        $ftp_reference_md5 = $request->get('ftp_reference_md5');
    } else {
        $ftp_reference_md5 = array();
    }
    if ($request->valid(new Valid_String('release_news_subject'))) {
        $release_news_subject = $request->get('release_news_subject');
    } else {
        $release_news_subject = "";
    }
    if ($request->valid(new Valid_Text('release_news_details'))) {
        $release_news_details = $request->get('release_news_details');
    } else {
        $release_news_details = "";
    }
    if ($request->valid(new Valid_WhiteList('private_news', array(0, 1)))) {
        $private_news = $request->get('private_news');
    } else {
        $private_news = 0;
    }
    if ($request->validArray(new Valid_UInt('ugroups'))) {
        $ugroups = $request->get('ugroups');
    } else {
        $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_update_failed'));
        $GLOBALS['Response']->redirect('/file/showfiles.php?group_id=' . $group_id);
    }
    if ($request->valid(new Valid_WhiteList('release_submit_news', array(0, 1)))) {
        $release_submit_news = (int) $request->get('release_submit_news');
    } else {
        $release_submit_news = 0;
    }
    if ($request->valid(new Valid_WhiteList('notification', array(0, 1)))) {
        $notification = $request->get('notification');
    } else {
        $notification = 0;
    }
    if ($is_update) {
        if ($request->validArray(new Valid_UInt('release_files_to_delete'))) {
            $release_files_to_delete = $request->get('release_files_to_delete');
        } else {
            $release_files_to_delete = array();
        }
        if ($request->validArray(new Valid_UInt('release_files'))) {
            $release_files = $request->get('release_files');
        } else {
            $release_files = array();
        }
        if ($request->validArray(new Valid_UInt('release_file_processor'))) {
            $release_file_processor = $request->get('release_file_processor');
        } else {
            $release_file_processor = array();
        }
        if ($request->validArray(new Valid_UInt('release_file_type'))) {
            $release_file_type = $request->get('release_file_type');
        } else {
            $release_file_type = array();
        }
        if ($request->validArray(new Valid_String('release_reference_md5'))) {
            $release_reference_md5 = $request->get('release_reference_md5');
        } else {
            $release_reference_md5 = array();
        }
        if ($request->validArray(new Valid_UInt('new_release_id'))) {
            $new_release_id = $request->get('new_release_id');
        } else {
            $new_release_id = array();
        }
        if ($request->validArray(new Valid_String('release_time'))) {
            $release_time = $request->get('release_time');
        } else {
            $release_time = array();
        }
        if ($request->validArray(new Valid_String('reference_md5'))) {
            $reference_md5 = $request->get('reference_md5');
        } else {
            $reference_md5 = array();
        }
        if ($request->validArray(new Valid_Text('release_comment'))) {
            $release_comment = $request->get('release_comment');
        } else {
            $release_comment = array();
        }
        if ($request->valid(new Valid_UInt('id'))) {
            $release['release_id'] = $request->get('id');
        } else {
            exit;
        }
    }
    $validator = new frsValidator();
    if ($is_update) {
        $valid = $validator->isValidForUpdate($release, $group_id);
    } else {
        $valid = $validator->isValidForCreation($release, $group_id);
    }
    if ($valid) {
        //uplaod release_notes and change_log if needed
        $data_uploaded = false;
        if (isset($_FILES['uploaded_change_log']) && !$_FILES['uploaded_change_log']['error']) {
            $code = addslashes(fread(fopen($_FILES['uploaded_change_log']['tmp_name'], 'r'), file_utils_get_size($_FILES['uploaded_change_log']['tmp_name'])));
            if (strlen($code) > 0 && strlen($code) < $GLOBALS['sys_max_size_upload']) {
                //size is fine
                $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'data_uploaded'));
                $data_uploaded = true;
                $release['change_log'] = $code;
            } else {
                //too big or small
                $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'length_err', $GLOBALS['sys_max_size_upload']));
            }
        }
        if (isset($_FILES['uploaded_release_notes']) && !$_FILES['uploaded_release_notes']['error']) {
            $code = addslashes(fread(fopen($_FILES['uploaded_release_notes']['tmp_name'], 'r'), file_utils_get_size($_FILES['uploaded_release_notes']['tmp_name'])));
            if (strlen($code) > 0 && strlen($code) < $GLOBALS['sys_max_size_upload']) {
                //size is fine
                if (!$data_uploaded) {
                    $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'data_uploaded'));
                }
                $release['release_notes'] = $code;
            } else {
                //too big or small
                $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'length_err', $GLOBALS['sys_max_size_upload']));
            }
        }
        if ($is_update) {
            // make sure that we don't change the date by error because of timezone reasons.
            // eg: release created in India (GMT +5:30) at 2004-06-03.
            // MLS in Los Angeles (GMT -8) changes the release notes
            // the release_date that we showed MLS is 2004-06-02.
            // with mktime(0,0,0,2,6,2004); we will change the unix time in the database
            // and the people in India will discover that their release has been created on 2004-06-02
            $rel =& $frsrf->getFRSReleaseFromDb($release['release_id']);
            if (format_date('Y-m-d', $rel->getReleaseDate()) == $release['date']) {
                // the date didn't change => don't update it
                $unix_release_time = $rel->getReleaseDate();
            } else {
                $date_list = split("-", $release['date'], 3);
                $unix_release_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]);
            }
        } else {
            //parse the date
            $date_list = split("-", $release['date'], 3);
            $unix_release_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]);
        }
        //now we create or update the release
        $array = array('release_date' => $unix_release_time, 'name' => $release['name'], 'status_id' => $release['status_id'], 'package_id' => $release['package_id'], 'notes' => $release['release_notes'], 'changes' => $release['change_log']);
        if ($is_update) {
            $array['release_id'] = $release['release_id'];
        }
        if ($is_update) {
            $res = $frsrf->update($array);
            if (!$res) {
                $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_update_failed'));
                //insert failed - go back to definition screen
            } else {
                //release added - now show the detail page for this new release
                $release_id = $array['release_id'];
                $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_updated', $release['name']));
            }
        } else {
            $res = $frsrf->create($array);
            if (!$res) {
                $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language'] > getText('file_admin_editreleases', 'add_rel_fail'));
                //insert failed - go back to definition screen
            } else {
                //release added - now show the detail page for this new release
                $release_id = $res;
                $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_added'));
            }
        }
        if ($res) {
            // extract cross references
            $reference_manager =& ReferenceManager::instance();
            $reference_manager->extractCrossRef($release['release_notes'], $release_id, ReferenceManager::REFERENCE_NATURE_RELEASE, $group_id);
            $reference_manager->extractCrossRef($release['change_log'], $release_id, ReferenceManager::REFERENCE_NATURE_RELEASE, $group_id);
            //set the release permissions
            list($return_code, $feedbacks) = permission_process_selection_form($group_id, 'RELEASE_READ', $release_id, $ugroups);
            if (!$return_code) {
                $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editpackages', 'perm_update_err'));
                $GLOBALS['Response']->addFeedback('error', $feedbacks);
            }
            //submit news if requested
            if ($release_id && user_ismember($group_id, 'A') && $release_submit_news) {
                news_submit($group_id, $release_news_subject, $release_news_details, $private_news, 3);
            }
            // Send notification
            if ($notification) {
                $rel = $frsrf->getFRSReleaseFromDb($release_id);
                $count = $frsrf->emailNotification($rel);
                if ($count === false) {
                    $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'mail_failed', array($GLOBALS['sys_email_admin'])));
                } else {
                    if ($count > 0) {
                        $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'email_sent', $count));
                    }
                }
            }
            $group = $pm->getProject($group_id);
            $group_unix_name = $group->getUnixName(false);
            $project_files_dir = $GLOBALS['ftp_frs_dir_prefix'] . '/' . $group_unix_name;
            if ($is_update) {
                $files =& $rel->getFiles();
                //remove files
                foreach ($release_files_to_delete as $rel_file) {
                    $res =& $frsff->getFRSFileFromDb($rel_file);
                    $fname = $res->getFileName();
                    $res = $frsff->delete_file($group_id, $rel_file);
                    if ($res == 0) {
                        $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'f_not_yours', basename($fname)));
                    } else {
                        $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'file_deleted', basename($fname)));
                    }
                }
                //update files
                $index = 0;
                foreach ($release_files as $rel_file) {
                    if (!$release_files_to_delete || !in_array($rel_file, $release_files_to_delete)) {
                        $package_id = $release['package_id'];
                        $fname = $files[$index]->getFileName();
                        $list = split('/', $fname);
                        $fname = $list[sizeof($list) - 1];
                        if ($new_release_id[$index] != $release_id) {
                            //changing to a different release for this file
                            //see if the new release is valid for this project
                            $res2 = $frsrf->getFRSReleaseFromDb($new_release_id[$index], $group_id);
                            if (!$res2 || count($res2) < 1) {
                                //release not found for this project
                                $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_not_yours', $fname));
                            } else {
                                $package_id = $res2->getPackageID();
                            }
                        }
                        if ($new_release_id[$index] == $release_id || $res2) {
                            if (!ereg("[0-9]{4}-[0-9]{2}-[0-9]{2}", $release_time[$index])) {
                                $GLOBALS['Response']->addFeedback('warning', $GLOBALS['Language']->getText('file_admin_editreleases', 'data_not_parsed_file', $fname));
                            } else {
                                $res2 =& $frsff->getFRSFileFromDb($rel_file);
                                if (format_date('Y-m-d', $res2->getReleaseTime()) == $release_time[$index]) {
                                    $unix_release_time = $res2->getReleaseTime();
                                } else {
                                    $date_list = split("-", $release_time[$index], 3);
                                    $unix_release_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]);
                                }
                                $array = array('release_id' => $new_release_id[$index], 'release_time' => $unix_release_time, 'type_id' => $release_file_type[$index], 'processor_id' => $release_file_processor[$index], 'file_id' => $rel_file, 'comment' => $release_comment[$index], 'filename' => 'p' . $package_id . '_r' . $new_release_id[$index] . '/' . $fname, 'filepath' => 'p' . $package_id . '_r' . $new_release_id[$index] . '/' . $fname . '_' . $unix_release_time);
                                if ($release_reference_md5[$index] && $release_reference_md5[$index] != '') {
                                    $array['reference_md5'] = $release_reference_md5[$index];
                                }
                                $res = $frsff->update($array);
                                if ($res) {
                                    $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'file_updated', $fname));
                                }
                            }
                        }
                    }
                    $index++;
                }
            }
            //add new files
            //files processing
            $http_files_list = array();
            $processor_type_list = array();
            $file_type_list = array();
            $http_files_processor_type_list = array();
            $ftp_files_processor_type_list = array();
            if (isset($js) && $js == 'no_js') {
                //if javascript is not allowed, there is maximum one file to upload
                // TODO : fix warnings due to array instead of string for "file_processor", "file_type" & "reference_md5"
                if ($ftp_file[0] != -1) {
                    $ftp_files_processor_type_list[] = array('name' => $ftp_file[0], 'processor' => $file_processor, 'type' => $file_type, 'reference_md5' => $reference_md5, 'comment' => $comment);
                } else {
                    if (trim($_FILES['file']['name'][0]) != '') {
                        $http_files_processor_type_list[] = array('error' => $_FILES['file']['error'][0], 'name' => stripslashes($_FILES['file']['name'][0]), 'tmp_name' => $_FILES['file']['tmp_name'][0], 'processor' => $file_processor, 'type' => $file_type, 'reference_md5' => $reference_md5, 'comment' => $comment);
                    }
                }
            } else {
                //get http files with the associated processor type and file type in allowed javascript case
                $nb_files = isset($_FILES['file']) ? count($_FILES['file']['name']) : 0;
                for ($i = 0; $i < $nb_files; $i++) {
                    if (trim($_FILES['file']['name'][$i]) != '') {
                        $http_files_processor_type_list[] = array('error' => $_FILES['file']['error'][$i], 'name' => stripslashes($_FILES['file']['name'][$i]), 'tmp_name' => $_FILES['file']['tmp_name'][$i], 'processor' => $file_processor[$i], 'type' => $file_type[$i], 'reference_md5' => $reference_md5[$i], 'comment' => $comment[$i]);
                    }
                }
                //remove hidden ftp_file input (if the user let the select boxe on --choose file)
                $tmp_file_list = array();
                $index = 0;
                foreach ($ftp_file as $file) {
                    if (trim($file) != '') {
                        $ftp_files_processor_type_list[] = array('name' => $file, 'processor' => $ftp_file_processor[$index], 'type' => $ftp_file_type[$index], 'reference_md5' => $ftp_reference_md5[$index]);
                        $index++;
                    }
                }
            }
            if (count($http_files_processor_type_list) > 0 || count($ftp_files_processor_type_list) > 0) {
                //see if this release belongs to this project
                $res1 =& $frsrf->getFRSReleaseFromDb($release_id, $group_id);
                if (!$res1 || count($res1) < 1) {
                    //release not found for this project
                    $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'rel_not_yours'));
                } else {
                    $now = time();
                    $addingFiles = false;
                    //iterate and add the http files to the frs_file table
                    foreach ($http_files_processor_type_list as $file) {
                        $filename = $file['name'];
                        if (isset($file['error'])) {
                            switch ($file['error']) {
                                case UPLOAD_ERR_OK:
                                    // all is OK
                                    break;
                                case UPLOAD_ERR_INI_SIZE:
                                case UPLOAD_ERR_FORM_SIZE:
                                    $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_size', $file['error']));
                                    break;
                                case UPLOAD_ERR_PARTIAL:
                                    $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_partial', $file['error']));
                                    break;
                                case UPLOAD_ERR_NO_FILE:
                                    $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_nofile', $file['error']));
                                    break;
                                default:
                                    $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('global', 'error_upload_unknown', $file['error']));
                            }
                        }
                        if (is_uploaded_file($file['tmp_name'])) {
                            $uploaddir = $frsff->getSrcDir($request->getProject());
                            $uploadfile = $uploaddir . "/" . basename($filename);
                            if (!file_exists($uploaddir) || !is_writable($uploaddir) || !move_uploaded_file($file['tmp_name'], $uploadfile)) {
                                $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'not_add_file') . ": " . basename($filename));
                            } else {
                                $newFile = new FRSFile();
                                $newFile->setRelease($res1);
                                $newFile->setFileName($filename);
                                $newFile->setProcessorID($file['processor']);
                                $newFile->setTypeID($file['type']);
                                $newFile->setReferenceMd5($file['reference_md5']);
                                $newFile->setUserId($user->getId());
                                $newFile->setComment($file['comment']);
                                try {
                                    $frsff->createFile($newFile);
                                    $addingFiles = true;
                                } catch (Exception $e) {
                                    $GLOBALS['Response']->addFeedback('error', $e->getMessage());
                                }
                            }
                        } else {
                            $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('file_admin_editreleases', 'not_add_file') . ": " . basename($filename));
                        }
                    }
                    //iterate and add the ftp files to the frs_file table
                    foreach ($ftp_files_processor_type_list as $file) {
                        $filename = $file['name'];
                        $newFile = new FRSFile();
                        $newFile->setRelease($res1);
                        $newFile->setFileName($filename);
                        $newFile->setProcessorID($file['processor']);
                        $newFile->setTypeID($file['type']);
                        $newFile->setReferenceMd5($file['reference_md5']);
                        $newFile->setUserId($user->getId());
                        try {
                            $frsff->createFile($newFile, ~FRSFileFactory::COMPUTE_MD5);
                            $addingFiles = true;
                            $em = EventManager::instance();
                            $em->processEvent(Event::COMPUTE_MD5SUM, array('fileId' => $newFile->getFileID()));
                            $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'offline_md5', $filename));
                        } catch (Exception $e) {
                            $GLOBALS['Response']->addFeedback('error', $e->getMessage());
                        }
                    }
                }
                if ($addingFiles) {
                    $GLOBALS['Response']->addFeedback('info', $GLOBALS['Language']->getText('file_admin_editreleases', 'add_files'));
                }
            }
            //redirect to files
            $GLOBALS['Response']->redirect('/file/?group_id=' . $group_id);
        }
    } else {
        $GLOBALS['Response']->addFeedback('error', $validator->getErrors());
    }
    frs_display_release_form($is_update, $release, $group_id, $title, $url);
}
示例#4
0
                 } else {
                     $addedUgroups[] = $ugroupName;
                 }
             }
             //update group history
             group_add_history('membership_request_updated', implode(',', $oldUgroups) . ' :: ' . implode(',', $newUgroups), $group_id);
             $GLOBALS['Response']->addFeedback('info', $Language->getText('project_admin_index', 'member_request_delegation_ugroups_msg', implode(', ', $addedUgroups)));
         }
     } else {
         $GLOBALS['Response']->addFeedback('error', $Language->getText('project_admin_index', 'member_request_delegation_ugroups_error'));
     }
     break;
 case 'member_req_notif_message':
     $updatedMessage = true;
     // Validate the text
     $vMessage = new Valid_Text('text');
     $vMessage->required();
     $message = trim($request->get('text'));
     $dar = $pm->getMessageToRequesterForAccessProject($group_id);
     if ($dar && !$dar->isError() && $dar->rowCount() == 1) {
         $row = $dar->current();
         if (!strcmp($row['msg_to_requester'], $message)) {
             $updatedMessage = false;
         }
     }
     if ($request->valid($vMessage) & !empty($message) & $updatedMessage) {
         if ($pm->setMessageToRequesterForAccessProject($group_id, $message)) {
             $GLOBALS['Response']->addFeedback('info', $Language->getText('project_admin_index', 'member_request_delegation_msg_info'));
         }
     } else {
         $GLOBALS['Response']->addFeedback('error', $Language->getText('project_admin_index', 'member_request_delegation_msg_error'));
示例#5
0
 /**
  * Display form to fill a request
  *
  * @param Array $params params of the hook
  *
  * @return Void
  */
 function displayForm($params = null)
 {
     $um = UserManager::instance();
     $user = $um->getCurrentUser();
     $ignoreLabs = $this->getController()->getPlugin()->getProperty('ignore_labs');
     if ($user->isLoggedIn() && ($ignoreLabs || $user->useLabFeatures())) {
         $type = RequestHelp::TYPE_SUPPORT;
         $severity = RequestHelp::SEVERITY_MINOR;
         $summary = '';
         $description = $GLOBALS['Language']->getText('plugin_requesthelp', 'requesthelp_default_description');
         $cc = '';
         if (is_array($params)) {
             $valid = new Valid_UInt();
             if (isset($params['type']) && $valid->validate($params['type'])) {
                 $type = $params['type'];
             }
             if (isset($params['severity']) && $valid->validate($params['severity'])) {
                 $severity = $params['severity'];
             }
             $valid = new Valid_String();
             if (isset($params['summary']) && $valid->validate($params['summary'])) {
                 $summary = $params['summary'];
             }
             $valid = new Valid_Text();
             if (isset($params['description']) && $valid->validate($params['description'])) {
                 $description = $params['description'];
             }
             $valid = new Valid_String();
             if (isset($params['cc']) && $valid->validate($params['cc'])) {
                 $cc = $params['cc'];
             }
         }
         $p = PluginManager::instance()->getPluginByName('requesthelp');
         echo '<fieldset class="requesthelp_fieldset">
          <legend><b>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'requesthelp_explain_label') . '</b></legend>
          <form name="request" class="requesthelp_cssform" action="' . $p->getPluginPath() . '/" method="post" enctype="multipart/form-data">
              <table>
                  <tr>';
         echo '<td><b><a class="tooltip" href="#" title="' . $GLOBALS['Language']->getText('plugin_requesthelp', 'tooltip_type') . '">Type:</a></b>&nbsp;<span class="highlight"><big>*</big></b></span></td><td><select name="type"><option value="' . RequestHelp::TYPE_SUPPORT . '" ';
         if ($type == RequestHelp::TYPE_SUPPORT) {
             echo 'selected';
         }
         echo '>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'Support_request') . '</option>
                      <option value="' . RequestHelp::TYPE_ENHANCEMENT . '" ';
         if ($type == RequestHelp::TYPE_ENHANCEMENT) {
             echo 'selected';
         }
         echo '>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'Enhancement_request') . '</option>
                  </select>';
         echo '</td><td align="right"><b><a class="tooltip" href="#" title="' . $GLOBALS['Language']->getText('plugin_requesthelp', 'tooltip_severity') . '">' . $GLOBALS['Language']->getText('plugin_requesthelp', 'severity') . ':</a></b>&nbsp;<span class="highlight"><big>*</big></b></span>
                          <select name="severity">
                          <option value="' . RequestHelp::SEVERITY_MINOR . '" ';
         if ($severity == RequestHelp::SEVERITY_MINOR) {
             echo 'selected';
         }
         echo '>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'Minor') . '</option>
                          <option value="' . RequestHelp::SEVERITY_SERIOUS . '" ';
         if ($severity == RequestHelp::SEVERITY_SERIOUS) {
             echo 'selected';
         }
         echo '>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'Serious') . '</option>
                          <option value="' . RequestHelp::SEVERITY_CRITICAL . '" ';
         if ($severity == RequestHelp::SEVERITY_CRITICAL) {
             echo 'selected';
         }
         echo '>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'Critical') . '</option>
                          </select>
                      </td>
                  </tr>';
         echo '<tr><td><b><a class="tooltip" href="#" title="' . $GLOBALS['Language']->getText('plugin_requesthelp', 'tooltip_summary') . '">' . $GLOBALS['Language']->getText('plugin_requesthelp', 'summary') . ':</a></b>&nbsp;<span class="highlight"><big>*</big></span></td>
                  <td colspan="3"><input type="text" name="request_summary" value="' . $summary . '" /></td></tr>';
         echo '<tr><td><b><a class="tooltip" href="#" title="' . $GLOBALS['Language']->getText('plugin_requesthelp', 'tooltip_description') . '"><span class="requesthelp_totop">Description:</span></a></b>&nbsp;<span class="highlight"><span class="requesthelp_totop"><big>*</big></b></span></span></td><td  colspan="3"><textarea id="request_description" name="request_description">' . $description . '</textarea></td></tr>
         <tr><td></td><td colspan="3"><i><b><u>Note</u>: </b>' . $GLOBALS['Language']->getText('plugin_requesthelp', 'requesthelp_cc_note') . '</i></td></tr>
         <tr><td><label>CC :</label></td><td  colspan="3"><input id="requesthelp_cc" type="text" name="cc" value="' . $cc . '" /></td></tr>
         <tr><td><input name="action" type="hidden" value="submit_ticket" /></td><td><input name="submit" type="submit" value="Submit" /></td></tr>
             </table>
         </form>
     </fieldset>';
         $js = "\$('request_description').defaultValueActsAsHint();\n                   options = new Array();\n                   options['defaultValueActsAsHint'] = false;\n                   new UserAutoCompleter('requesthelp_cc', '" . util_get_dir_image_theme() . "', true, options);";
         $GLOBALS['Response']->includeFooterJavascriptSnippet($js);
     }
 }
示例#6
0
$valid = new Valid_Text('body');
$valid->required();
if ($request->valid($valid)) {
    $body = $request->get('body');
}
$csrf_token = new CSRFSynchronizerToken('sendmessage.php');
$purifier = Codendi_HTMLPurifier::instance();
if (isset($send_mail)) {
    if (!$subject || !$body || !$email) {
        /*
        force them to enter all vars
        */
        exit_missing_param();
    }
    $csrf_token->check();
    $valid = new Valid_Text('cc');
    $valid->required();
    if ($request->valid($valid)) {
        $cc = $request->get('cc');
    }
    $mailMgr = new MailManager();
    $mail = $mailMgr->getMailByType();
    if (isset($touser)) {
        //Return the user given its user_id
        $to = $um->getUserById($touser);
        if (!$to) {
            exit_error($Language->getText('include_exit', 'error'), $Language->getText('sendmessage', 'err_nouser'));
        }
        $mail->setToUser(array($to));
        $dest = $to->getRealName();
    } else {
示例#7
0
 public function _dispatchActionAndView($action, $repoId, $repositoryName, $user)
 {
     $pane = $this->request->get('pane');
     switch ($action) {
         #CREATE REF
         case 'create':
             $this->addView('create');
             break;
             #admin
         #admin
         case 'view':
             $this->addAction('getRepositoryDetails', array($this->groupId, $repoId));
             $this->addView('view');
             break;
             #ADD REF
         #ADD REF
         case 'add':
             $this->addAction('createReference', array($this->groupId, $repositoryName));
             $this->addView('index');
             break;
             #DELETE a repository
         #DELETE a repository
         case 'del':
             $this->addAction('deleteRepository', array($this->groupId, $repoId));
             $this->addView('index');
             break;
             #EDIT
         #EDIT
         case 'edit':
             $repository = $this->factory->getRepositoryById($repoId);
             if (empty($repository)) {
                 $this->addError($this->getText('actions_params_error'));
                 $this->redirect('/plugins/git/?action=index&group_id=' . $this->groupId);
                 return false;
             }
             if ($this->isAPermittedAction('clone') && $this->request->get('clone')) {
                 $valid = new Valid_UInt('parent_id');
                 $valid->required();
                 if ($this->request->valid($valid)) {
                     $parentId = (int) $this->request->get('parent_id');
                 }
                 $this->addAction('cloneRepository', array($this->groupId, $repositoryName, $parentId));
                 $this->addAction('getRepositoryDetails', array($this->groupId, $parentId));
                 $this->addView('view');
             } else {
                 if ($this->isAPermittedAction('save') && $this->request->get('save')) {
                     $repoDesc = null;
                     if ($this->request->exist('repo_desc')) {
                         $repoDesc = GitRepository::DEFAULT_DESCRIPTION;
                         $valid = new Valid_Text('repo_desc');
                         $valid->required();
                         if ($this->request->valid($valid)) {
                             $repoDesc = $this->request->get('repo_desc');
                         }
                     }
                     $repoAccess = null;
                     $valid = new Valid_String('repo_access');
                     $valid->required();
                     if ($this->request->valid($valid) || is_array($this->request->get('repo_access'))) {
                         $repoAccess = $this->request->get('repo_access');
                     }
                     $this->addAction('save', array($this->groupId, $repoId, $repoAccess, $repoDesc, $pane));
                     $this->addView('view');
                 } else {
                     $this->addError($this->getText('controller_access_denied'));
                     $this->redirect('/plugins/git/?group_id=' . $this->groupId);
                 }
             }
             break;
             #repo_management
         #repo_management
         case 'repo_management':
             $repository = $this->factory->getRepositoryById($repoId);
             if (empty($repository)) {
                 $this->addError($this->getText('actions_repo_not_found'));
                 $this->redirect('/plugins/git/?action=index&group_id=' . $this->groupId);
                 return false;
             }
             $this->addAction('repoManagement', array($repository));
             $this->addView('repoManagement');
             break;
         case 'mail':
             $this->processRepoManagementNotifications($pane, $repoId, $repositoryName, $user);
             break;
             #fork
         #fork
         case 'fork':
             $this->addAction('repoManagement', array($this->groupId, $repoId));
             $this->addView('forkRepositories');
             break;
             #confirm_private
         #confirm_private
         case 'confirm_private':
             if ($this->isAPermittedAction('confirm_deletion') && $this->request->get('confirm_deletion')) {
                 $repository = $this->factory->getRepositoryById($repoId);
                 $this->addAction('confirmDeletion', array($this->groupId, $repository));
                 $this->addView('confirm_deletion', array(0 => array('repo_id' => $repoId)));
             } else {
                 if ($this->isAPermittedAction('save') && $this->request->get('save')) {
                     $valid = new Valid_Text('repo_desc');
                     $valid->required();
                     if ($this->request->valid($valid)) {
                         $repoDesc = $this->request->get('repo_desc');
                     }
                     $valid = new Valid_String('repo_access');
                     $valid->required();
                     if ($this->request->valid($valid)) {
                         $repoAccess = $this->request->get('repo_access');
                     }
                     $this->addAction('confirmPrivate', array($this->groupId, $repoId, $repoAccess, $repoDesc));
                     $this->addView('confirmPrivate');
                 }
             }
             break;
             #SET TO PRIVATE
         #SET TO PRIVATE
         case 'set_private':
             $this->addAction('setPrivate', array($this->groupId, $repoId));
             $this->addView('view');
             break;
         case 'fork_repositories':
             $this->addAction('getProjectRepositoryList', array($this->groupId));
             $this->addView('forkRepositories');
             break;
         case 'admin-git-admins':
             if ($this->request->get('submit')) {
                 $valid = new Valid_Numeric(GitPresenters_AdminGitAdminsPresenter::GIT_ADMIN_SELECTBOX_NAME);
                 $project = $this->projectManager->getProject($this->groupId);
                 if ($this->request->validArray($valid)) {
                     $select_project_ids = $this->request->get(GitPresenters_AdminGitAdminsPresenter::GIT_ADMIN_SELECTBOX_NAME);
                     if ($select_project_ids) {
                         $this->addAction('updateGitAdminGroups', array($project, $user, $select_project_ids));
                     } else {
                         $this->addError($this->getText('no_data_retrieved'));
                     }
                 } else {
                     $this->addError($this->getText('not_valid_request'));
                 }
             }
             $this->addView('adminGitAdminsView', array($this->areMirrorsEnabledForProject()));
             break;
         case 'admin':
         case 'admin-gerrit-templates':
             $project = $this->projectManager->getProject($this->groupId);
             if ($this->request->get('save')) {
                 $template_content = $this->request->getValidated('git_admin_config_data', 'text');
                 if ($this->request->getValidated('git_admin_template_id', 'uint')) {
                     $template_id = $this->request->get('git_admin_template_id');
                     $this->addAction('updateTemplate', array($project, $user, $template_content, $template_id));
                 } else {
                     $template_name = $this->request->getValidated('git_admin_file_name', 'string');
                     $this->addAction('createTemplate', array($project, $user, $template_content, $template_name));
                 }
             }
             if ($this->request->get('delete')) {
                 if ($this->request->getValidated('git_admin_template_id', 'uint')) {
                     $template_id = $this->request->get('git_admin_template_id');
                     $this->addAction('deleteGerritTemplate', array($template_id, $project, $user));
                 }
             }
             if ($this->permissions_manager->userIsGitAdmin($user, $project)) {
                 $this->addAction('generateGerritRepositoryAndTemplateList', array($project, $user));
                 $this->addView('adminGerritTemplatesView', array($this->areMirrorsEnabledForProject()));
             } else {
                 $this->addError($this->getText('controller_access_denied'));
                 $this->redirect('/plugins/git/?action=index&group_id=' . $this->groupId);
                 return false;
             }
             break;
         case 'admin-mass-update':
             if ($this->request->get('save-mass-change') || $this->request->get('go-to-mass-change')) {
                 $this->checkSynchronizerToken('/plugins/git/?group_id=' . (int) $this->groupId . '&action=admin-mass-update');
                 $repositories = $this->getRepositoriesFromIds($this->request->get('repository_ids'));
                 if (!$repositories) {
                     $this->addError($this->getText('actions_repo_not_found'));
                     $this->redirect('/plugins/git/?action=index&group_id=' . $this->groupId);
                 }
             }
             if ($this->request->get('go-to-mass-change')) {
                 $this->addAction('setSelectedRepositories', array($repositories));
                 $this->addView('adminMassUpdateView');
                 return;
             }
             if ($this->request->get('save-mass-change')) {
                 $this->addAction('updateMirroring', array($this->request->getProject(), $repositories, $this->request->get('selected_mirror_ids')));
             }
             $this->addView('adminMassUpdateSelectRepositoriesView');
             break;
         case 'admin-default-settings':
             $this->addView('adminDefaultSettings', array($this->areMirrorsEnabledForProject()));
             break;
         case 'fetch_git_config':
             $project = $this->projectManager->getProject($this->groupId);
             $this->setDefaultPageRendering(false);
             $this->addAction('fetchGitConfig', array($repoId, $user, $project));
             break;
         case 'fetch_git_template':
             $project = $this->projectManager->getProject($this->groupId);
             $template_id = $this->request->getValidated('template_id', 'uint');
             $this->setDefaultPageRendering(false);
             $this->addAction('fetchGitTemplate', array($template_id, $user, $project));
             break;
         case 'fork_repositories_permissions':
             $scope = self::SCOPE_PERSONAL;
             $valid = new Valid_UInt('repos');
             $valid->required();
             if ($this->request->validArray($valid)) {
                 $repos = $this->request->get('repos');
             }
             $valid = new Valid_UInt('to_project');
             if ($this->request->valid($valid)) {
                 $toProject = $this->request->get('to_project');
             }
             $valid = new Valid_String('path');
             $valid->required();
             $path = '';
             if ($this->request->valid($valid)) {
                 $path = $this->request->get('path');
             }
             $valid = new Valid_String('choose_destination');
             $valid->required();
             if ($this->request->valid($valid)) {
                 $scope = $this->request->get('choose_destination');
             }
             if (!empty($repos)) {
                 $this->addAction('forkRepositoriesPermissions', array($repos, $toProject, $path, $scope));
                 $this->addView('forkRepositoriesPermissions');
             } else {
                 $this->addError($this->getText('actions_params_error'));
                 $this->addAction('getProjectRepositoryList', array($this->groupId));
                 $this->addView('forkRepositories');
             }
             break;
         case 'do_fork_repositories':
             try {
                 if ($this->request->get('choose_destination') == self::SCOPE_PERSONAL) {
                     if ($this->user->isMember($this->groupId)) {
                         $this->_doDispatchForkRepositories($this->request, $user);
                     } else {
                         $this->addError($this->getText('controller_access_denied'));
                     }
                 } else {
                     $this->_doDispatchForkCrossProject($this->request, $user);
                 }
             } catch (MalformedPathException $e) {
                 $this->addError($this->getText('fork_malformed_path'));
             }
             $this->addAction('getProjectRepositoryList', array($this->groupId));
             $this->addView('forkRepositories');
             break;
         case "view_last_git_pushes":
             $vGroupId = new Valid_GroupId();
             $vGroupId->required();
             if ($this->request->valid($vGroupId)) {
                 $groupId = $this->request->get('group_id');
             }
             $vWeeksNumber = new Valid_UInt('weeks_number');
             if ($this->request->valid($vWeeksNumber)) {
                 $weeksNumber = $this->request->get('weeks_number');
             }
             if (empty($weeksNumber) || $weeksNumber > Git_LastPushesGraph::MAX_WEEKSNUMBER) {
                 $weeksNumber = 12;
             }
             $imageRenderer = new Git_LastPushesGraph($groupId, $weeksNumber);
             $imageRenderer->display();
             break;
         case 'migrate_to_gerrit':
             if (ForgeConfig::get('sys_auth_type') !== ForgeConfig::AUTH_TYPE_LDAP) {
                 $this->redirect('/plugins/git/?group_id=' . $this->groupId);
                 break;
             }
             $repo = $this->factory->getRepositoryById($repoId);
             $remote_server_id = $this->request->getValidated('remote_server_id', 'uint');
             $gerrit_template_id = $this->getValidatedGerritTemplateId($repo);
             if (empty($repo) || empty($remote_server_id) || empty($gerrit_template_id)) {
                 $this->addError($this->getText('actions_params_error'));
                 $this->redirect('/plugins/git/?group_id=' . $this->groupId);
             } else {
                 try {
                     $project_exists = $this->gerritProjectAlreadyExists($remote_server_id, $repo);
                     if ($project_exists) {
                         $this->addError($this->getText('gerrit_project_exists'));
                     } else {
                         $this->addAction('migrateToGerrit', array($repo, $remote_server_id, $gerrit_template_id));
                     }
                 } catch (Git_Driver_Gerrit_Exception $e) {
                     $this->addError($this->getText('gerrit_server_down'));
                 }
                 $this->addAction('redirectToRepoManagementWithMigrationAccessRightInformation', array($this->groupId, $repoId, $pane));
             }
             break;
         case 'disconnect_gerrit':
             $repo = $this->factory->getRepositoryById($repoId);
             if (empty($repo)) {
                 $this->addError($this->getText('actions_params_error'));
                 $this->redirect('/plugins/git/?group_id=' . $this->groupId);
             } else {
                 $this->addAction('disconnectFromGerrit', array($repo));
                 $this->addAction('redirectToRepoManagement', array($this->groupId, $repoId, $pane));
             }
             break;
         case 'delete_gerrit_project':
             $repo = $this->factory->getRepositoryById($repoId);
             $server = $this->gerrit_server_factory->getServerById($repo->getRemoteServerId());
             $project_gerrit_name = $this->driver_factory->getDriver($server)->getGerritProjectName($repo);
             try {
                 $this->driver_factory->getDriver($server)->deleteProject($server, $project_gerrit_name);
             } catch (ProjectDeletionException $exception) {
                 $this->addError($this->getText('project_deletion_not_possible', array($project_gerrit_name, $exception->getMessage())));
             } catch (Git_Driver_Gerrit_Exception $e) {
                 $this->addError($this->getText('gerrit_server_down'));
             }
             $migrate_access_right = $this->request->existAndNonEmpty('migrate_access_right');
             $this->addAction('redirectToRepoManagementWithMigrationAccessRightInformation', array($this->groupId, $repoId, $pane));
             break;
         case 'update_mirroring':
             $repository = $this->factory->getRepositoryById($repoId);
             if (!$repository) {
                 $this->addError($this->getText('actions_repo_not_found'));
             }
             $selected_mirror_ids = $this->request->get('selected_mirror_ids');
             if (is_array($selected_mirror_ids)) {
                 $this->addAction('updateMirroring', array($this->request->getProject(), array($repository), $selected_mirror_ids));
             } else {
                 $this->addError($this->getText('actions_mirror_ids_not_valid'));
             }
             $this->addAction('redirectToRepoManagement', array($this->groupId, $repository->getId(), $pane));
             break;
         case 'update_default_mirroring':
             $project = $this->request->getProject();
             $selected_mirror_ids = $this->request->get('selected_mirror_ids');
             if (is_array($selected_mirror_ids)) {
                 $this->addAction('updateDefaultMirroring', array($project, $selected_mirror_ids));
             } else {
                 $this->addError($this->getText('actions_mirror_ids_not_valid'));
             }
             $this->addView('adminDefaultSettings', array($this->areMirrorsEnabledForProject()));
             break;
         case 'restore':
             $this->addAction('restoreRepository', array($repoId, $this->groupId));
             break;
             #LIST
         #LIST
         default:
             $user_id = null;
             $valid = new Valid_UInt('user');
             $valid->required();
             if ($this->request->valid($valid)) {
                 $user_id = $this->request->get('user');
                 $this->addData(array('user' => $user_id));
             }
             $this->addAction('getProjectRepositoryList', array($this->groupId, $user_id));
             $this->addView('index');
             break;
     }
 }
示例#8
0
 public function _dispatchActionAndView($action, $repoId, $repositoryName, $user)
 {
     switch ($action) {
         #CREATE REF
         case 'create':
             $this->addView('create');
             break;
             #admin
         #admin
         case 'view':
             $this->addAction('getRepositoryDetails', array($this->groupId, $repoId));
             $this->addView('view');
             break;
             #ADD REF
         #ADD REF
         case 'add':
             $this->addAction('createReference', array($this->groupId, $repositoryName));
             $this->addView('index');
             break;
             #DELETE a repository
         #DELETE a repository
         case 'del':
             $this->addAction('deleteRepository', array($this->groupId, $repoId));
             $this->addView('index');
             break;
             #EDIT
         #EDIT
         case 'edit':
             if ($this->isAPermittedAction('clone') && $this->request->get('clone')) {
                 $valid = new Valid_UInt('parent_id');
                 $valid->required();
                 if ($this->request->valid($valid)) {
                     $parentId = (int) $this->request->get('parent_id');
                 }
                 $this->addAction('cloneRepository', array($this->groupId, $repositoryName, $parentId));
                 $this->addAction('getRepositoryDetails', array($this->groupId, $parentId));
                 $this->addView('view');
             } else {
                 if ($this->isAPermittedAction('confirm_deletion') && $this->request->get('confirm_deletion')) {
                     $this->addAction('confirmDeletion', array($this->groupId, $repoId));
                     $this->addView('confirm_deletion', array(0 => array('repo_id' => $repoId)));
                 } else {
                     if ($this->isAPermittedAction('save') && $this->request->get('save')) {
                         $valid = new Valid_Text('repo_desc');
                         $valid->required();
                         if ($this->request->valid($valid)) {
                             $repoDesc = $this->request->get('repo_desc');
                         }
                         $valid = new Valid_String('repo_access');
                         $valid->required();
                         if ($this->request->valid($valid) || is_array($this->request->get('repo_access'))) {
                             $repoAccess = $this->request->get('repo_access');
                         }
                         $this->addAction('save', array($this->groupId, $repoId, $repoAccess, $repoDesc));
                         $this->addView('view');
                     } else {
                         $this->addError($this->getText('controller_access_denied'));
                         $this->redirect('/plugins/git/?group_id=' . $this->groupId);
                     }
                 }
             }
             break;
             #repo_management
         #repo_management
         case 'repo_management':
             $this->addAction('repoManagement', array($this->groupId, $repoId));
             $this->addView('repoManagement');
             break;
             #mail prefix
         #mail prefix
         case 'mail_prefix':
             $valid = new Valid_String('mail_prefix');
             $valid->required();
             if ($this->request->valid($valid)) {
                 $mailPrefix = $this->request->get('mail_prefix');
             } else {
                 $mailPrefix = '';
             }
             $this->addAction('notificationUpdatePrefix', array($this->groupId, $repoId, $mailPrefix));
             $this->addView('repoManagement');
             break;
             #add mail
         #add mail
         case 'add_mail':
             $validMails = array();
             $mails = array_map('trim', preg_split('/[,;]/', $this->request->get('add_mail')));
             $rule = new Rule_Email();
             $um = UserManager::instance();
             foreach ($mails as $mail) {
                 if ($rule->isValid($mail)) {
                     $validMails[] = $mail;
                 } else {
                     $user = $um->findUser($mail);
                     if ($user) {
                         $mail = $user->getEmail();
                         if ($mail) {
                             $validMails[] = $mail;
                         } else {
                             $this->addError($this->getText('no_user_mail', array($mail)));
                         }
                     } else {
                         $this->addError($this->getText('no_user', array($mail)));
                     }
                 }
             }
             $this->addAction('notificationAddMail', array($this->groupId, $repoId, $validMails));
             $this->addView('repoManagement');
             break;
             #remove mail
         #remove mail
         case 'remove_mail':
             $mails = array();
             $valid = new Valid_Email('mail');
             $valid->required();
             if ($this->request->validArray($valid)) {
                 $mails = $this->request->get('mail');
             }
             if (count($mails) > 0) {
                 $this->addAction('notificationRemoveMail', array($this->groupId, $repoId, $mails));
                 $this->addView('repoManagement');
             } else {
                 $this->addAction('repoManagement', array($this->groupId, $repoId));
                 $this->addView('repoManagement');
             }
             break;
             #fork
         #fork
         case 'fork':
             $this->addAction('repoManagement', array($this->groupId, $repoId));
             $this->addView('forkRepositories');
             break;
             #confirm_private
         #confirm_private
         case 'confirm_private':
             if ($this->isAPermittedAction('confirm_deletion') && $this->request->get('confirm_deletion')) {
                 $this->addAction('confirmDeletion', array($this->groupId, $repoId));
                 $this->addView('confirm_deletion', array(0 => array('repo_id' => $repoId)));
             } else {
                 if ($this->isAPermittedAction('save') && $this->request->get('save')) {
                     $valid = new Valid_Text('repo_desc');
                     $valid->required();
                     if ($this->request->valid($valid)) {
                         $repoDesc = $this->request->get('repo_desc');
                     }
                     $valid = new Valid_String('repo_access');
                     $valid->required();
                     if ($this->request->valid($valid)) {
                         $repoAccess = $this->request->get('repo_access');
                     }
                     $this->addAction('confirmPrivate', array($this->groupId, $repoId, $repoAccess, $repoDesc));
                     $this->addView('confirmPrivate');
                 }
             }
             break;
             #SET TO PRIVATE
         #SET TO PRIVATE
         case 'set_private':
             $this->addAction('setPrivate', array($this->groupId, $repoId));
             $this->addView('view');
             break;
         case 'fork_repositories':
             $this->addAction('getProjectRepositoryList', array($this->groupId));
             $this->addView('forkRepositories');
             break;
         case 'do_fork_repositories':
             try {
                 if ($this->request->get('choose_destination') == 'personal') {
                     $this->_doDispatchForkRepositories($this->request, $user);
                 } else {
                     $this->_doDispatchForkCrossProject($this->request, $user);
                 }
             } catch (MalformedPathException $e) {
                 $this->addError($this->getText('fork_malformed_path'));
             }
             $this->addAction('getProjectRepositoryList', array($this->groupId));
             $this->addView('forkRepositories');
             break;
         case "view_last_git_pushes":
             $vGroupId = new Valid_GroupId();
             $vGroupId->required();
             if ($this->request->valid($vGroupId)) {
                 $groupId = $this->request->get('group_id');
             }
             $vWeeksNumber = new Valid_UInt('weeks_number');
             if ($this->request->valid($vWeeksNumber)) {
                 $weeksNumber = $this->request->get('weeks_number');
             }
             if (empty($weeksNumber) || $weeksNumber > Git_LastPushesGraph::MAX_WEEKSNUMBER) {
                 $weeksNumber = 12;
             }
             $imageRenderer = new Git_LastPushesGraph($groupId, $weeksNumber);
             $imageRenderer->display();
             break;
             #LIST
         #LIST
         default:
             $user_id = null;
             $valid = new Valid_UInt('user');
             $valid->required();
             if ($this->request->valid($valid)) {
                 $user_id = $this->request->get('user');
                 $this->addData(array('user' => $user_id));
             }
             $this->addAction('getProjectRepositoryList', array($this->groupId, $user_id));
             $this->addView('index');
             break;
     }
 }
示例#9
0
 function validate($value)
 {
     $this->addRule(new Rule_NoCr());
     return parent::validate($value);
 }
示例#10
0
文件: forum.php 项目: nterray/tuleap
     if ($request->valid($vMonitor) && $request->valid($vThreadId)) {
         if (user_isloggedin()) {
             if (!user_monitor_forum($forum_id, user_getid())) {
                 if (!forum_thread_add_monitor($forum_id, $request->get('thread_id'), user_getid())) {
                     $feedback .= $Language->getText('forum_forum_utils', 'insert_err');
                 }
             }
         }
     }
     // Note: there is a 'msg_id' send but not used here.
     $vFollowUp = new Valid_UInt('is_followup_to');
     $vFollowUp->required();
     $vSubject = new Valid_String('subject');
     $vSubject->required();
     $vSubject->setErrorMessage($GLOBALS['Language']->getText('forum_forum_utils', 'include_body_and_subject'));
     $vBody = new Valid_Text('body');
     $vBody->required();
     $vBody->setErrorMessage($GLOBALS['Language']->getText('forum_forum_utils', 'include_body_and_subject'));
     if ($request->valid($vThreadId) && $request->valid($vFollowUp) && $request->valid($vSubject) && $request->valid($vBody)) {
         post_message($request->get('thread_id'), $request->get('is_followup_to'), $request->get('subject'), $request->get('body'), $forum_id);
     }
 }
 /*
 	set up some defaults if they aren't provided
 */
 // Offset
 if ($request->valid(new Valid_UInt('offset'))) {
     $offset = $request->get('offset');
 } else {
     $offset = 0;
 }
示例#11
0
 /**
  * Handle the HTTP request
  *
  * @param HTTPRequest $request HTTP request
  *
  * @return Void
  */
 public function handleRequest(HTTPRequest $request)
 {
     $validAction = new Valid_WhiteList('action', array('add', 'delete'));
     if ($request->valid($validAction)) {
         $action = $request->get('action');
         switch ($action) {
             case 'add':
                 $this->csrf->check();
                 $validProject = new Valid_String('project');
                 $validProject->required();
                 $project = null;
                 if ($request->valid($validProject)) {
                     $project = $request->get('project');
                 }
                 $validRequester = new Valid_String('requester');
                 $validRequester->required();
                 $requester = null;
                 if ($request->valid($validRequester)) {
                     $requester = $request->get('requester');
                 }
                 $validQuota = new Valid_UInt('quota');
                 $validQuota->required();
                 $quota = null;
                 if ($request->valid($validQuota)) {
                     $quota = $request->get('quota');
                 }
                 $validMotivation = new Valid_Text('motivation');
                 $validMotivation->required();
                 $motivation = null;
                 if ($request->valid($validMotivation)) {
                     $motivation = $request->get('motivation');
                 }
                 $this->projectQuotaManager->addQuota($project, $requester, $quota, $motivation);
                 break;
             case 'delete':
                 $this->csrf->check();
                 $list = $request->get('delete_quota');
                 $projects = array();
                 $validProjectId = new Valid_UInt();
                 foreach ($list as $projectId) {
                     if ($validProjectId->validate($projectId)) {
                         $project = $this->projectManager->getProject($projectId);
                         if ($project) {
                             $projects[$project->getId()] = $project->getPublicName();
                         }
                     }
                 }
                 $this->projectQuotaManager->deleteCustomQuota($projects);
                 break;
             default:
                 break;
         }
     } else {
         $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('plugin_statistics', 'invalid_action'));
     }
 }
示例#12
0
 *
 * You should have received a copy of the GNU General Public License
 * along with Codendi. If not, see <http://www.gnu.org/licenses/>.
 */
require_once 'pre.php';
require_once 'common/include/HTTPRequest.class.php';
require_once dirname(__FILE__) . '/../include/Docman_Error_PermissionDenied.class.php';
$request = HTTPRequest::instance();
$func = $request->getValidated('func', new Valid_WhiteList('func', array('docman_access_request')));
if ($request->isPost() && $request->exist('Submit') && $request->existAndNonEmpty('func') && $func == 'docman_access_request') {
    $defaultMsg = $GLOBALS['Language']->getText('project_admin_index', 'member_request_delegation_msg_to_requester');
    $pm = ProjectManager::instance();
    $dar = $pm->getMessageToRequesterForAccessProject($request->get('groupId'));
    if ($dar && !$dar->isError() && $dar->rowCount() == 1) {
        $row = $dar->current();
        if ($row['msg_to_requester'] != "member_request_delegation_msg_to_requester") {
            $defaultMsg = $row['msg_to_requester'];
        }
    }
    $sendMail = new Docman_Error_PermissionDenied();
    $vMessage = new Valid_Text('msg_docman_access');
    $vMessage->required();
    if ($request->valid($vMessage) && trim($request->get('msg_docman_access')) != $defaultMsg) {
        $messageToAdmin = $request->get('msg_docman_access');
    } else {
        exit_error($Language->getText('plugin_docman', 'error'), $Language->getText('plugin_docman', 'invalid_msg'));
    }
    $sendMail->processMail($messageToAdmin);
    exit;
}
$HTML->header(array('title' => $Language->getText('sendmessage', 'title', array($to_msg))));