예제 #1
0
 function validate($value)
 {
     $this->addRule(new Rule_Widget_Owner());
     return parent::validate($value);
 }
예제 #2
0
 /**
  * Checks whether name is present in the parameters.
  * 
  * @param PlanningParameters $planning_parameters The validated parameters.
  * 
  * @return bool
  */
 private function nameIsPresent(PlanningParameters $planning_parameters)
 {
     $name = new Valid_String();
     $name->required();
     return $name->validate($planning_parameters->name);
 }
예제 #3
0
function register_valid($confirm_hash)
{
    global $Language;
    $request =& HTTPRequest::instance();
    $vLoginName = new Valid_UserNameFormat('form_loginname');
    $vLoginName->required();
    if (!$request->valid($vLoginName)) {
        return 0;
    }
    $vRealName = new Valid_RealNameFormat('form_realname');
    $vRealName->required();
    if (!$request->valid($vRealName)) {
        $GLOBALS['Response']->addFeedback('error', $Language->getText('account_register', 'err_realname'));
        return 0;
    }
    if (!$request->existAndNonEmpty('form_pw')) {
        $GLOBALS['Response']->addFeedback('error', $Language->getText('account_register', 'err_nopasswd'));
        return 0;
    }
    $tz = $request->get('timezone');
    if (!is_valid_timezone($tz)) {
        $GLOBALS['Response']->addFeedback('error', $Language->getText('account_register', 'err_notz'));
        return 0;
    }
    if (!$request->existAndNonEmpty('form_register_purpose') && ($GLOBALS['sys_user_approval'] && $request->get('page') != "admin_creation")) {
        $GLOBALS['Response']->addFeedback('error', $Language->getText('account_register', 'err_nopurpose'));
        return 0;
    }
    if (!validate_email($request->get('form_email'))) {
        $GLOBALS['Response']->addFeedback('error', $Language->getText('account_register', 'err_email'));
        return 0;
    }
    if ($request->get('page') != "admin_creation" && $request->get('form_pw') != $request->get('form_pw2')) {
        $GLOBALS['Response']->addFeedback('error', $Language->getText('account_register', 'err_passwd'));
        return 0;
    }
    if (!account_pwvalid($request->get('form_pw'), $errors)) {
        foreach ($errors as $e) {
            $GLOBALS['Response']->addFeedback('error', $e);
        }
        return 0;
    }
    $expiry_date = 0;
    if ($request->exist('form_expiry') && $request->get('form_expiry') != '' && !ereg("[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}", $request->get('form_expiry'))) {
        $GLOBALS['Response']->addFeedback('error', $GLOBALS['Language']->getText('account_register', 'data_not_parsed'));
        return 0;
    }
    $vDate = new Valid_String();
    $vDate->required();
    if ($request->exist('form_expiry') && $vDate->validate($request->get('form_expiry'))) {
        $date_list = split("-", $request->get('form_expiry'), 3);
        $unix_expiry_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]);
        $expiry_date = $unix_expiry_time;
    }
    $status = 'P';
    if ($request->get('page') == "admin_creation") {
        if ($request->get('form_restricted')) {
            $status = 'R';
        } else {
            $status = 'A';
        }
    }
    //use sys_lang as default language for each user at register
    $res = account_create($request->get('form_loginname'), $request->get('form_pw'), '', $request->get('form_realname'), $request->get('form_register_purpose'), $request->get('form_email'), $status, $confirm_hash, $request->get('form_mail_site'), $request->get('form_mail_va'), $tz, UserManager::instance()->getCurrentUser()->getLocale(), 'A', $expiry_date);
    return $res;
}
예제 #4
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);
}
예제 #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
$hp = Codendi_HTMLPurifier::instance();
$request =& HTTPRequest::instance();
$action_select = '';
$status = '';
if ($request->exist('action_select')) {
    $action_select = $request->get('action_select');
}
if ($request->exist('status')) {
    $status = $request->get('status');
}
$expiry_date = 0;
if ($request->exist('form_expiry') && $request->get('form_expiry') != '' && !ereg("[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}", $request->get('form_expiry'))) {
    $feedback .= ' ' . $Language->getText('admin_approve_pending_users', 'data_not_parsed');
} else {
    $vDate = new Valid_String();
    if ($request->exist('form_expiry') && $request->get('form_expiry') != '' && $vDate->validate($request->get('form_expiry'))) {
        $date_list = split("-", $request->get('form_expiry'), 3);
        $unix_expiry_time = mktime(0, 0, 0, $date_list[1], $date_list[2], $date_list[0]);
        $expiry_date = $unix_expiry_time;
    }
    $page = '';
    if ($request->exist('page')) {
        $page = $request->get('page');
    }
    if ($action_select == 'activate') {
        $shell = "";
        if ($status == 'restricted') {
            $newstatus = 'R';
            $shell = ",shell='" . $GLOBALS['codendi_bin_prefix'] . "/cvssh-restricted'";
        } else {
            $newstatus = 'A';
 function _dispatch($view, $item, $root, $get_show_view)
 {
     $item_factory =& $this->_getItemFactory();
     $user =& $this->getUser();
     $dpm = $this->_getPermissionsManager();
     switch ($view) {
         case 'show':
             if ($item->isObsolete()) {
                 if (!$this->userCanAdmin($item->getId())) {
                     // redirect to details view
                     $this->view = 'Details';
                     break;
                 }
             }
             $this->view = $item->accept($get_show_view, $this->request->get('report'));
             break;
         case 'expandFolder':
             $this->action = 'expandFolder';
             if ($this->request->get('view') == 'ulsubfolder') {
                 $this->view = 'RawTree';
             } else {
                 $this->_viewParams['item'] =& $root;
                 $this->view = 'Tree';
             }
             break;
         case 'getRootFolder':
             $this->_viewParams['action_result'] = $root->getId();
             $this->_setView('getRootFolder');
             break;
         case 'collapseFolder':
             $this->action = 'collapseFolder';
             $this->_viewParams['item'] =& $root;
             $this->view = 'Tree';
             break;
         case 'admin_set_permissions':
             $this->action = $view;
             $this->view = 'Admin_Permissions';
             break;
         case 'admin_change_view':
             $this->action = $view;
             $this->_viewParams['default_url_params'] = array('action' => 'admin_view', 'id' => $item->getParentId());
             $this->view = 'RedirectAfterCrud';
             break;
         case 'admin':
         case 'details':
             $this->view = ucfirst($view);
             break;
         case 'admin_view':
             $this->view = 'Admin_View';
             break;
         case 'admin_permissions':
             $this->view = 'Admin_Permissions';
             break;
         case 'admin_metadata':
             $this->view = 'Admin_Metadata';
             $mdFactory = new Docman_MetadataFactory($this->_viewParams['group_id']);
             $mdIter =& $mdFactory->getMetadataForGroup();
             $this->_viewParams['mdIter'] =& $mdIter;
             break;
         case 'admin_md_details':
             // Sanitize
             $_mdLabel = $this->request->get('md');
             $md = null;
             $mdFactory = new Docman_MetadataFactory($this->_viewParams['group_id']);
             $valid = $this->validateMetadata($_mdLabel, $md);
             if (!$valid) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_invalid_md'));
                 $this->view = 'RedirectAfterCrud';
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             } else {
                 $this->view = 'Admin_MetadataDetails';
                 $mdFactory->appendMetadataValueList($md, false);
                 $this->_viewParams['md'] =& $md;
             }
             break;
         case 'admin_md_details_update':
             $_name = trim($this->request->get('name'));
             $_label = $this->request->get('label');
             $mdFactory = $this->_getMetadataFactory($this->_viewParams['group_id']);
             if ($mdFactory->isValidLabel($_label)) {
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_md_details', 'md' => $_label);
                 if ($mdFactory->isHardCodedMetadata($_label) || $this->validateUpdateMetadata($_name, $_label)) {
                     $this->action = $view;
                 }
             } else {
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             }
             $this->view = 'RedirectAfterCrud';
             break;
         case 'admin_create_metadata':
             $_name = trim($this->request->get('name'));
             $valid = $this->validateNewMetadata($_name);
             if ($valid) {
                 $this->action = $view;
             }
             $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             $this->view = 'RedirectAfterCrud';
             break;
         case 'admin_delete_metadata':
             $valid = false;
             // md
             // Sanitize
             $_mdLabel = $this->request->get('md');
             // Valid
             $logmsg = '';
             $mdFactory = new Docman_MetadataFactory($this->_viewParams['group_id']);
             $md = null;
             $vld = $this->validateMetadata($_mdLabel, $md);
             if ($vld) {
                 if (!$mdFactory->isHardCodedMetadata($md->getLabel())) {
                     $valid = true;
                 } else {
                     $logmsg = $GLOBALS['Language']->getText('plugin_docman', 'error_cannot_delete_hc_md');
                 }
             } else {
                 $logmsg = $GLOBALS['Language']->getText('plugin_docman', 'error_invalid_md');
             }
             if (!$valid) {
                 if ($logmsg != '') {
                     $this->feedback->log('error', $logmsg);
                 }
                 $this->view = 'RedirectAfterCrud';
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             } else {
                 $this->action = $view;
                 $this->_actionParams['md'] = $md;
             }
             break;
         case 'admin_create_love':
             $mdFactory = $this->_getMetadataFactory($this->_viewParams['group_id']);
             if ($mdFactory->isValidLabel($this->request->get('md'))) {
                 $this->action = $view;
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_md_details', 'md' => $this->request->get('md'));
             } else {
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             }
             $this->view = 'RedirectAfterCrud';
             break;
         case 'admin_delete_love':
             $mdFactory = $this->_getMetadataFactory($this->_viewParams['group_id']);
             if ($mdFactory->isValidLabel($this->request->get('md'))) {
                 $this->action = $view;
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_md_details', 'md' => $this->request->get('md'));
             } else {
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             }
             $this->view = 'RedirectAfterCrud';
             break;
         case 'admin_display_love':
             $valid = false;
             // Required params:
             // md (string [a-z_]+)
             // loveid (int)
             // Sanitize
             $_mdLabel = $this->request->get('md');
             $_loveId = (int) $this->request->get('loveid');
             // Valid
             $md = null;
             $love = null;
             $this->validateMetadata($_mdLabel, $md);
             if ($md !== null && $md->getLabel() !== 'status') {
                 $valid = $this->validateLove($_loveId, $md, $love);
             }
             if (!$valid) {
                 $this->view = 'RedirectAfterCrud';
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             } else {
                 $mdFactory = new Docman_MetadataFactory($this->groupId);
                 $mdFactory->appendMetadataValueList($md, false);
                 $this->view = 'Admin_MetadataDetailsUpdateLove';
                 $this->_viewParams['md'] = $md;
                 $this->_viewParams['love'] = $love;
             }
             break;
         case 'admin_update_love':
             $valid = false;
             // Required params:
             // md (string [a-z_]+)
             // loveid (int)
             //
             // rank (beg, end, [0-9]+)
             // name
             // descr
             // Sanitize
             /// @todo sanitize md, rank, name, descr
             $_mdLabel = $this->request->get('md');
             $_loveId = (int) $this->request->get('loveid');
             $_rank = $this->request->get('rank');
             $_name = $this->request->get('name');
             $_descr = $this->request->get('descr');
             // Valid
             $md = null;
             $love = null;
             $this->validateMetadata($_mdLabel, $md);
             if ($md !== null && $md->getLabel() !== 'status') {
                 $valid = $this->validateLove($_loveId, $md, $love);
             }
             if (!$valid) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_md_or_love'));
                 $this->view = 'RedirectAfterCrud';
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             } else {
                 // Set parameters
                 $love->setRank($_rank);
                 $love->setName($_name);
                 $love->setDescription($_descr);
                 // define action
                 $this->action = $view;
                 $this->_actionParams['md'] = $md;
                 $this->_actionParams['love'] = $love;
             }
             break;
         case 'admin_import_metadata_check':
             $ok = false;
             if ($this->request->existAndNonEmpty('plugin_docman_metadata_import_group')) {
                 $pm = ProjectManager::instance();
                 $srcGroup = $pm->getProjectFromAutocompleter($this->request->get('plugin_docman_metadata_import_group'));
                 if ($srcGroup && !$srcGroup->isError()) {
                     $this->_viewParams['sSrcGroupId'] = $srcGroup->getGroupId();
                     $this->view = 'Admin_MetadataImport';
                     $ok = true;
                 }
             }
             if (!$ok) {
                 $this->view = 'RedirectAfterCrud';
                 $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             }
             break;
         case 'admin_import_metadata':
             if ($this->request->existAndNonEmpty('confirm')) {
                 if ($this->request->existAndNonEmpty('plugin_docman_metadata_import_group')) {
                     $pm = ProjectManager::instance();
                     $srcGroup = $pm->getProjectFromAutocompleter($this->request->get('plugin_docman_metadata_import_group'));
                     $srcGroupId = $srcGroup->getGroupId();
                     $this->_actionParams['sSrcGroupId'] = $srcGroupId;
                     $this->_actionParams['sGroupId'] = $this->_viewParams['group_id'];
                     $this->action = $view;
                 } else {
                     $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'missing_param'));
                     $this->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'operation_canceled'));
                 }
             } else {
                 $this->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'operation_canceled'));
             }
             $this->view = 'RedirectAfterCrud';
             $this->_viewParams['default_url_params'] = array('action' => 'admin_metadata');
             break;
         case 'admin_obsolete':
             $this->view = 'Admin_Obsolete';
             break;
         case 'admin_lock_infos':
             $this->view = 'Admin_LockInfos';
             break;
         case 'move':
             if (!$this->userCanWrite($item->getId()) || !$this->userCanWrite($item->getParentId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_move'));
                 $this->view = 'Details';
             } else {
                 if ($this->request->exist('quick_move')) {
                     $this->action = 'move';
                     $this->view = null;
                 } else {
                     $this->_viewParams['hierarchy'] =& $this->getItemHierarchy($root);
                     $this->view = ucfirst($view);
                 }
             }
             break;
         case 'newGlobalDocument':
             if ($dpm->oneFolderIsWritable($user)) {
                 $this->_viewParams['hierarchy'] =& $this->getItemHierarchy($root);
                 $this->view = 'New_FolderSelection';
             } else {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_create'));
                 $this->view = $item->accept($get_show_view, $this->request->get('report'));
             }
             break;
         case 'newDocument':
         case 'newFolder':
             if ($this->request->exist('cancel')) {
                 $this->_set_redirectView();
             } else {
                 if (!$this->userCanWrite($item->getId())) {
                     $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_create'));
                     $this->view = 'Details';
                 } else {
                     //$this->_viewParams['hierarchy'] =& $this->getItemHierarchy($root);
                     $this->_viewParams['ordering'] = $this->request->get('ordering');
                     if ($this->request->get('item_type') == PLUGIN_DOCMAN_ITEM_TYPE_FOLDER) {
                         $view = 'newFolder';
                     }
                     $this->view = ucfirst($view);
                 }
             }
             break;
         case 'monitor':
             if ($this->request->exist('monitor')) {
                 $this->_actionParams['monitor'] = $this->request->get('monitor');
                 if ($this->request->exist('cascade')) {
                     $this->_actionParams['cascade'] = $this->request->get('cascade');
                 }
                 $this->_actionParams['item'] =& $item;
                 $this->action = 'monitor';
             }
             $this->_setView('Details');
             break;
         case 'remove_monitoring':
             $this->_actionParams['listeners_to_delete'] = array();
             if ($this->userCanManage($item->getId())) {
                 if ($this->request->exist('listeners_to_delete')) {
                     $um = UserManager::instance();
                     $vUserId = new Valid_UInt('listeners_to_delete');
                     if ($this->request->validArray($vUserId)) {
                         $userIds = $this->request->get('listeners_to_delete');
                         $users = array();
                         foreach ($userIds as $userId) {
                             $users[] = $um->getUserById($userId);
                         }
                         $this->_actionParams['listeners_to_delete'] = $users;
                         $this->_actionParams['item'] = $item;
                     }
                 }
                 $this->action = 'remove_monitoring';
                 $this->_setView('Details');
             } else {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'notifications_permission_denied'));
                 $this->_setView('Details');
             }
             break;
         case 'add_monitoring':
             $this->_actionParams['listeners_to_add'] = array();
             $this->_actionParams['invalid_users'] = false;
             if ($this->userCanManage($item->getId())) {
                 if ($this->request->exist('listeners_to_add')) {
                     $um = UserManager::instance();
                     $vUser = new Valid_Text('listeners_to_add');
                     if ($this->request->valid($vUser)) {
                         $usernames = array_map('trim', preg_split('/[,;]/', $this->request->get('listeners_to_add')));
                         $users = array();
                         $vUserName = new Valid_String();
                         $vUserName->required();
                         foreach ($usernames as $username) {
                             if ($vUserName->validate($username) && ($user = $um->findUser($username))) {
                                 $users[] = $user;
                             } else {
                                 $this->_actionParams['invalid_users'] = true;
                             }
                         }
                         if ($this->request->exist('monitor_cascade')) {
                             $this->_actionParams['monitor_cascade'] = $this->request->get('monitor_cascade');
                         }
                         $this->_actionParams['listeners_to_add'] = $users;
                         $this->_actionParams['item'] = $item;
                     }
                 }
                 $this->action = 'add_monitoring';
                 $this->_setView('Details');
             } else {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'notifications_permission_denied'));
                 $this->_setView('Details');
             }
             break;
         case 'move_here':
             if (!$this->request->exist('item_to_move')) {
                 $this->feedback->log('error', 'Missing parameter.');
                 $this->view = 'DocmanError';
             } else {
                 $item_to_move =& $item_factory->getItemFromDb($this->request->get('item_to_move'));
                 $this->view = null;
                 if ($this->request->exist('confirm')) {
                     if (!$item_to_move || !($this->userCanWrite($item->getId()) && $this->userCanWrite($item_to_move->getId()) && $this->userCanWrite($item_to_move->getParentId()))) {
                         $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_move'));
                         $this->_set_moveView_errorPerms();
                     } else {
                         $this->action = 'move';
                     }
                 }
                 if (!$this->view) {
                     $this->_set_redirectView();
                 }
             }
             break;
         case 'permissions':
             if (!$this->userCanManage($item->getId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_perms'));
                 $this->view = 'Details';
             } else {
                 $this->action = 'permissions';
                 $this->view = 'Details';
             }
             break;
         case 'confirmDelete':
             if (!$this->userCanWrite($item->getId()) || !$this->userCanWrite($item->getParentId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_delete'));
                 $this->view = 'Details';
             } else {
                 $this->view = 'Delete';
             }
             break;
         case 'action_new_version':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $dPm = $this->_getPermissionsManager();
                 if ($dPm->getLockFactory()->itemIsLocked($item)) {
                     $this->feedback->log('warning', $GLOBALS['Language']->getText('plugin_docman', 'event_lock_add'));
                 }
                 $this->view = 'NewVersion';
             }
             break;
         case 'action_update':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->view = 'Update';
             }
             break;
         case 'action_copy':
             //@XSS: validate action against a regexp.
             $_action = $this->request->get('orig_action');
             $_id = (int) $this->request->get('orig_id');
             $this->_actionParams['item'] = $item;
             $this->action = $view;
             if (!$this->request->exist('ajax_copy')) {
                 $this->_viewParams['default_url_params'] = array('action' => $_action, 'id' => $_id);
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'action_cut':
             $_action = $this->request->get('orig_action');
             $_id = (int) $this->request->get('orig_id');
             $this->_actionParams['item'] = $item;
             $this->action = $view;
             if (!$this->request->exist('ajax_cut')) {
                 $this->_viewParams['default_url_params'] = array('action' => $_action, 'id' => $_id);
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'action_paste':
             $itemToPaste = null;
             $mode = null;
             $allowed = $this->checkPasteIsAllowed($item, $itemToPaste, $mode);
             if (!$allowed) {
                 $this->view = 'Details';
             } else {
                 $this->_viewParams['itemToPaste'] = $itemToPaste;
                 $this->_viewParams['srcMode'] = $mode;
                 $this->view = 'Paste';
             }
             break;
         case 'paste_cancel':
             // intend to be only called through ajax call
             $item_factory->delCopyPreference();
             $item_factory->delCutPreference();
             break;
         case 'paste':
             if ($this->request->exist('cancel')) {
                 $this->_viewParams['default_url_params'] = array('action' => 'show');
                 $this->view = 'RedirectAfterCrud';
             } else {
                 $itemToPaste = null;
                 $mode = null;
                 $allowed = $this->checkPasteIsAllowed($item, $itemToPaste, $mode);
                 if (!$allowed) {
                     $this->view = 'Details';
                 } else {
                     $this->_viewParams['importMd'] = false;
                     if ($this->userCanAdmin()) {
                         if ($this->request->exist('import_md') && $this->request->get('import_md') == '1') {
                             $this->_viewParams['importMd'] = true;
                         }
                     }
                     $this->_viewParams['item'] = $item;
                     $this->_viewParams['rank'] = $this->request->get('rank');
                     $this->_viewParams['itemToPaste'] = $itemToPaste;
                     $this->_viewParams['srcMode'] = $mode;
                     /*$this->action = $view;
                                                   
                       $this->_viewParams['default_url_params'] = array('action'  => 'show',
                                                                        'id'      => $item->getId());
                       $this->view = 'RedirectAfterCrud';*/
                     $this->_viewParams['item'] = $item;
                     $this->_viewParams['rank'] = $this->request->get('rank');
                     $this->_viewParams['itemToPaste'] = $itemToPaste;
                     $this->_viewParams['srcMode'] = $mode;
                     $this->view = 'PasteInProgress';
                 }
             }
             break;
         case 'approval_create':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->view = 'ApprovalCreate';
             }
             break;
         case 'approval_delete':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 if ($this->request->exist('confirm')) {
                     $this->action = $view;
                     $this->_actionParams['item'] = $item;
                     // Version
                     $vVersion = new Valid_UInt('version');
                     $vVersion->required();
                     if ($this->request->valid($vVersion)) {
                         $this->_actionParams['version'] = $this->request->get('version');
                     } else {
                         $this->_actionParams['version'] = null;
                     }
                 }
                 $this->_viewParams['default_url_params'] = array('action' => 'details', 'section' => 'approval', 'id' => $item->getId());
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'approval_update':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->_actionParams['item'] = $item;
                 // Settings
                 $this->_actionParams['status'] = (int) $this->request->get('status');
                 $this->_actionParams['description'] = $this->request->get('description');
                 $this->_actionParams['notification'] = (int) $this->request->get('notification');
                 $this->_actionParams['reminder'] = $this->request->get('reminder');
                 $this->_actionParams['occurence'] = (int) $this->request->get('occurence');
                 $this->_actionParams['period'] = (int) $this->request->get('period');
                 // Users
                 $this->_actionParams['user_list'] = $this->request->get('user_list');
                 $this->_actionParams['ugroup_list'] = null;
                 if (is_array($this->request->get('ugroup_list'))) {
                     $this->_actionParams['ugroup_list'] = array_map('intval', $this->request->get('ugroup_list'));
                 }
                 // Selected users
                 $this->_actionParams['sel_user'] = null;
                 if (is_array($this->request->get('sel_user'))) {
                     $this->_actionParams['sel_user'] = array_map('intval', $this->request->get('sel_user'));
                 }
                 $allowedAct = array('100', 'mail', 'del');
                 $this->_actionParams['sel_user_act'] = null;
                 if (in_array($this->request->get('sel_user_act'), $allowedAct)) {
                     $this->_actionParams['sel_user_act'] = $this->request->get('sel_user_act');
                 }
                 // Resend
                 $this->_actionParams['resend_notif'] = false;
                 if ($this->request->get('resend_notif') == 'yes') {
                     $this->_actionParams['resend_notif'] = true;
                 }
                 // Version
                 $vVersion = new Valid_UInt('version');
                 $vVersion->required();
                 if ($this->request->valid($vVersion)) {
                     $this->_actionParams['version'] = $this->request->get('version');
                 } else {
                     $this->_actionParams['version'] = null;
                 }
                 // Import
                 $vImport = new Valid_WhiteList('app_table_import', array('copy', 'reset', 'empty'));
                 $vImport->required();
                 $this->_actionParams['import'] = $this->request->getValidated('app_table_import', $vImport, false);
                 // Owner
                 $vOwner = new Valid_String('table_owner');
                 $vOwner->required();
                 $this->_actionParams['table_owner'] = $this->request->getValidated('table_owner', $vOwner, false);
                 //
                 // Special handeling of table deletion
                 if ($this->_actionParams['status'] == PLUGIN_DOCMAN_APPROVAL_TABLE_DELETED) {
                     $this->_viewParams['default_url_params'] = array('action' => 'approval_create', 'delete' => 'confirm', 'id' => $item->getId());
                 } else {
                     // Action!
                     $this->action = $view;
                     $this->_viewParams['default_url_params'] = array('action' => 'approval_create', 'id' => $item->getId());
                 }
                 if ($this->_actionParams['version'] !== null) {
                     $this->_viewParams['default_url_params']['version'] = $this->_actionParams['version'];
                 }
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'approval_upd_user':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->_actionParams['item'] = $item;
                 $this->_actionParams['user_id'] = (int) $this->request->get('user_id');
                 $this->_actionParams['rank'] = $this->request->get('rank');
                 $this->action = $view;
                 $this->_viewParams['default_url_params'] = array('action' => 'approval_create', 'id' => $item->getId());
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'approval_del_user':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->_actionParams['item'] = $item;
                 $this->_actionParams['user_id'] = (int) $this->request->get('user_id');
                 $this->action = $view;
                 $this->_viewParams['default_url_params'] = array('action' => 'approval_create', 'id' => $item->getId());
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'approval_user_commit':
             $atf =& Docman_ApprovalTableFactoriesFactory::getFromItem($item);
             $table = $atf->getTable();
             $atrf =& new Docman_ApprovalTableReviewerFactory($table, $item);
             if (!$this->userCanRead($item->getId()) || !$atrf->isReviewer($user->getId()) || !$table->isEnabled()) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->_actionParams['item'] = $item;
                 $svState = 0;
                 $sState = (int) $this->request->get('state');
                 if ($sState >= 0 && $sState < 5) {
                     $svState = $sState;
                 }
                 $this->_actionParams['svState'] = $svState;
                 $this->_actionParams['sVersion'] = null;
                 if ($this->request->exist('version')) {
                     $sVersion = (int) $this->request->get('version');
                     switch ($item_factory->getItemTypeForItem($item)) {
                         case PLUGIN_DOCMAN_ITEM_TYPE_WIKI:
                             if ($sVersion <= 0) {
                                 $sVersion = null;
                             }
                         case PLUGIN_DOCMAN_ITEM_TYPE_FILE:
                         case PLUGIN_DOCMAN_ITEM_TYPE_EMBEDDEDFILE:
                             // assume ok: do nothing.
                             break;
                         default:
                             $sVersion = null;
                     }
                     $this->_actionParams['sVersion'] = $sVersion;
                 }
                 $this->_actionParams['usComment'] = $this->request->get('comment');
                 $this->_actionParams['monitor'] = (int) $this->request->get('monitor');
                 $this->action = $view;
                 $this->_viewParams['default_url_params'] = array('action' => 'details', 'section' => 'approval', 'id' => $item->getId());
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'approval_notif_resend':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $this->txt('error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $this->action = $view;
                 $this->_actionParams['item'] = $item;
                 $this->_viewParams['default_url_params'] = array('action' => 'approval_create', 'id' => $item->getId());
                 $this->view = 'RedirectAfterCrud';
             }
             break;
         case 'edit':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 $mdFactory = new Docman_MetadataFactory($this->_viewParams['group_id']);
                 $mdFactory->appendAllListOfValuesToItem($item);
                 $this->view = 'Edit';
             }
             break;
         case 'delete':
             if (!($this->userCanWrite($item->getId()) && $this->userCanWrite($item->getParentId()))) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_delete'));
                 $this->_set_deleteView_errorPerms();
             } else {
                 if ($this->request->exist('confirm')) {
                     $this->action = $view;
                     $this->_set_redirectView();
                 } else {
                     $this->view = 'Details';
                 }
             }
             break;
         case 'deleteVersion':
             if (!($this->userCanWrite($item->getId()) && $this->userCanWrite($item->getParentId()))) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_delete'));
                 $this->_set_deleteView_errorPerms();
             } else {
                 if ($this->request->exist('confirm')) {
                     $this->action = $view;
                     $this->_set_redirectView();
                 } else {
                     $this->view = 'Details';
                 }
             }
             break;
         case 'createFolder':
         case 'createDocument':
         case 'createItem':
             if ($this->request->exist('cancel')) {
                 $this->_set_redirectView();
             } else {
                 $i = $this->request->get('item');
                 if (!$i || !isset($i['parent_id'])) {
                     $this->feedback->log('error', 'Missing parameter.');
                     $this->view = 'DocmanError';
                 } else {
                     $parent =& $item_factory->getItemFromDb($i['parent_id']);
                     if (!$parent || $parent->getGroupId() != $this->getGroupId() || !$this->userCanWrite($parent->getId())) {
                         $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_create'));
                         $this->_set_createItemView_errorParentDoesNotExist($item, $get_show_view);
                     } else {
                         //Validations
                         $new_item = $this->createItemFromUserInput();
                         $valid = $this->_validateRequest(array_merge($new_item->accept(new Docman_View_GetFieldsVisitor()), $new_item->accept(new Docman_View_GetSpecificFieldsVisitor(), array('request' => &$this->request))));
                         if ($user->isMember($this->getGroupId(), 'A') || $user->isMember($this->getGroupId(), 'N1') || $user->isMember($this->getGroupId(), 'N2')) {
                             $news = $this->request->get('news');
                             if ($news) {
                                 $is_news_details = isset($news['details']) && trim($news['details']);
                                 $is_news_summary = isset($news['summary']) && trim($news['summary']);
                                 if ($is_news_details && !$is_news_summary) {
                                     $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_create_news_summary'));
                                     $valid = false;
                                 }
                                 if (!$is_news_details && $is_news_summary) {
                                     $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_create_news_details'));
                                     $valid = false;
                                 }
                             }
                         }
                         if ($valid) {
                             $this->action = $view;
                             $this->_set_redirectView();
                         } else {
                             // Propagate return page
                             $this->_viewParams['token'] = $this->request->get('token');
                             $this->_viewParams['force_item'] = $new_item;
                             $this->_viewParams['force_news'] = $this->request->get('news');
                             $this->_viewParams['force_permissions'] = $this->request->get('permissions');
                             $this->_viewParams['force_ordering'] = $this->request->get('ordering');
                             $this->_viewParams['display_permissions'] = $this->request->exist('user_has_displayed_permissions');
                             $this->_viewParams['display_news'] = $this->request->exist('user_has_displayed_news');
                             $this->_viewParams['hierarchy'] =& $this->getItemHierarchy($root);
                             $this->_set_createItemView_afterCreate($view);
                         }
                     }
                 }
             }
             break;
         case 'update':
             $this->_viewParams['recurseOnDocs'] = false;
             $this->_actionParams['recurseOnDocs'] = false;
             if ($this->request->get('recurse_on_doc') == 1) {
                 $this->_viewParams['recurseOnDocs'] = true;
                 $this->_actionParams['recurseOnDocs'] = true;
             }
         case 'update_wl':
         case 'new_version':
             if (!$this->userCanWrite($item->getId())) {
                 $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_perms_edit'));
                 $this->view = 'Details';
             } else {
                 // For properties update ('update' action), we need to confirm
                 // the recursive application of metadata update.
                 if ($view == 'update' && $this->request->exist('recurse') && !$this->request->exist('cancel')) {
                     $this->_viewParams['recurse'] = $this->request->get('recurse');
                     if (!$this->request->exist('validate_recurse')) {
                         $updateConfirmed = false;
                     } elseif ($this->request->get('validate_recurse') != 'true') {
                         $updateConfirmed = false;
                     } else {
                         $updateConfirmed = true;
                     }
                 } else {
                     $updateConfirmed = true;
                 }
                 $valid = true;
                 if ($this->request->exist('confirm')) {
                     //Validations
                     if ($view == 'update') {
                         $this->updateMetadataFromUserInput($item);
                         $valid = $this->_validateRequest($item->accept(new Docman_View_GetFieldsVisitor()));
                     } else {
                         $this->updateItemFromUserInput($item);
                         $valid = $this->_validateApprovalTable($this->request, $item) && $this->_validateRequest($item->accept(new Docman_View_GetSpecificFieldsVisitor(), array('request' => &$this->request)));
                     }
                     //Actions
                     if ($valid && $updateConfirmed) {
                         if ($view == 'update_wl') {
                             $this->action = 'update';
                         } else {
                             $this->action = $view;
                         }
                     }
                 }
                 //Views
                 if ($valid && $updateConfirmed) {
                     if ($redirect_to = Docman_Token::retrieveUrl($this->request->get('token'))) {
                         $this->_viewParams['redirect_to'] = $redirect_to;
                     }
                     $this->view = 'RedirectAfterCrud';
                 } else {
                     if ($view == 'update_wl') {
                         $this->view = 'Update';
                     } else {
                         if ($view == 'new_version') {
                             // Keep fields values
                             $v = $this->request->get('version');
                             $this->_viewParams['label'] = $v['label'];
                             $this->_viewParams['changelog'] = $v['changelog'];
                             if ($item instanceof Docman_EmbeddedFile) {
                                 $v = $item->getCurrentVersion();
                                 $v->setContent($this->request->get('content'));
                             }
                             $this->view = 'NewVersion';
                         } else {
                             $mdFactory = new Docman_MetadataFactory($this->_viewParams['group_id']);
                             $mdFactory->appendAllListOfValuesToItem($item);
                             if ($this->request->existAndNonEmpty('token')) {
                                 // propagate the token so the user will be
                                 // redirected to the original page even after
                                 // several properties update errors or
                                 // confirmations.
                                 $this->_viewParams['token'] = $this->request->get('token');
                             }
                             $this->_viewParams['updateConfirmed'] = $updateConfirmed;
                             // The item may have changed (new user input)
                             unset($this->_viewParams['item']);
                             $this->_viewParams['item'] =& $item;
                             $this->view = 'Edit';
                         }
                     }
                 }
             }
             break;
         case 'change_view':
             $this->action = $view;
             break;
         case 'install':
             $this->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'error_alreadyinstalled'));
             $this->view = 'DocmanError';
             break;
         case 'search':
             $this->view = 'Table';
             break;
         case 'positionWithinFolder':
             $this->_viewParams['force_ordering'] = $this->request->get('default_position');
             $this->_viewParams['exclude'] = $this->request->get('exclude');
             $this->_viewParams['hierarchy'] =& $this->getItemHierarchy($root);
             $this->view = ucfirst($view);
             break;
         case 'permissionsForItem':
             $this->_viewParams['user_can_manage'] = $this->userCanManage($item->getId());
             $this->view = ucfirst($view);
             break;
         case 'report_settings':
             $this->view = 'ReportSettings';
             break;
         case 'report_del':
             if ($this->request->exist('report_id')) {
                 $this->_actionParams['sReportId'] = (int) $this->request->get('report_id');
                 $this->_actionParams['sGroupId'] = $this->_viewParams['group_id'];
                 $this->action = $view;
             }
             $this->_viewParams['default_url_params'] = array('action' => 'report_settings');
             $this->view = 'RedirectAfterCrud';
             break;
         case 'report_upd':
             if ($this->request->exist('report_id')) {
                 $this->_actionParams['sReportId'] = (int) $this->request->get('report_id');
                 $this->_actionParams['sGroupId'] = $this->_viewParams['group_id'];
                 $usScope = $this->request->get('scope');
                 if ($usScope === 'I' || $usScope === 'P') {
                     $this->_actionParams['sScope'] = $usScope;
                 }
                 $this->_actionParams['description'] = $this->request->get('description');
                 $this->_actionParams['title'] = $this->request->get('title');
                 $this->_actionParams['sImage'] = (int) $this->request->get('image');
                 $this->action = $view;
             }
             $this->_viewParams['default_url_params'] = array('action' => 'report_settings');
             $this->view = 'RedirectAfterCrud';
             break;
         case 'report_import':
             if ($this->request->exist('import_search_report_from_group')) {
                 $pm = ProjectManager::instance();
                 $srcGroup = $pm->getProjectFromAutocompleter($this->request->get('import_search_report_from_group'));
                 if ($srcGroup && !$srcGroup->isError()) {
                     $this->_actionParams['sGroupId'] = $this->_viewParams['group_id'];
                     $this->_actionParams['sImportGroupId'] = $srcGroup->getGroupId();
                     $this->_actionParams['sImportReportId'] = null;
                     if ($this->request->exist('import_report_id') && trim($this->request->get('import_report_id')) != '') {
                         $this->_actionParams['sImportReportId'] = (int) $this->request->get('import_report_id');
                     }
                     $this->action = $view;
                 }
             }
             $this->_viewParams['default_url_params'] = array('action' => 'report_settings');
             $this->view = 'RedirectAfterCrud';
             break;
         case 'action_lock_add':
             $this->_actionParams['item'] = $item;
             $this->action = 'action_lock_add';
             break;
         case 'action_lock_del':
             $this->_actionParams['item'] = $item;
             $this->action = 'action_lock_del';
             break;
         case 'ajax_reference_tooltip':
             $this->view = 'AjaxReferenceTooltip';
             break;
         default:
             $event_manager =& EventManager::instance();
             $eParams = array('view' => $view, 'docmanPath' => $this->pluginPath, 'docmanThemePath' => $this->themePath);
             $event_manager->processEvent('plugin_docman_after_dispacher', $eParams);
             die(htmlspecialchars($view) . ' is not supported');
             break;
     }
 }
예제 #8
0
 function validate($value)
 {
     $this->addRule(new Rule_Email($this->separator));
     return parent::validate($value);
 }
예제 #9
0
$project_manager = ProjectManager::instance();
$json = array();
$sparkline_urls = $request->get('sparklines');
if (is_array($sparkline_urls)) {
    foreach ($sparkline_urls as $url) {
        //Get sparkline parameters via the url
        $parameters = parse_url($url, PHP_URL_QUERY);
        parse_str($parameters, $sparkline);
        $vGroupId = new Valid_GroupId();
        $group_id = 100;
        if (isset($sparkline['group_id']) && $vGroupId->validate($sparkline['group_id'])) {
            $group_id = $sparkline['group_id'];
        }
        $v = new Valid_String();
        $v->required();
        if (isset($sparkline['key']) && isset($sparkline['val']) && $v->validate($sparkline['key']) && $v->validate($sparkline['val'])) {
            $key = $sparkline['key'];
            $val = $sparkline['val'];
            if ($key == 'wiki') {
                $args[] = $val;
            } else {
                $args = explode("/", $val);
            }
            //Get the reference
            $ref = $reference_manager->loadReferenceFromKeywordAndNumArgs($key, $group_id, count($args));
            if ($ref) {
                // Get groupname (might be useful in replace rules)
                $projname = null;
                $project = $project_manager->getProject($group_id);
                if ($project) {
                    $projname = $project->getUnixName();