/**
 * @param $print_flag
 */
function calculate_page_content($print_flag)
{
    $specmanagement_database_api = new specmanagement_database_api();
    $specmanagement_print_api = new specmanagement_print_api();
    $specmanagement_editor_api = new specmanagement_editor_api();
    $version_id = $_POST['version_id'];
    $version_spec_bug_ids = $specmanagement_database_api->get_version_spec_bugs(version_get_field($version_id, 'version'));
    if (!is_null($version_spec_bug_ids)) {
        /** get bug and work package data */
        $plugin_version_obj = $specmanagement_database_api->get_plugin_version_row_by_version_id($version_id);
        $p_version_id = $plugin_version_obj[0];
        foreach ($version_spec_bug_ids as $version_spec_bug_id) {
            $p_source_row = $specmanagement_database_api->get_source_row($version_spec_bug_id);
            if (is_null($p_source_row[2])) {
                $specmanagement_database_api->update_source_row($version_spec_bug_id, $p_version_id, '');
            }
        }
        $work_packages = $specmanagement_database_api->get_document_spec_workpackages($p_version_id);
        asort($work_packages);
        $no_work_package_bug_ids = $specmanagement_database_api->get_workpackage_spec_bugs($p_version_id, '');
        /** get type options */
        $type_string = $specmanagement_database_api->get_type_string($specmanagement_database_api->get_type_by_version($version_id));
        $type_id = $specmanagement_database_api->get_type_id($type_string);
        $type_row = $specmanagement_database_api->get_type_row($type_id);
        $type_options = explode(';', $type_row[2]);
        /** generate and print page content */
        $specmanagement_editor_api->print_document_head($type_string, $version_id, $version_spec_bug_ids, $print_flag);
        if ($type_options[2] == '1') {
            $specmanagement_editor_api->print_directory($p_version_id, $work_packages, $no_work_package_bug_ids, $type_options[0], $print_flag);
        }
        $specmanagement_editor_api->print_editor_table_head($print_flag);
        $specmanagement_editor_api->generate_content($p_version_id, $work_packages, $no_work_package_bug_ids, $type_options[0], true, $print_flag);
        echo '</table>';
        if ($type_options[1] == '1') {
            $specmanagement_editor_api->print_expenses_overview($work_packages, $p_version_id, $print_flag, $no_work_package_bug_ids);
        }
    } else {
        echo '<br/>';
        $specmanagement_editor_api->print_editor_table_head($print_flag);
        echo '<tr><td class="center">';
        echo plugin_lang_get('editor_no_issues');
        echo '</td></tr>';
        $specmanagement_print_api->printTableFoot();
    }
}
/**
 * @param $types
 */
function print_document_selection($types)
{
    $project_id = gpc_get_int('project_id', helper_get_current_project());
    $specmanagement_database_api = new specmanagement_database_api();
    echo '<select name="version_id">';
    foreach ($types as $type) {
        $type_string = string_html_specialchars($type);
        $type_id = $specmanagement_database_api->get_type_id($type);
        $version_id_array = get_version_ids($type_id, $project_id);
        foreach ($version_id_array as $version_id) {
            $version_spec_project_id = version_get_field($version_id, 'project_id');
            if (project_includes_user($version_spec_project_id, auth_get_current_user_id()) || user_is_administrator(auth_get_current_user_id())) {
                $version_string = version_full_name($version_id);
                echo '<option value="' . $version_id . '">';
                echo $type_string . " - " . $version_string;
                echo '</option>';
            }
        }
    }
    echo '</select>';
}
 /**
  * Update custom plugin fields
  *
  * @param $event
  * @param BugData $bug
  */
 function bugUpdateData($event, BugData $bug)
 {
     require_once SPECMANAGEMENT_CORE_URI . 'specmanagement_database_api.php';
     $specmanagement_database_api = new specmanagement_database_api();
     $version_id = null;
     $type_id = null;
     $p_version_id = null;
     $bug_id = $bug->id;
     $project_id = helper_get_current_project();
     $ptime = gpc_get_string('ptime', $specmanagement_database_api->get_ptime_row($bug_id)[2]);
     $type = gpc_get_string('types', '');
     if ($bug_id != null) {
         $target_version = bug_get_field($bug_id, 'target_version');
         if (!is_null($target_version)) {
             $version_id = version_get_id($target_version);
             $version_obj = $specmanagement_database_api->get_plugin_version_row_by_version_id($version_id);
             $p_version_id = $version_obj[0];
             $type_id = $specmanagement_database_api->get_type_id($type);
         }
     }
     $work_package = preg_replace('/\\/\\/+/', '/', gpc_get_string('work_package', ''));
     switch ($event) {
         case 'EVENT_REPORT_BUG':
             $specmanagement_database_api->insert_version_row($project_id, $version_id, $type_id);
             $specmanagement_database_api->insert_source_row($bug_id, $p_version_id, $work_package);
             $specmanagement_database_api->insert_ptime_row($bug_id, $ptime);
             break;
         case 'EVENT_UPDATE_BUG':
             if (strlen($work_package) == 0) {
                 $work_package = $specmanagement_database_api->get_workpackage_by_bug_id($bug_id);
             }
             $specmanagement_database_api->update_version_row($project_id, $version_id, $type_id);
             $specmanagement_database_api->update_source_row($bug_id, $p_version_id, $work_package);
             $specmanagement_database_api->update_ptime_row($bug_id, $ptime);
             break;
     }
 }
        }
        if (is_null($obsolete)) {
            $version->obsolete = false;
        } else {
            if ($obsolete == 'on') {
                $version->obsolete = true;
            }
        }
        if (!is_null($date_order)) {
            $new_date_order = $date_order[$version_index];
            $version->date_order = $new_date_order;
        }
        if (!is_null($type)) {
            $new_type = $type[$version_index];
            if (strlen($new_type) > 0) {
                $new_type_id = $specmanagement_database_api->get_type_id($new_type);
                $specmanagement_database_api->update_version_associated_type($project_id, $version_ids[$version_index], $new_type_id);
            } else {
                $specmanagement_database_api->update_version_associated_type($project_id, $version_ids[$version_index], 9999);
            }
        }
        if (!is_null($description)) {
            $new_description = $description[$version_index];
            $version->description = $new_description;
        }
        version_update($version);
        event_signal('EVENT_MANAGE_VERSION_UPDATE', array($version_id));
    }
}
form_security_purge('plugin_SpecManagement_manage_versions_update');
print_successful_redirect(plugin_page('manage_versions', true));
}
/**
 * Add a document type
 */
if ($option_addtype) {
    if (isset($_POST['type'])) {
        $specmanagement_database_api->insert_type_row($_POST['type']);
    }
}
/**
 * Delete a document type
 */
if ($option_deltype) {
    if (isset($_POST['types'])) {
        $type_string = $_POST['types'];
        $type_id = $specmanagement_database_api->get_type_id($type_string);
        /*
         * Just delete a type if it is not used!
         */
        if (!$specmanagement_database_api->check_type_is_used($type_id)) {
            $specmanagement_database_api->delete_type_row($type_string);
        }
    }
}
/**
 * Change a document type
 */
if ($option_changetype) {
    if (isset($_POST['types']) && isset($_POST['newtype'])) {
        $type_string = $_POST['types'];
        $type_id = $specmanagement_database_api->get_type_id($type_string);