sudo apt install ca-certificates
使用nginx
www.openproject.org/docs/installation-and-operations/configuration/server/
# default.conf
upstream web {
server web:8080;
}
server {
listen 80;
server_name _;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://web/;
}
}
#變數
test01 = User.current.id
test01 = User.current.login
pdf亂碼處理
TaipeiSansTCBeta-Regular.ttf
TaipeiSansTCBeta-Bold.ttf
TaipeiSansTCBeta-Light.ttf
vi /opt/openproject/app/models/work_package/pdf_export/view.rb
def document
@document ||= Prawn::Document.new(options.merge(info: info)).tap do |document|
register_fonts! document
document.set_font document.font('TaipeiSansTCBeta')
document.fallback_fonts = fallback_fonts
end
end
def register_fonts!(document)
font_path = Rails.root.join('public/fonts')
document.font_families['TaipeiSansTCBeta'] = {
normal: {
file: font_path.join('noto/TaipeiSansTCBeta-Bold.ttf'),
font: 'TaipeiSansTCBeta-Bold'
},
italic: {
file: font_path.join('noto/TaipeiSansTCBeta-Bold.ttf'),
font: 'TaipeiSansTCBeta-Bold'
},
bold: {
file: font_path.join('noto/TaipeiSansTCBeta-Bold.ttf'),
font: 'TaipeiSansTCBeta-Bold'
},
bold_italic: {
file: font_path.join('noto/TaipeiSansTCBeta-Bold.ttf'),
font: 'TaipeiSansTCBeta-Bold'
}
}
end
查看資料庫密碼
vi /etc/openproject/installer.dat
#自訂首頁
./openproject/config/initializers/homescreen.rb:
用#mark以下{}區
partial: ‘new_features’,
partial: ‘upsale’,
#去除help
vi ./lib/redmine/menu_manager/top_menu/help_menu.rb
只剩下如下字段
module Redmine::MenuManager::TopMenu::HelpMenu
def render_help_top_menu_node(item = help_menu_item)
end
end
sql
psql -h 127.0.0.1 -p 45432 -U openproject
查看sql帳密資訊
sudo openproject config:get DATABASE_URL
登入sql
sudo su - postgres -c psql
#個人化js
vi ./openproject/app/views/work_packages/index.html.erb
<script src="assets/frontend/test.js"></script>
jQuery(function(){
function show_popup(){
jQuery("#dueDate").css("background-color", "yellow");
jQuery(".status:contains(New)").parent().css("background-color", "yellow");
};
//window.setTimeout( show_popup, 5000 ); // 5 seconds
window.setInterval( show_popup, 1000 ); // 5 seconds
});
#api
修改工作項目狀態
{
"lockVersion": 26,
"status": {
"href": "/api/v3/statuses/15"
}
}

#修改專案狀態
{
"status": {
"href": "/api/v3/project_statuses/at_risk"
}
}
var u = 'apikey';
var p = '2b2819f62f3b7698f25ce01a8e56f1662a6e882ab60ad09fb64304ddd89ed2a3';
var url = 'http://10.3.1.36/api/v3/work_packages/56';
var jsonData = {
"lockVersion": 50,
"status": {
"href": "/api/v3/statuses/1"
}
}
$.ajax({
type: 'PATCH',
headers: {"Authorization": "Basic " + btoa(u + ":" + p)},
url: url,
contentType: "application/json",
dataType: "json",
data: JSON.stringify(jsonData),
});
var u = 'apikey';
var p = '2b2819f62f3b7698f25ce01a8e56f1662a6e882ab60ad09fb64304ddd89ed2a3';
var url = 'http://10.3.1.36/api/v3/work_packages/56';
var jsonData = {}
jsonData.lockVersion = b;
jsonData.subject = "aa" + b;
jsonData.status = {};
jsonData.status.href = "/api/v3/statuses/1";
$.ajax({
type: 'PATCH',
headers: {"Authorization": "Basic " + btoa(u + ":" + p)},
url: url,
contentType: "application/json",
dataType: "json",
data: JSON.stringify(jsonData),
});
#mail樣板
vi ./openproject/app/views/mailer/_notification_mailer_header.html.erb
project專案頁面 + js
/opt/openproject/modules/overviews/app/views/overviews/overviews/show.html.erb
#外包商應用
update users set type=’PlaceholderUser’,status=’1′ where id=9;
#指定帳號可以加限定的群組 – members
vi /opt/openproject/app/models/role.rb
#josh start
def self.givable
if "admin" == User.current.login
where(builtin: NON_BUILTIN)
.where(type: 'Role')
.order(Arel.sql('position'))
else
where(builtin: NON_BUILTIN)
.where(type: 'Role')
.where(" name like 'G_%' " )
.order(Arel.sql('position'))
end
end
#josh end
#指定帳號可以使用限定的群組 – work_packages
vi /opt/openproject/app/models/queries/roles/filters/grantable_filter.rb
[“roles.builtin IN (?) and name like ‘G_%’ “, db_values]
vi /opt/openproject/app/views/members/index.html.erb
jQuery(function(){
function show_popup(){
jQuery(“#dueDate”).css(“background-color”, “yellow”);
jQuery(“.status:contains(New)”).parent().css(“background-color”, “yellow”);
};
//window.setTimeout( show_popup, 5000 ); // 5 seconds
window.setInterval( show_popup, 1000 ); // 5 seconds
});
升級後nginx無法進http,被導到https
sudo openproject config:set OPENPROJECT_HTTPS="false"