Merge branch 'master' of https://bitbucket.org/1ka/1ka
This commit is contained in:
commit
d0070658f9
@ -477,7 +477,7 @@ class LatexDocument{
|
||||
/********************* END TEST *****************************/
|
||||
|
||||
//brisanje temp datotek tex
|
||||
unlink($filenameTex); //tex
|
||||
//unlink($filenameTex); //tex
|
||||
unlink($filename.".aux"); //aux
|
||||
unlink($filename.".log"); //log
|
||||
unlink($filename.".pdf"); //pdf
|
||||
|
@ -875,10 +875,11 @@ class LatexSurveyElement{
|
||||
$image = $lang['srv_pc_unavailable'];
|
||||
$text = $textPrej.' '.$image.' '.$textPotem;
|
||||
} */
|
||||
|
||||
$text = '';
|
||||
$text = $textPrej.' ';
|
||||
|
||||
if(filesize($imageNameTest) > 0){
|
||||
//if(filesize($imageNameTest) > 0){
|
||||
if(file_exists($imageNameTest)){
|
||||
$text .= $textPrej.' '.PIC_SIZE_ANS."{".$imageName."}";
|
||||
}else{
|
||||
$image = $lang['srv_pc_unavailable'];
|
||||
|
1597
admin/survey/modules/mod_EVOLI/R/Evoli_teamship_meter_dan.R
Normal file
1597
admin/survey/modules/mod_EVOLI/R/Evoli_teamship_meter_dan.R
Normal file
File diff suppressed because it is too large
Load Diff
104
admin/survey/modules/mod_EVOLI/R/my_functions_teamship_dan.R
Normal file
104
admin/survey/modules/mod_EVOLI/R/my_functions_teamship_dan.R
Normal file
@ -0,0 +1,104 @@
|
||||
|
||||
#---------------- Load some useful functions ----------------#
|
||||
|
||||
# Funkcija ?tevila z .5 zaokro?i navzgor
|
||||
# Sprejme decimalno ?tevilo, vrne celo ?tevilo
|
||||
# (glej "Sintaksa ankete Teamship 23072019 - FDV (1).xlsx")
|
||||
|
||||
round2 = function(x) {
|
||||
x <- round(x, 1)
|
||||
|
||||
# Najprej rekodiramo rezultate kot ?eli stranka: glej xlsx file
|
||||
x <- ifelse(x >= 4.9, 5,
|
||||
ifelse(x >= 4.1 & x <= 4.8, 4,
|
||||
ifelse(x >= 3.1 & x <= 4.0, 3,
|
||||
ifelse(x >= 2.1 & x <= 3.0, 2,
|
||||
ifelse(x >= 1.3 & x <= 2.0, 1, NA)))))
|
||||
return(x)
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Funkcija ?umnike nadomesti z ustreznimi unicode znaki za rabo na 1KA serverju
|
||||
# Sprejme vektor, vrne popravljen vektor
|
||||
|
||||
replace.characters <- function(vector.to.tidy){
|
||||
vector.to.tidy <- gsub("-", "", vector.to.tidy)
|
||||
vector.to.tidy <- gsub(" ", "", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u010C", "C", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u0160", "S", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u017D", "Z", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u010D", "c", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u0161", "s", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u017E", "z", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u017E", "z", vector.to.tidy)
|
||||
|
||||
vector.to.tidy <- gsub("[(\\...\\,)]", "", vector.to.tidy)
|
||||
|
||||
return(vector.to.tidy)
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Funkcija sprejme vektor in za ?-jem doda presledek
|
||||
# Sprejme vektor, vrne popravljen vektor
|
||||
|
||||
tidy.c.space <- function(vector.to.tidy){
|
||||
vector.to.tidy <- gsub("\u010C", "\u010C ", vector.to.tidy)
|
||||
vector.to.tidy <- gsub("\u010D", "\u010D ", vector.to.tidy)
|
||||
|
||||
return(vector.to.tidy)
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Funkcija pripravi podatke za risanje grafa. Skalira podatke za faktor 5/4
|
||||
# Sprejme data frame in spremenljivko, vrne data frame (frekvence in odstotki)
|
||||
|
||||
prep.dat <- function(df, variable) {
|
||||
df <- round2(rowMeans(df[, variable], na.rm = TRUE) / 4 * 5)
|
||||
df <- data.frame(prop.table(table(df)) * 100)
|
||||
|
||||
names(df)[1] <- "Frequency"
|
||||
names(df)[2] <- "Percentage"
|
||||
|
||||
return(df)
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Funkcija poimenuje stolpce v grafu za razvrstitev rezultatov
|
||||
# Sprejme data frame in ?tevil?ne oznake, vrne opisne oznake
|
||||
|
||||
labScore <- function(df, labelord) {
|
||||
df$label <- ifelse(df$Frequency == 1, "Meget utilfredsstillende",
|
||||
ifelse(df$Frequency == 2, "Utilfredsstillende",
|
||||
ifelse(df$Frequency == 3, "Gennemsnitlig",
|
||||
ifelse(df$Frequency == 4, "Meget tilfredsstillende",
|
||||
ifelse(df$Frequency == 5,
|
||||
"S\u00E6rdeles tilfredsstillende", NA)))))
|
||||
|
||||
# Imena, po katerih bomo razvrstili stolpce v grafih
|
||||
df$name <- labelord
|
||||
|
||||
return(df)
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Funkcija poimenuje stolpce v grafu za razvrstitev rezultatov
|
||||
# Sprejme data frame in ?tevil?ne oznake, vrne opisne oznake
|
||||
|
||||
las_labScore <- function(df) {
|
||||
df$label <- ifelse(df$Frequency == 1, "Meget utilfredsstillende",
|
||||
ifelse(df$Frequency == 2, "Utilfredsstillende",
|
||||
ifelse(df$Frequency == 3, "Gennemsnitlig",
|
||||
ifelse(df$Frequency == 4, "Meget tilfredsstillende",
|
||||
ifelse(df$Frequency == 5,
|
||||
"S\u00E6rdeles tilfredsstillende", NA)))))
|
||||
|
||||
return(df)
|
||||
}
|
||||
|
||||
|
||||
#---------------- Load some useful functions ----------------#
|
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,470 @@
|
||||
% Teamship Meter, English report
|
||||
|
||||
% Packages and definitions
|
||||
% Opredelitev dokumenta
|
||||
\documentclass[11pt, a4paper]{report}
|
||||
\usepackage[cm]{fullpage}
|
||||
\setlength{\headheight}{12pt}
|
||||
|
||||
% Opredelitev pisave
|
||||
\usepackage[default,scale=0.95]{opensans}
|
||||
\usepackage{arev}
|
||||
\usepackage{textcomp}
|
||||
\usepackage[danish]{babel}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[T1]{fontenc}
|
||||
\UseRawInputEncoding
|
||||
|
||||
|
||||
% Slovenian characters
|
||||
\catcode `č=13
|
||||
\def č{\v c}
|
||||
\catcode `š=13
|
||||
\def š{\v s}
|
||||
\catcode `ž=13
|
||||
\def ž{\v z}
|
||||
\catcode `Č=13
|
||||
\def Č{\v C}
|
||||
\catcode `Š=13
|
||||
\def Š{\v S}
|
||||
\catcode `Ž=13
|
||||
\def Ž{\v Z}
|
||||
|
||||
|
||||
|
||||
\usepackage{enumitem} % layout of list environments
|
||||
\setlist{nolistsep}
|
||||
\usepackage[normalem]{ulem} % allows line breaks and manual hyphenation within the underlined
|
||||
\usepackage{etoolbox}
|
||||
\usepackage[none]{hyphenat} % no hyphenation
|
||||
|
||||
\usepackage{graphicx}
|
||||
\usepackage[table,xcdraw]{xcolor}
|
||||
\usepackage[skip=0pt]{caption} % minimum margin between figure titles
|
||||
\captionsetup[figure]{labelformat=empty} % no "Figure" below a figure
|
||||
|
||||
\usepackage{float}
|
||||
\usepackage{multirow}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{shapes.multipart}
|
||||
\usepackage{pifont} % pencil symbol below graphs
|
||||
|
||||
% drawing boxes in legend or table environment
|
||||
\newcommand*\circled[1]{\tikz[baseline=(char.base)] {\node[shape=circle,draw,inner sep=1pt] (char) {#1};}}
|
||||
\newcommand{\mycbox}[1]{\tikz{\path[draw=#1,fill=#1] (0,0) rectangle (0.40cm,0.40cm);}}
|
||||
|
||||
% chapter formatting
|
||||
\usepackage{titlesec}
|
||||
\titleformat{\chapter}[block]{\centering\Large\bfseries}{}{0pt}{\Large} % {format}{label}{sep}
|
||||
\titlespacing*{\chapter}{0pt}{-13pt}{10pt}
|
||||
|
||||
\renewcommand{\thechapter}{} % no numbering of chapters
|
||||
\renewcommand\thesection{\Alph{section}}
|
||||
\renewcommand\thesubsection{\thechapter.\arabic{subsection}}
|
||||
|
||||
\makeatletter
|
||||
\patchcmd{\l@chapter}
|
||||
{\hfil}
|
||||
{\leaders\hbox{\normalfont$\m@th\mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
|
||||
{}{}
|
||||
\makeatother
|
||||
|
||||
\usepackage{array,calc}
|
||||
\newcolumntype{A}[1]{>{\begin{minipage}{#1}\vspace{\tabcolsep}}l<{\vspace{\tabcolsep}\end{minipage}}}
|
||||
\newenvironment{Complement}[1][0.75cm]{\hspace{#1}\begin{minipage}{\linewidth-#1}\hspace{-#1}\ignorespaces}{\end{minipage}}
|
||||
|
||||
% hyperlinks
|
||||
\usepackage{hyperref}
|
||||
\hypersetup{
|
||||
colorlinks=true,
|
||||
linkcolor=black,
|
||||
urlcolor=black,
|
||||
pdfstartview={XYZ null null 1},
|
||||
pdftitle={naslov!}
|
||||
}
|
||||
\urlstyle{same}
|
||||
|
||||
% Custim collor url: last page
|
||||
\newcommand{\MYhref}[3][blue]{\href{#2}{\color{#1}{#3}}}%
|
||||
|
||||
\newcommand{\answerbox}[1][3\baselineskip]{%
|
||||
\noindent\framebox[\linewidth]{%
|
||||
\raisebox{0pt}[0pt][#1]{}%
|
||||
}\par\medskip%
|
||||
}
|
||||
|
||||
% header and footer
|
||||
\usepackage{fancyhdr}
|
||||
\pagestyle{fancyplain}
|
||||
\fancyhf{}
|
||||
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\renewcommand{\footrulewidth}{0pt}
|
||||
|
||||
\fancyhead[L] {\color{red} Teamship M{\aa}ler - !organisation!}
|
||||
\fancyhead[R] {\textcopyright \hspace{1mm} 2020 - Claus M{\o}ller Consulting}
|
||||
\fancyfoot[c]{\small{\thepage}}
|
||||
\headsep 20pt
|
||||
|
||||
% different footer on first page
|
||||
\fancypagestyle{specialfooter}{%
|
||||
\fancyhf{}
|
||||
\renewcommand\headrulewidth{0pt}
|
||||
\fancyfoot[c]{ \vspace{-1\baselineskip} \textcopyright \hspace{1mm} 2020 - Claus M{\o}ller Consulting .Alle rettigheder forbeholdes.}
|
||||
}
|
||||
|
||||
% table of contents
|
||||
%\usepackage{tocloft}
|
||||
\renewcommand{\contentsname}{Contents} % title
|
||||
\setcounter{tocdepth}{0} % only chapters in table of contents
|
||||
%\renewcommand\cftchapfont{\Large \bfseries}
|
||||
|
||||
|
||||
% Body of this .tex file
|
||||
\begin{document}
|
||||
|
||||
\begin{titlepage}
|
||||
\thispagestyle{specialfooter}
|
||||
\begin{center}
|
||||
\vspace*{-5.5\baselineskip} % Da bo slika na vrhu vertical space
|
||||
\noindent\makebox[\textwidth]{\includegraphics[width=12cm]{../latexkosi/logo/teamship_meter_dan.png}}~\\[2.5cm]
|
||||
|
||||
\hspace*{-2.3\baselineskip} \includegraphics[width=17cm]{../latexkosi/logo/logo_teamship.png}~\\[5.5cm] % horizontal space
|
||||
\end{center}
|
||||
|
||||
\hspace*{-2.5\baselineskip} \noindent\underline{\makebox[7in][l]{Organisation: !organisation!}} ~\\[0.5cm]
|
||||
\hspace*{-1.3\baselineskip} \noindent\underline{\makebox[4in][l]{Date: !date!} \makebox[2.975in][l] {Consultant:}} ~\\[0.5cm]
|
||||
\end{titlepage}
|
||||
|
||||
|
||||
\cleardoublepage % ensure we're on an odd page
|
||||
|
||||
|
||||
% PAGE 2
|
||||
\noindent\hspace{0.12\linewidth}\begin{minipage}{0.85\linewidth}
|
||||
\begin{flushleft}
|
||||
!name! \\
|
||||
|
||||
\bigskip \bigskip
|
||||
Her er resultaterne for \textit{Teamship M{\aa}ler}testen som du lige har udf{\o}rt \\
|
||||
|
||||
\bigskip
|
||||
Teamship M{\aa}ler er mere end et sæt m{\aa}leværkt{\o}jer. Det er ogs{\aa} et \\
|
||||
uddannelsesv{\ae}rkt{\o}j, brugbart til tr{\ae}ning af team medlemmer i alle teams. \\
|
||||
|
||||
\bigskip
|
||||
Ved at anvende Teamship M{\aa}ler f{\aa}r teamet de følgende fordele:
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}
|
||||
\item Alle bliver klar over hvad der kr{\ae}ves for at v{\ae}re et godt teammedlem.
|
||||
\item Alle bliver klar over hvad der kr{\ae}ves for at hele teamet pr{\ae}sterer.
|
||||
\item Teamlederen bliver klar over hvad der kr{\ae}ves for at f{\aa} det bedste frem
|
||||
i alle teammedlemmer og hvordan der skabes ekstraordin{\ae}re resultater med og \\
|
||||
gennem et "rigtig'' team.
|
||||
\item The team leader can learn what it takes to enjoy respect from the other team members.
|
||||
\item The team leader and the team will be able to monitor the progress and take corrective actions, if necessary.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
P{\aa} de f{\o}lgende sider f{\aa}r du en introduktion til Teamship M{\aa}ler. \\
|
||||
\vspace{3\baselineskip}
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.1\linewidth}\begin{minipage}[t]{0.1\textwidth}
|
||||
\end{minipage}
|
||||
|
||||
\vspace{2\baselineskip}
|
||||
|
||||
\begingroup
|
||||
\let\clearpage\endgroup
|
||||
% a \clearpage will close the group and restore the meaning
|
||||
\tableofcontents
|
||||
|
||||
% PAGE 3
|
||||
\begin{center}
|
||||
\chapter{\Large \textbf{Om CMC's Teamship M{\o}ler}}
|
||||
\end{center}
|
||||
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\large \textbf{P{\aa} vej mod et vinderhold}} \\
|
||||
|
||||
\textit{Vinderhold best{\aa}r af succesrige individer der spiller sammen.} \\
|
||||
|
||||
En succesrig virksomhed kan beskrives som et \textit{team af vinderhold}. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}For at en virksomhed kan f{\aa} succes m{\aa} hvert enkelt team i virksomheden være et vinderhold og de enkelte teams m{\aa} kunne samarbejde og st{\o}tte hinanden. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}For at et hold kan blive et vinderhold m{\aa} de enkelte teammedlemmer have succes og de m{\aa} kunne samarbejde og st{\o}tte hinanden.\\
|
||||
|
||||
Et succesrigt team udviser \textit{Teamship}. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Teamship eksisterer n{\aa}r alle i teamet:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}
|
||||
\item \textbf{kan}, dvs. har de f{\ae}rdigheden og den viden der skal til
|
||||
\item \textbf{vil}, dvs. samarbejder og yder deres bedste som individer og som teammedlemmer
|
||||
\item \textbf{f{\aa}r lov}, i.e. bemyndiges til at tage ansvar og initiativ.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
Teamship handler om hvordan en virksomhed kan udvikle og fasthold Teamship samt skabe vinderhold, \textbf{{\ae}gte teams } -- ikke bare arbejdsgrupper. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}\textit{Teamship er det der giver mange virksomheder et forspring i forhold til konkurrenterne.} \\
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{Teams inden for sport}} \\
|
||||
|
||||
Det er Claus M{\o}ller's erfaring og overbevisning at virksomheder kan hente en mængde inspiration fra sportsverdenen, n{\aa}r det g{\ae}lder effektivt holdarbejde. \\
|
||||
|
||||
Man kan lære en masse ved at se p{\aa} alle de forskellige sportsgrene der er baseret p{\aa} teams/hold -- hvad enten det er basketball, volleyball, hockey, cricket, baseball, rugby, h{\aa}ndbold, fodbold, kapsejlads eller roning. \\
|
||||
|
||||
\bigskip
|
||||
Da fodbold er den mest udbredte holdsport i verden, har vi valgt at bruge denne sportsgren som det gennemg{\aa}ende eksempel. \\
|
||||
|
||||
\bigskip
|
||||
Virksomheder ville opn{\aa} mere succes hvis virksomhedens ''hold'' var lige s{\aa} engagerede som fodboldhold. \\
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.53\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\large \textbf{Teamship bogen}} \\
|
||||
|
||||
Bogen giver b{\aa}de inspiration og praktisk hj{\ae}lp til virksomhedens ledelse, teamledere og \\
|
||||
-medlemmer til at sammens{\ae}tte og \\ udvikle vinderhold.\\
|
||||
Den giver forslag til, hvordan ''virksomheds-hold'' \\
|
||||
kan have gavn af at efterligne og indf{\o}re de træk \\
|
||||
der er karakteristiske for succesrige \\ fodboldhold. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Til implementering af disse forslag giver bogen \\
|
||||
2 v{\ae}rkt{\o}jer der g{\aa}r h{\aa}nd i h{\aa}nd med \\
|
||||
Teamship M{\aa}ler:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}
|
||||
\item \textit{Kan/vil modellen} \\ Et v{\ae}rkt{\o}j til at sammens{\ae}tte vinderhold.
|
||||
\item \textit{Teamship-politik} \\ Et v{\ae}rkt{\o}j til at forme Teamship-kulturen i virksomheder.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
Bogen er for alle: \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Teamledere} \\
|
||||
|
||||
Teamlederen kan f{\aa} inspiration og konkrete \\
|
||||
værkt{\o}jer til at: \\
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}
|
||||
\item skabe et effektivt team
|
||||
\item sikre {\ae}gte holdf{\o}lelse
|
||||
\item blive respekteret af alle teammedlemmer
|
||||
\item opn{\aa} bedre resultater
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\textbf{Teammedlemmer} \\
|
||||
|
||||
Som teammedlemmer kan alle ansatte f{\aa} \\
|
||||
inspiration og hj{\ae}lp til at:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}
|
||||
\item præstere mere
|
||||
\item forst{\aa} deres egen rolle som \\ teammedlemmer
|
||||
\item have indstillingen: ''Jeg spiller, for at jeg selv \\ og teamet vinde''
|
||||
\item tage ansvar for teamets success og fiasko
|
||||
\item f{\aa} bedre muligheder, indflydelse, karriere, afl{\o}nning, st{\o}rre anerkendelse -- og bedre livskvalitet.
|
||||
\end{itemize}
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
%\newpage
|
||||
|
||||
% PAGE 4
|
||||
\begin{center}
|
||||
\chapter{\Large \textbf{15 Teamship-faktorer}}
|
||||
\end{center}
|
||||
|
||||
\begin{minipage}[t]{0.48\textwidth}
|
||||
\begin{flushleft}
|
||||
\textbf{Teamship-faktorer} \\
|
||||
|
||||
I mere end 40 {\aa}r har Claus M{\o}ller hjulpet virksomheder i alle brancher i mange forskellige kulturer overalt i verden med at skabe vinderhold ved at indf{\o}re Teamship. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Hans egen erfaring underst{\o}ttet af grundig forskning tyder p{\aa}, at vinderteams har et antal faktorer tilf{\ae}lles. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Claus M{\o}ller har identiferet 15 faktorer, som ser ud til at karakterisere de mest effektive teams. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Vi kalder disse karakteristika \textit{Teamship-faktorer}. \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Sådan skabes Teamship} \\
|
||||
|
||||
P{\aa} de f{\o}lgende sider behandles hver af de 15 Teamship-faktorer. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}For hver faktor beskrives: \\
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Hvordan vinder-fodboldhold ''spiller''.
|
||||
\item Hvordan teams i virksomheder desv{\ae}rre alt for ofte ''spiller''.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
For hver faktor er det ogs{\aa} angivet, hvad teams i virksomheder kan g{\o}re for at indf{\o}re holdsportens {\aa}nd. I bogens kapitel En \textit{Teamship-politik} finds flere konkrete r{\aa}d. \\
|
||||
\bigskip
|
||||
\textbf{Karakteristika ved vinderteams -- i fodbold og i virksomheder} \\
|
||||
|
||||
\bigskip
|
||||
\begin{enumerate}
|
||||
\item Alle teammedlemmer yder deres bedste
|
||||
\item Alle identificerer sig med visionen
|
||||
\item Succeskriterier er f{\ae}lles
|
||||
\item Teamet er organiseret omkring succeskriterierne
|
||||
\item Alle er villige til at forandre sig {\o}jeblikkeligt
|
||||
\item Teamet kan overvinde forhindringer
|
||||
\item Alle har faglige f{\ae}rdigheder
|
||||
\item Alle har f{\ae}rdigheder i samspil
|
||||
\item Teamet er et ''vi-team''
|
||||
\item Alle lærer og deler viden med hinanden
|
||||
\item Teamet er et ''helt'' team
|
||||
\item Teamlederen er synlig
|
||||
\item Teamlederen hj{\ae}lper alle med at f{\aa} succes
|
||||
\item Teamlederen nyder respekt
|
||||
\item Gode pr{\ae}stationer bel{\o}nnes
|
||||
\end{enumerate}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\vspace{4\baselineskip}
|
||||
\begin{center}
|
||||
\begin{minipage}{0.7\linewidth}
|
||||
\begin{flushleft}
|
||||
På de følgende sider beskrives:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}
|
||||
\item vigtigheden af hver af de 15 Teamship-faktorer.
|
||||
|
||||
\end{itemize}
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 5
|
||||
\chapter{\Large \textbf{S{\aa}dan anvendes v{\ae}rkt{\o}jet}}
|
||||
\begin{center}
|
||||
\begin{minipage}{0.83\linewidth}
|
||||
\begin{center}
|
||||
\vspace*{\baselineskip}
|
||||
{\large \textbf{S{\aa}dan anvender den enkelte v{\ae}rkt{\o}jet}}
|
||||
\end{center}
|
||||
|
||||
\begin{flushleft}
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}
|
||||
\item Hvert teammedlem gennemg{\aa}r sin egen besvarelse af Teamship M{\aa}ler. Derved opn{\aa}s en bevidsthed om, p{\aa} hvilke omr{\aa}der teamkulturen efter den enkeltes opfattelse skal udvikles.
|
||||
\item Ved at sammenligne egen besvarelse med det samlede teamresultat, kan hver enkelt se, hvordan hans/hendes vurdering er i forhold til kollegernes vurdering.
|
||||
\item Med denne nye indsigt kan den enkelte bedre bidrage til at udvikle team-kulturen.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\begin{center}
|
||||
{\large \textbf{S{\aa}dan anvender virksomheden v{\ae}rkt{\o}jet}}
|
||||
\end{center}
|
||||
|
||||
\begin{itemize}
|
||||
\item Teamship M{\aa}ler anvendes af alle teams i virksomheden. Resultaterne fra de forskellige teams sammenlignes og diskuteres for at opn{\aa} forbedringer i hele virksomheden p{\aa} baggrund af de bedste resultater (''benchmarking'').
|
||||
\item Topledelsen kan anvende værkt{\o}jet til at identificere de teams, der tr{\ae}nger til hj{\ae}lp, eller teams, som hele virksomheden kan l{\ae}re noget af.
|
||||
\item Man kan f{\aa} et indtryk af hele virksomhedens st{\ae}rke og svage sider ved at se p{\aa} de omr{\aa}der, hvor alle teams stort set f{\aa}r samme vurdering.
|
||||
\item Hvis et teams resultater for en eller flere faktorer afviger v{\ae}sentligt fra alle andre teams resultater, f{\aa}r man et indtryk af dette teams s{\ae}rpr{\ae}g.
|
||||
\item Teamship M{\aa}ler b{\o}r anvendes af alle teams mindst en gang om {\aa}ret og i forbindelse med organisations{\ae}ndringer.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
%\newpage
|
||||
|
||||
% PAGE 6
|
||||
|
||||
\begin{center}
|
||||
\chapter{\Large Hvad viser graferne?}
|
||||
\end{center}
|
||||
\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
De ansatte har vurderet omr{\aa}derne p{\aa} en skala fra 1 til 5.\\
|
||||
|
||||
\centerline{\includegraphics[width=6cm]{../latexkosi/logo/legend_description_dan.png}}~\\[0cm]
|
||||
|
||||
Graferne viser svarenes fordeling i procent. \\
|
||||
Teamet vurderer det samlede team resultat af Teamship M{\aa}ler. \\
|
||||
|
||||
\bigskip
|
||||
En god tommelfingerregel er, at forbedringer skal foretages inden for en enkelt faktor hvis:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}
|
||||
\item \textbf{mere end 20 \%} af de ansatte har svaret 'Utilfredsstillende' eller 'Meget utilfredsstillender', eller/og
|
||||
\item \textbf{mindre end 50 \%} af de ansatte har svaret 'S{\ae}rdeles tilfredsstillende' eller 'Meget tilfredsstillende'.
|
||||
\end{itemize}
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
\textbf{\large S{\aa}dan anvender teamet v{\ae}rkt{\o}jet}
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Alle teammedlemmer kan blive bedt om at \\
|
||||
give en karakter for hvert enkelt udsagn inden \\
|
||||
for de faktorer, hvor der skal ske forbedringer, \\
|
||||
og dermed foretage en mere grundig \\
|
||||
vurdering. \bigskip
|
||||
\item Det samlede resultat af Teamship M{\aa}ler \\
|
||||
diskuteres grundigt p{\aa} et m{\o}de for alle \\
|
||||
teammedlemmer. M{\o}det skal munde ud i en \\
|
||||
konkret plan for udvikling og forbedring \\
|
||||
af teamkulturen. Denne plan \\
|
||||
skal med mellemrum justeres p{\aa} \\
|
||||
teamm{\o}der. \bigskip
|
||||
\item I afsnittet af om ''Gode r{\aa}d'', er der for hver \\
|
||||
faktor givet nogle anbefalinger til hvordan \\
|
||||
teamet kan komme fra det nuv{\ae}rende til \\
|
||||
det ideale præstationsniveau -- og \\
|
||||
dermed forme Teamship-kulturen.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
|
||||
|
||||
\newpage
|
||||
|
||||
\begin{center}
|
||||
\LARGE\textbf{COMPANY NAME}
|
||||
\end{center}
|
||||
|
||||
|
||||
\begingroup % chapter on same page. Remove pagebreak after a chapter (Only for one chapter!)
|
||||
\renewcommand{\cleardoublepage}{}
|
||||
\renewcommand{\clearpage}{}
|
||||
\chapter{\Large \textbf{Teamship-faktorer}}
|
||||
\endgroup
|
||||
|
||||
|
||||
% \end{document}
|
@ -0,0 +1,899 @@
|
||||
|
||||
% PAGE 10
|
||||
\begin{center}
|
||||
\chapter{\Large \textbf{Karakteristika ved teams der udviser Teamship}}
|
||||
\end{center}
|
||||
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\textbf{1. Alle teammedlemmer yder deres bedste}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item I vores team yder alle deres bedste -- hver eneste dag.
|
||||
\item Vi f{\o}ler alle et ''ejerskab'' for vores egne og teamets successer og fiaskoer. N{\aa}r vi vinder, vinder vi alle. N{\aa}r vi taber, taber vi alle.
|
||||
\item Alle er engagerede i deres arbejde med hjerne og hjerte.
|
||||
\item Alle arbejder h{\aa}rdt for at leve op til de krav og forventninger der stilles til teamet af omgivelserne og af teammedlemmerne selv.
|
||||
\item Uden for teamets ''fire v{\ae}gge'' taler vi p{\ae}nt om vores team.
|
||||
\item Vi er alle stolte af at v{\ae}re medlemmer af vores team.
|
||||
\item Vi forsvarer alle teamet mod angreb.
|
||||
\item Vi venter ikke p{\aa} at andre skal stille os opgaver -- vi er ''selvstartere''.
|
||||
\item Det forventes og accepteres at alle kommer med ideer og forslag til forbedringer.
|
||||
\item Vi er alle aktive ''spillere'' i stedet for passive ''tilskuere''.
|
||||
\item Vores arbejdsplads er karakteriseret af sammenhold, entusiasme, og en ægte kamp{\aa}nd for at opn{\aa} succes.
|
||||
\item Hvis et teammedlem ikke kan eller vil yde sit bedste, forventes og accepteres det af alle at han/hun s{\ae}ttes af teamet.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{2. Alle identificerer sig med visionen}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Teamet har en vision: Et st{\o}rre, v{\ae}rdifuldt, ambiti{\o}st, langsigtet m{\aa}l, klart beskrevet som en ønsket situation opn{\aa}et p{\aa} et bestemt tidspunkt.
|
||||
\item Visionen kommunikeres til os alle p{\aa} en s{\aa}dan m{\aa}de at vi kender den og forst{\aa}r den.
|
||||
\item Visionen er tilstr{\ae}kkelig ambiti{\o}s og betydningsfuld til at vi alle kan bidrage til dens gennemf{\o}relse.
|
||||
\item Alle teammedlemmer opfordres til at bidrage til visionens formulering.
|
||||
\item Alle identificerer sig med visionen.
|
||||
\item Visionen gennemsyrer dagligdagen i teamet, giver energi og skaber ''{\ae}gte'' kamp{\aa}nd for at opn{\aa} succes.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\textbf{3. Succeskriterier er f{\ae}lles}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Teamets succeskriterier forst{\aa}s og accepteres \\ af alle.
|
||||
\item Succeskriterierne er en integreret del af \\ teamets dagligdag.
|
||||
\item I vores team er der fuldst{\ae}ndig overensstemmelse mellem teamets og de \\
|
||||
enkelte teammedlemmers succeskriterier. \\
|
||||
Hvert enkelt teammedlems succes bidrager \\
|
||||
til hele teamets succes og omvendt.
|
||||
\item Vores pr{\ae}stationer er samordnede. Vi tr{\ae}kker alle i samme retning.
|
||||
\item Vi sammenholder vores pr{\ae}stationer og fremskridt med vores succeskriterier.
|
||||
\item Vores succeskriterier vurderes regelm{\ae}ssigt \\
|
||||
og ajourf{\o}res n{\aa}r det er n{\o}dvendigt.
|
||||
\item Alle teammedlemmer opfordres til at bidrage \\
|
||||
ved fastl{\ae}ggelsen og ajourf{\o}ringen af \\
|
||||
succeskriterierne.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{4. Teamet er organiseret omkring succeskriterierne}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item I vores team er vi organiseret direkte omkring vores succeskriterier -- i stedet for at v{\ae}re organiseret omkring traditionelle funktioner.
|
||||
\item Vi bruger alle vores tid og energi p{\aa} at skabe merv{\ae}rdi og succes for teamet.
|
||||
\item Alle teammedlemmer har et klart billede af \\
|
||||
deres rolle i teamet og ved hvad der forventes \\
|
||||
af dem.
|
||||
\item Vi bruger ingen eller meget lidt energi p{\aa} \\ politik og territorieafm{\ae}rkning.
|
||||
\item Der er ingen h{\ae}mmende regler eller forordninger og intet overdrevet bureaukrati \\
|
||||
der forhindrer os i at g{\o}re de rigtige ting -- de \\
|
||||
ting der skaber merv{\ae}rdi.
|
||||
\item Vi yder service til vores eksterne og interne kunder i stedet for vores eget hierarki.
|
||||
\item Vi ser mere p{\aa} den proces der skal til for at \\
|
||||
skabe resultater end p{\aa} selve \\
|
||||
resultaterne.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 11
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\textbf{5. Alle er villige til at forandre sig {\o}jeblikkeligt}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item I vores team b{\aa}de kan og vil hvert teammedlem {\ae}ndre taktik og adf{\ae}rd p{\aa} et {\o}jeblik n{\aa}r det er n{\o}dvendigt.
|
||||
\item Hvert teammedlem kan let tilpasse sig nye situationer og nye forhold.
|
||||
\item Fleksibilitet forventes og udvises af alle.
|
||||
\item Vi forventer alle det uventede. N{\aa}r det uventede sker pr{\o}ver vi at f{\aa} det bedste ud af den nye situation.
|
||||
\item Ingen t{\ae}nker eller siger: ''Det er jeg ikke ansat til'' eller ''Det st{\aa}r der ikke i min stillingsbeskrivelse.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{6. Teamet kan overvinde hindringer}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item N{\aa}r vi st{\aa}r over for en forhindring p{\aa} vej mod m{\aa}let, kan vores team mobilisere den n{\o}dvendige energi til at l{\o}se problemet.
|
||||
\item N{\aa}r der opst{\aa}r et problem tager vores team h{\aa}nd om det. Vores team f{\o}ler sig ansvarlig for at finde en l{\o}sning. Vi skubber ikke problemet over p{\aa} andre -- vi l{\o}ser det.
|
||||
\item N{\aa}r vi kommer ud for problemer, forhindringer og konflikter n{\o}jes vi ikke med at tale om dem -- vi g{\o}r noget ved dem.
|
||||
\item Vi er alle bemyndigede til at tage de n{\o}dvendige beslutninger for at l{\o}se problemerne n{\aa}r og hvor de m{\aa}tte opst{\aa}.
|
||||
\item Vi registrerer alle sammen de sm{\aa} signaler der peger p{\aa} at et problem er ved at opst{\aa}. Vi forudser eventuelle forhindringer.
|
||||
\item Vi analyserer alle problemer. Vi foregriber fremtidige problemer ved at arbejde med {\aa}rsagerne i stedet for symptomerne.
|
||||
\item N{\aa}r vi ser en mulighed for udvikling i forl{\o}bet handler vi {\o}jeblikkelig for at f{\aa} udbytte af den.
|
||||
\item N{\aa}r vi st{\aa}r over for problemer som virker vanskelige eller umulige at l{\o}se fors{\o}ger vi at se mulighederne i stedet for problemerne i ''krisen''.
|
||||
\item Vi har en v{\ae}rkt{\o}jskasse med almindelige probleml{\o}sningsmetoder og kreativitetsteknikker som vi kan v{\ae}lge blandt.
|
||||
\item Vi l{\o}ser problemer b{\aa}de individuelt og gennem teamwork.
|
||||
\item Vi lader ikke bureaukratiet og formaliteterne forhindre os i at handle n{\aa}r det er n{\o}dvendigt. Vi bruger vores sunde fornuft som hovedregel. Hvis en eksisterende regel ikke passer til en given situation -- bryder vi den.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\textbf{7. Alle har faglige f{\ae}rdigheder}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Vi er alle i stand til at udf{\o}re vores arbejdsopgaver professionelt.
|
||||
\item Vi har alle den n{\o}dvendige uddannelse og \\ tr{\ae}ning.
|
||||
\item Vi har alle tilstr{\ae}kkelig erfaring.
|
||||
\item Vi har allesammen de n{\o}dvendige \\ f{\ae}rdigheder.
|
||||
\item I vores team f{\o}lger vi princippet om multifunktionelle ansatte. Alle har mere \\
|
||||
end en f{\ae}rdighed/specialitet og kan \\
|
||||
udfylde mere end én rolle.
|
||||
\item Alle teammedlemmer kan arbejde i andre \\
|
||||
teams I virksomheden og p{\aa} \\
|
||||
tv{\ae}rs af faggr{\ae}nserne.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{8. Alle har f{\ae}rdigheder i samspil}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Vi er gode til teamwork. Vi samarbejder og ''spiller'' godt sammen.
|
||||
\item Vi ser alle vores opgaver og aktiviteter som elementer i en proces.
|
||||
\item Hvert teammedlem interesserer sig for \\
|
||||
andre teammedlemmers specielle \\
|
||||
f{\ae}rdigheder.
|
||||
\item Alle kender deres egne styrker og \\
|
||||
svagheder og udnytter denne \\
|
||||
viden til at styrke arbejdsprocessen.
|
||||
\item Alle forst{\aa}r arbejdsgangen og systemet \\ bag.
|
||||
\item Alle kan overdrage en opgave p{\aa} en m{\aa}de,\\
|
||||
s{\aa} processen k{\o}rer videre \\
|
||||
uforstyrret.
|
||||
\item Alle kommunikerer l{\o}bende med de andre teammedlemmer. De lytter, stiller \\
|
||||
sp{\o}rgsm{\aa}l, giver oplysninger, \\
|
||||
afstemmer den f{\ae}lles forst{\aa}else osv.
|
||||
\item Vi ved alle, hvorn{\aa}r i processen der er \\
|
||||
brug for vores bidrag.
|
||||
\item Alle teammedlemmer ved hvorn{\aa}r det er \\
|
||||
det rigtige tidspunkt at involvere \\
|
||||
andre teammedlemmer i \\ arbejdsprocessen.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 12
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\textbf{9. Teamet er et ''vi-team''}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Vores team er et ''vi-team'' og ikke et ''mig-team''.
|
||||
\item Alle teammedlemmer st{\aa}r sammen for at vinde.
|
||||
\item Vi har ingen konkurrenter eller ”fjender” inden for vores egen virksomhed. Vi har ingen interne stridigheder mellem teammedlemmerne.
|
||||
\item Ingen vinder p{\aa} bekostning af teamet eller et andet teammedlem.
|
||||
\item Hvert teammedlem viser bet{\ae}nksomhed og respekt for de andre teammedlemmer.
|
||||
\item Vi giver hinanden konstruktiv kritik -- inden for teamets ''fire v{\ae}gge''.
|
||||
\item Vi kan v{\ae}re uenige og diskutere. Alle siger deres mening. Men n{\aa}r en beslutning er endeligt truffet, er vi loyale over for den, ogs{\aa} selv om vi ikke er helt enige.
|
||||
\item Vi respekterer hinanden, selv om vi er uenige.
|
||||
\item Alle spiller for, at de selv og teamet vinder. Ingen spiller for sig selv p{\aa} bekostning af teamet.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{10. Alle l{\ae}rer og deler viden med hinanden}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Vi bruger hinandens f{\ae}rdigheder og viden og l{\ae}rer af hinanden hele tiden.
|
||||
\item Alle deler deres viden, erfaring og f{\ae}rdigheder med andre.
|
||||
\item Vi f{\o}ler os ansvarlige for b{\aa}de vores egen og teamets udvikling.
|
||||
\item Vi arrangerer kurser for alle teammedlemmerne for at udvikle deres f{\ae}rdigheder og viden, b{\aa}de som specialister og generalister.
|
||||
\item Nye teammedlemmer opmuntres til at dele deres viden og f{\o}rsteh{\aa}ndsindtryk. De opmuntres til at stille sp{\o}rgsm{\aa}l ved teamets etablerede rutiner og vaner.
|
||||
\item N{\aa}r et teammedlem har deltaget i et kursus, en udstilling osv., vil andre i teamet f{\aa} gl{\ae}de af den nyerhvervede viden. Der afs{\ae}ttes tid til, at ''kursusdeltageren'' kan dele det l{\ae}rte med andre.
|
||||
\item Vi opmuntrer alle til at interessere sig for andre teammedlemmers arbejde og at dele viden om deres arbejde med andre.
|
||||
\item Ideer og kreative forbedringsforslag fra alle teammedlemmer forventes og v{\ae}rds{\ae}ttes.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
|
||||
\bigskip
|
||||
{\textbf{11. Teamet er et ''helt'' team}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item I vores team har vi mennesker med \\
|
||||
forskellige baggrunde med hensyn \\
|
||||
til alder, erfaring, uddannelse, k{\o}n osv.
|
||||
\item I vores team har vi komplement{\ae}re \\
|
||||
f{\ae}rdigheder, dvs. det enkelte \\
|
||||
teammedlems specielle f{\ae}rdigheder \\
|
||||
supplerer de andre \\
|
||||
teammedlemmers specielle \\
|
||||
f{\ae}rdigheder.
|
||||
\item Sammen besidder vi alle de f{\ae}rdigheder, \\
|
||||
der skal til for at opfylde de \\
|
||||
krav og forventninger, der \\
|
||||
stilles til hele teamet -- b{\aa}de \\
|
||||
hvad ang{\aa}r professionelle \\
|
||||
og generelle f{\ae}rdigheder.
|
||||
\item Vores team har mennesker, som kan \\
|
||||
producere -- som g{\o}r noget \\
|
||||
i stedet for bare at tale \\
|
||||
om det.
|
||||
\item Vores team har mennesker, som kan administrere -- planl{\ae}gge, koordinere, \\
|
||||
styre, kontrollere og f{\o}lge op.
|
||||
\item Vores team har mennesker, som kan \\
|
||||
forny -- f{\aa} nye ideer og skabe\\
|
||||
forandring.
|
||||
\item Vores team har mennesker, som kan \\
|
||||
integrere -- f{\aa} mennesker til at arbejde \\
|
||||
sammen og tr{\ae}kke i samme \\
|
||||
retning.
|
||||
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{12. Teamlederen er synlig}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Vores teamleder er ogs{\aa} et teammedlem.
|
||||
\item Vores teamleder er yderst synlig. \\
|
||||
Vores teamleder deltager i og \\
|
||||
er engageret i teamets og \\
|
||||
det enkelte teammedlems succes.
|
||||
\item Vores teamleder ved, hvad der sker i ''fingerspidserne'' af vores team.
|
||||
\item Vores teamleder viser interesse i hvert teammedlems pr{\ae}stationer.
|
||||
\item Vores teamleder bliver ved med at v{\ae}re involveret i at f{\o}lge forl{\o}bet i de projekter, \\
|
||||
som han/hun har sat i gang.
|
||||
\item Anerkendelse og kritik af teamet og teammedlemmerne baseres p{\aa} \\
|
||||
teamlederens egne oplevelser -- ikke p{\aa}\\
|
||||
andenh{\aa}nds viden.
|
||||
\item Vores teamleder deltager sammen med \\
|
||||
teamet i de f{\ae}lles aktiviteter: \\
|
||||
tr{\ae}ning, festligheder, selskaber \\
|
||||
og sport.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 13
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
{\textbf{13. Teamlederen hj{\ae}lper alle med at f{\aa} succes}} \\
|
||||
|
||||
Vores teamleder:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item er ikke bare villig til at lade os f{\aa} ansvar. Vores teamleder opmuntrer os til at tage ansvar.
|
||||
\item hj{\ae}lper alle teammedlemmer med at opn{\aa} og str{\ae}be efter succes.
|
||||
\item st{\o}tter vores team og dets medlemmer.
|
||||
\item opmuntrer os til at betjene vores interne og eksterne kunder -- i stedet for at yde service til teamlederen og hierarkiet.
|
||||
\item fokuserer mere p{\aa} vores styrker end p{\aa} vores svagheder.
|
||||
\item irettes{\ae}tter os p{\aa} en s{\aa}dan m{\aa}de, at vi kan beholde vores selvrespekt.
|
||||
\item fokuserer p{\aa} teamets og dets medlemmers succes -- i stedet for p{\aa} sin egen succes, position, rang og vinding.
|
||||
\item forventer og accepterer ideer fra os -- og f{\o}rer ikke bare sine egne ideer frem.
|
||||
\item inspirerer os til at yde vores bedste og g{\o}re fuldt brug af vores viden og talenter.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\textbf{14. Teamlederen nyder respekt}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Vores team er succesrigt og vores teamleder bidrager i h{\o}j grad til vores succes.
|
||||
\item Vi respekterer vores teamleder for hans/hendes faglige f{\ae}rdigheder. Vores ledere ved, hvad det drejer sig om.
|
||||
\item Vi respekterer vores teamleder for hans/hendes menneskelige evner.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
Vores teamleder:
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item har integritet.
|
||||
\item giver os {\aa}ben og {\ae}rlig information.
|
||||
\item forsvarer os imod angreb.
|
||||
|
||||
\item svigter aldrig et teammedlem for at redde sit eget skind.
|
||||
\item omtaler os positivt uden for teamet og kommer kun med konstruktiv kritik inden for teamets ''fire v{\ae}gge''.
|
||||
\item tager aldrig {\ae}ren for andres resultater og ideer.
|
||||
\item tager selv skylden for manglende succes i stedet for at skyde skylden p{\aa} andre.
|
||||
\item opmuntrer og st{\o}tter samarbejdet med andre teams og teamledere.
|
||||
\end{itemize}
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
|
||||
\bigskip
|
||||
{\textbf{15. Gode pr{\ae}stationer bel{\o}nnes}}
|
||||
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Anerkendelse/irettes{\ae}ttelser af hele \\
|
||||
teamet og af de enkelte teammedlemmer \\
|
||||
f{\o}lger det samme regels{\ae}t, dvs. \\
|
||||
de gives konsekvent p{\aa} grundlag \\
|
||||
af samme indstilling, adf{\ae}rd \\
|
||||
og pr{\ae}stationer.
|
||||
\item Vores teamleder kender og f{\o}lger reglen:\\
|
||||
''Det der bel{\o}nnes, bliver gjort''.
|
||||
\item Alle i vores team f{\aa}r anerkendelse for \\
|
||||
gode individuelle pr{\ae}stationer -- inklusive \\
|
||||
dem, hvis pr{\ae}stationer ikke \\
|
||||
er umiddelbart synlige.
|
||||
\item Alle f{\aa}r anerkendelse for deres bidrag \\
|
||||
til teamets og virksomhedens succes.
|
||||
\item Alle teammedlemmer, der b{\aa}de kan og vil, tilbydes mere ansvar, handlefrihed og nye udfordringer.
|
||||
\item Personlig udvikling tilskyndes, anerkendes \\
|
||||
og opmuntres.
|
||||
\item Alle giver anerkendelse til andre teammedlemmer for gode pr{\ae}stationer.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 14
|
||||
\begin{center}
|
||||
|
||||
\begin{minipage}{0.87\linewidth}
|
||||
|
||||
\chapter{\Large \textbf{How to shape the Teamship culture}}
|
||||
|
||||
\begin{flushleft}
|
||||
In order to create, maintain and develop a Teamship culture we strongly recommend using the Teamship booklet as your source of inspiration and two other tools:
|
||||
|
||||
\vspace{1.5\baselineskip}
|
||||
\noindent\hspace{0.3\linewidth}\begin{minipage}{0.7\linewidth}
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}
|
||||
\item Can/will model
|
||||
\item Teamship policy
|
||||
\end{itemize}
|
||||
\end{minipage}
|
||||
|
||||
\bigskip \bigskip
|
||||
\begin{center}
|
||||
{\large \textbf{Can/will model}} \\
|
||||
\textbf{A tool to put together a winning team}
|
||||
\end{center}
|
||||
|
||||
It takes competent players and a competent coach to create a winning team -- a competent team. The Can/will model can be used to analyse the capability of the individual team member and select the right ones for the team. \\
|
||||
|
||||
\bigskip
|
||||
Read more about the Can/will model in the \textit{Teamship} booklet.
|
||||
|
||||
\bigskip \bigskip
|
||||
\begin{center}
|
||||
{\large \textbf{Teamship policy}} \\
|
||||
\textbf{A tool to shape the Teamship culture in organisations}
|
||||
\end{center}
|
||||
|
||||
In order to implement and sustain a Teamship culture it is vital to communicate to all team members in all teams what is understood by Teamship in the organisation and in each team. \\
|
||||
|
||||
\bigskip
|
||||
The special attitudes and sets of behaviour which together form the Teamship culture have to be clearly phrased and shared by everyone in the team. Teamship has to be discussed over and over again among team members in all teams. \\
|
||||
|
||||
\bigskip
|
||||
We recommend all organisations to have a Teamship policy as a part of the overall company policies. This policy should describes the framework, rules and guidelines to be adhered to by everyone. \\
|
||||
|
||||
\bigskip
|
||||
The Teamship policy should be phrased in such a way that it makes sense and is valid for the entire organisation -- the team of teams -- as well as for each team. \\
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 15
|
||||
\begin{center}
|
||||
{\Large \textbf{Good advice on shaping the Teamship culture}}
|
||||
\end{center}
|
||||
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
If the team scored unsatisfactorily in one or more of the Teamship factors, the following good advice can be used as an inspiration to improve the situation. \\
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{1. Each team member brings out their best }} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Closing the commitment gap} \\
|
||||
|
||||
People tend to perform at their best as team members when:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item they have a high degree of self--esteem
|
||||
\item they feel that what they do is meaningful
|
||||
\item they know what is expected from them
|
||||
\item their contributions are appreciated, made visible and rewarded
|
||||
\item they are supported
|
||||
\item they are faced with demands
|
||||
\item they are allowed to do what they are willing and capable of doing
|
||||
\item they are frequently informed and invited to participate in a real dialogue
|
||||
\item they are treated with respect
|
||||
\item they are currently inspired to improve and break the limits.
|
||||
\end{itemize}
|
||||
To close a commitment gap or an "ownership gap" is a very complex task, because there are several reasons for the gap. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Commitment as well as ownership attitude and behaviour depend very much on how well the team adheres to the Teamship policy related to the following 14 Teamship factors. These factors touch most of the issues decisive for an individual's commitment and sense of ownership. \\
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about commitment and ownership in the books Be a Double Bagger (The chapter Single bagger or double bagger?), My Life Tree (chapter 2, How do I look at life?) and Employeeship (The entire book is about how to mobilise everyone's energy and commitment).}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
{\large \textbf{2. Everyone identifies with the vision }} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Making everyone identify with the vision} \\
|
||||
|
||||
Claus M{\o}ller recommends to follow these guidelines:
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\renewcommand\labelitemii{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Make sure that the vision is a real vision: \bigskip
|
||||
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item that it clearly describes a desirable state
|
||||
\item that it has a deadline
|
||||
\item that it is both compelling, challenging and realistic
|
||||
\item that it is meaningful and worthwhile to all team members
|
||||
\item that it appeals to both heart and mind.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\item Make sure that the vision is effectively marketed in the organisation and in each team: \bigskip
|
||||
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item that it is communicated again and again
|
||||
\item that everyone is given a chance to match and adjust their understanding of the vision
|
||||
\item that each team and each team member get help to break down the vision into small operational components
|
||||
\item that it is clear what the team and the team members can do to make the vision come true
|
||||
\item that everyone is invited to contribute to the creation of the vision.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\item Create a new vision when the old one is coming true. This should be done to anticipate the almost inevitable \textit{energy drop} which occurs after a big success.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about goal setting in the book Time Manager -- the Key to Personal Effectiveness and about personal goals in the book My Life Tree (Chapter 6).} \\
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 16
|
||||
\begin{minipage}[t]{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
{\large \textbf{3. Success criteria are shared}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Sharing and aligning success criteria} \\
|
||||
|
||||
Establish clear success criteria. Make sure that they are understood and accepted by all team members. Put them on paper. \\
|
||||
|
||||
Bring about an ongoing dialogue concerning:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item the main purpose of the team
|
||||
\item the contribution of each team member
|
||||
\item how to measure individual success and team success
|
||||
\item how to avoid conflicts between the team goal and the goals of the team members
|
||||
\item how to ensure that all contributions are aligned and everyone pulls in the same direction
|
||||
\item how to avoid conflicts between teams.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{4. The team is organised around its success criteria}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Getting organised for success} \\
|
||||
|
||||
Have a clear picture of the goal and the tasks. Describe the processes which lead to team success and organise the team around them. \\
|
||||
|
||||
Make sure that everybody knows their own role in the process. Discuss between the team members:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item How to maximise the time and energy spent on value adding activities.
|
||||
\item How to avoid wasting time on inappropriate activities.
|
||||
\item How to minimise restricting rules and excessive bureaucracy.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
{\large \textbf{5. Everyone is willing to change instantly.}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Closing the flexibility gap} \\
|
||||
|
||||
Communicate clearly and often that willingness to change is expected from everyone. Reward flexible behaviour and willingness to change. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Test the flexibility and change willingness of team members prior to engagement. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Discuss how the team and each team member can be prepared to "expect the unexpected". \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Build flexibility into any job description. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Discuss how the team and its members can embrace change and make it a natural part of their daily lives. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Provide adequate balance between what is stable and what should be flexible in order for people to feel that it is safe to change. \\
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about change in the book Employeeship (Epilogue, p. 183 -- 197).} \\
|
||||
|
||||
\vspace{1.5\baselineskip}
|
||||
{\large \textbf{6. The team can overcome obstacles}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Overcoming obstacles} \\
|
||||
|
||||
Communicate clearly and often that all team members are expected to try everything to remove any obstacle on the way towards the goal. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Identify frequently occurring obstacles and establish ways of overcoming them. Inspire everyone to solve the problems rather than talking about them. At team meetings discuss:
|
||||
\renewcommand\labelitemi{\large$-$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item How we can learn from our mistakes and avoid repeating them.
|
||||
\item How we can register signals indicating that an obstacle is coming up.
|
||||
\item How we can solve problems both through individual effort and teamwork.
|
||||
\end{itemize}
|
||||
Create a \textit{tool box} of methods and creativity techniques to anticipate, prevent, and deal with obstacles -- and to implement decision. \\
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about how to implement and overcome obstacles in the book Employeeship (The chapter on Initiative, p. 64-75 and the chapter on Implementation p. 108-123). The Practical Manager itself is an implementation tool.} \\
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 17
|
||||
\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
{\large \textbf{7. Everyone possesses professional skills}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Developing professional skills and multifunctionality} \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Define clearly the professional demands put on each team member in terms of training, experience and skills. Assess currently how well the demands are met by each team member. Make a development plan for each team member which keeps them on the desired level of competence. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Promote multi--functionality through job rotation and other initiatives. When engaging new team members try to get people who are capable and willing to perform more than one type of job. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Train all team members to become multifunctional.\\
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about multifunctionality in the book Employeeship (p.166-167).} \\
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{8. Everyone has relational skills}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Developing relational skills} \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Define clearly what is understood by real teamwork. Emphasise frequently the importance of real teamwork. Allocate time for team members to practise teamwork and to get to know each other personally and professionally. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Develop these four kinds of relational skills: \\
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item \textbf{Game comprehension:} Ability to comprehend, evaluate, decide and act in a specific situation based on a full understanding of the nature of the game and the work processes and systems behind it.
|
||||
\item \textbf{Passing skills:} Ability to pass on, respectively receive a task in such a way that the work process flows on smoothly.
|
||||
\item \textbf{Communication skills:} Ability to read signals from as well as send clear signals to other team members in order to advance the work process.
|
||||
\item \textbf{People skills:} Ability to improve interpersonal relations and promote real teamwork.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
{\large \textbf{9. The team is a "we team"}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Developing a "we culture"} \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Define clearly the characteristics of a "we" culture and a "we" team. Stress the importance of everyone playing for themselves and for their team. Do not allow anyone to win at the expense of the team or a team mate. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Promote the notion that the organisation is a team of teams. Break down all barriers between departments, functions and hierarchical levels. Avoid using the words we and them in the meaning "we against them". Demonstrate that we means all of us: Management and staff, team leader and team members. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Encourage all team members to come up with constructive criticism within the privacy of the team and to speak positively about the team when outside the team. \\
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about how to create a "we culture" in the book Employeeship (p. 140-145).}
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{10. Everyone learns and shares}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Shaping the learning culture} \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Define the characteristics of a true learning organisation and team. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Establish practices and routines for learning and knowledge sharing: \textit{Learn to learn.} Use adequate information technology. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Organise training courses for all team members to develop their skills and knowledge as specialists as well as generalists. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Encourage new team members to share their knowledge and first--hand impressions. Ask them to question the established routines and habits of the organisation and the team. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Whenever a team member has attended a course, an exhibition etc. or gained new knowledge in other ways, let the other in the team benefit from this new found knowledge. Allocate time to share. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Encourage everybody to take responsibility for their own development and that of the team and the organisation. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Let everyone learn and share with both people inside and outside the team/organisation. \\
|
||||
|
||||
\textit{Read more about the principles of the learning organisation in the book Employeeship (p. 168-171).}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 18
|
||||
\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
{\large \textbf{11. The team is a "whole team"}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Creating "whole" teams} \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Make teams of people with different backgrounds, in terms of age, experience, education, sex, etc. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}Make sure that each team has members with complementary skills: \\
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item People who can \textbf{produce} -- do it, instead of just talking about it.
|
||||
\item People who can \textbf{administrate} -- plan, coordinate, monitor, control and follow up.
|
||||
\item People who can \textbf{innovate} -- come up with new ideas and provoke change.
|
||||
\item People who can \textbf{integrate} -- encourage people to work together and pull in the same direction.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{12. The team leader is visible}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Making team leaders visible} \\
|
||||
|
||||
\hspace*{0.8\baselineskip}The following principles should be adhered to by the team leader: \\
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Show an interest in each team member's performance.
|
||||
\item Be visibly involved in keeping the momentum of all projects you have initiated.
|
||||
\item Base your recognition and criticism of team members on your own experience -- not on second-hand knowledge.
|
||||
\item Participate together with the team in common activities: training, celebration, parties, sport, etc.
|
||||
\item Provide a solid base for all team activities in order to make all team members feel comfortable as multi-functional team members.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{13. The team leader helps everyone to achieve success}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Performing as a real coach} \\
|
||||
|
||||
All team leaders should know and practise the following principles of coaching: \\
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Allow the capable and willing team members to take responsibility.
|
||||
\item Encourage everyone to serve internal and external clients, rather than servicing the team leader.
|
||||
\end{itemize}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Focus more on the team members' strong points than on their weak points.
|
||||
\item Reprimand the team members in such a way that they keep their self--esteem.
|
||||
\item Focus on the success of the team and its members -- not on own success.
|
||||
\item Invite all team members to come up with ideas. Do not just promote own ideas.
|
||||
\item Inspire the team members to bring out their best and fully utilise their knowledge and talents.
|
||||
\item Allow each team member the freedom to develop their individual style and specialist skills.
|
||||
\item Do not "blow their own trumpet". Enable team members to play harmoniously together.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
Team leaders should meet in learning and sharing sessions to develop coaching skills. \\
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about coaching and delegation in the book Employeeship (p.98-107).} \\
|
||||
|
||||
\bigskip
|
||||
{\large \textbf{14. The team leader enjoys respect}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Deserving respect from team members} \\
|
||||
|
||||
In order for team leaders to deserve loyalty and respect from each team member they must: \\
|
||||
|
||||
\bigskip
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Contribute highly to the team success.
|
||||
\item Have professional and people skills
|
||||
\item Have integrity. Be open and honest.
|
||||
\item Defend each team member against attack.
|
||||
\item Never betray a team member.
|
||||
\item Talk positively about the team members outside and only criticise inside the team.
|
||||
\item Never take the credit for results or ideas they have not created.
|
||||
\item Respect the team members' differences.
|
||||
\item Replace incompetent team members.
|
||||
\item Practise what they preach.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about Loyalty and how the leader can gain respect in the book Employeeship (p. 52-63, and p. 124-135).}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 19
|
||||
\begin{center}
|
||||
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
|
||||
\begin{flushleft}
|
||||
{\large \textbf{15. Good performance is rewarded}} \\
|
||||
|
||||
\bigskip
|
||||
\textbf{Making people feel OK} \\
|
||||
|
||||
Create a positive strokes culture where: \\
|
||||
|
||||
\renewcommand\labelitemi{\large$\bullet$}
|
||||
\begin{itemize}[leftmargin=*]
|
||||
\item Everyone gets recognition for good performance -- including those whose performance is not immediately visible.
|
||||
\item Personal development is encouraged, recognised and rewarded.
|
||||
\item Everyone gives recognition to fellow team mates for good performance.
|
||||
\item Remuneration systems are designed to promote the team members' feeling of ownership. E.g. by including bonuses and other rewards for teamwork, contributions to others and committed performance.
|
||||
\item Everybody knows how to increase own self--esteem and that of others.
|
||||
\item Everybody can give and receive negative strokes, reprimands -- without violating anyone's self--esteem.
|
||||
\end{itemize}
|
||||
|
||||
\bigskip
|
||||
\textit{Read more about self-esteem, recognition and strokes in the books Be a Double Bagger (p. 18-49), My Life Tree (p. 43-93) and Putting People First (p. 17-24, p. 45-62).}
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
\newpage
|
||||
|
||||
% PAGE 20
|
||||
\begin{center}
|
||||
{\Large \textbf{The next steps}}
|
||||
\end{center}
|
||||
|
||||
%\vspace*{-2\baselineskip}
|
||||
|
||||
\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
\renewcommand{\ULdepth}{1.8pt}
|
||||
The Teamship Meter is a tool designed to monitor, develop and shape the team culture, so the team is "fighting fit". \\
|
||||
|
||||
\bigskip
|
||||
If you want to learn more about how you can develop and sustain winning teams, \textbf{real teams} -- rather than just working groups, you have the following options: \\
|
||||
|
||||
\bigskip
|
||||
\textbf{1. \href{https://clausmoller.com/en/contact-us/}{ \underline {Contact Claus M{\o}ller Consulting}}} \\
|
||||
|
||||
to get more detailed verbal or written feedback -- or coaching and consulting. \\
|
||||
|
||||
\bigskip
|
||||
\textbf{2. \href{https://clausmoller.com/en/product/employeeship/}{ \underline {Read the Employeeship book}}} \\
|
||||
|
||||
The book is illustrating what it takes to be a good employee, and how the energy of all employees can be mobilised to ensure the survival and growth of the company. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}The book provides inspiration and methods for everyone to display responsibility, loyalty and initiative. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}It also gives specific suggestions for the policies and systems the company should adopt and implement to bring out the best in everyone. \\
|
||||
|
||||
\bigskip
|
||||
\textbf{3. \href{https://clausmoller.com/en/product/heart-work/}{ \underline {Read Heart Work}}} \\
|
||||
|
||||
(A Book on emotional intelligence) \\
|
||||
|
||||
to get an in--depth understanding of Emotional Intelligence part of Employeeship. Learn why it is
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}%
|
||||
%second column
|
||||
\noindent\hspace{0.05\linewidth}\begin{minipage}[t]{0.52\textwidth}
|
||||
\begin{flushleft}
|
||||
\renewcommand{\ULdepth}{1.8pt}
|
||||
important both in your private life and at work and how Emotional Intelligence can be developed for individuals, teams and organisations. \\
|
||||
|
||||
\bigskip
|
||||
\textbf{4. \href{https://clausmoller.com/en/practical-leadership/}{ \underline {Participate in Practical Leadership seminar}}} \\
|
||||
|
||||
to learn more about Practical Leadership, a programme based around the principles of \MYhref{https://clausmoller.com/concepts/}{\uline{General Business Excellence}}. You will learn how to manage productivity, relationships, quality and apply practical management and leadership principles. \\
|
||||
|
||||
\bigskip
|
||||
\textbf{5. \href{https://clausmoller.com/en/product/energy-meter-for-multiple-teams/}{ \underline {Use the Team Energy Meter}}} \\
|
||||
|
||||
A tool to analyse, evaluate and develop the Employeeship culture of a team and an entire organisation within 11 Employeeship factors. \\
|
||||
|
||||
\hspace*{0.8\baselineskip}The tool is a simple and fast aid for the management and staff to identify areas in which a change or a more detailed analysis of the culture is required. \\
|
||||
|
||||
\bigskip
|
||||
\textbf{6. \href{mailto:info@clausmoller.com}{ \underline {Use the Team EQ Meter}}} \\
|
||||
|
||||
to accurately assess and develop the Emotional Intelligence of your team and your organisation. \\
|
||||
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
|
||||
\vspace{1.5\baselineskip}
|
||||
\begin{center}
|
||||
\begin{minipage}{0.9\linewidth}
|
||||
\begin{center}
|
||||
Claus M{\o}ller Consulting helps organisations to measure, improve and manage productivity, relationships, quality and leadership. \\
|
||||
\end{center}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
|
||||
\begin{center}
|
||||
Claus M{\o}ller Consulting offers keynote addresses, leadership education, tailored seminars, executive coaching, and online diagnostic tools to companies and organisations worldwide to enable them to achieve long--lasting results on personal, team and organisational level. \\
|
||||
\bigskip
|
||||
\end{center}
|
||||
|
||||
\vspace{0.5\baselineskip}
|
||||
\begin{center}
|
||||
\includegraphics[width=5.5cm]{../latexkosi/logo/CMC.png}
|
||||
\end{center}
|
||||
|
||||
\vspace*{.2\baselineskip}
|
||||
\renewcommand{\ULdepth}{1.8pt}
|
||||
\begin{center}
|
||||
Contact us for more information about consultancy, seminars and tools. \\ \uline{info@clausmoller.com} $\bullet$ \uline{https://www.clausmoller.com}
|
||||
\end{center}
|
||||
|
||||
%\end{document}
|
@ -141,9 +141,9 @@ RewriteRule ^(.*)$ /d/index.php?q=$1 [L,QSA]
|
||||
RewriteCond %{REQUEST_FILENAME}\.gz -s
|
||||
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
|
||||
|
||||
# Serve correct content types, and prevent mod_deflate double gzip.
|
||||
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
|
||||
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
|
||||
# Serve correct content types, and prevent double compression.
|
||||
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1]
|
||||
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1]
|
||||
|
||||
<FilesMatch "(\.js\.gz|\.css\.gz)$">
|
||||
# Serve correct encoding type.
|
||||
@ -154,8 +154,10 @@ RewriteRule ^(.*)$ /d/index.php?q=$1 [L,QSA]
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
||||
# Add headers to all responses.
|
||||
# Various header fixes.
|
||||
<IfModule mod_headers.c>
|
||||
# Disable content sniffing, since it's an attack vector.
|
||||
Header always set X-Content-Type-Options nosniff
|
||||
# Disable Proxy header, since it's an attack vector.
|
||||
RequestHeader unset Proxy
|
||||
</IfModule>
|
||||
|
@ -1,3 +1,9 @@
|
||||
Drupal 7.81, 2021-06-02
|
||||
-----------------------
|
||||
- Block Google FLoC by default
|
||||
- Testing and accessibility enhancements
|
||||
- Various bug fixes, optimizations and improvements
|
||||
|
||||
Drupal 7.80, 2021-04-20
|
||||
-----------------------
|
||||
- Fixed security issues:
|
||||
|
@ -8,7 +8,7 @@
|
||||
/**
|
||||
* The current system version.
|
||||
*/
|
||||
define('VERSION', '7.80');
|
||||
define('VERSION', '7.81');
|
||||
|
||||
/**
|
||||
* Core API compatibility.
|
||||
|
@ -2696,6 +2696,19 @@ function drupal_deliver_html_page($page_callback_result) {
|
||||
drupal_add_http_header('X-Frame-Options', $frame_options);
|
||||
}
|
||||
|
||||
if (variable_get('block_interest_cohort', TRUE)) {
|
||||
$permissions_policy = drupal_get_http_header('Permissions-Policy');
|
||||
if (is_null($permissions_policy)) {
|
||||
drupal_add_http_header('Permissions-Policy', 'interest-cohort=()');
|
||||
}
|
||||
else {
|
||||
// Only add interest-cohort if the header does not contain it already.
|
||||
if (strpos($permissions_policy, 'interest-cohort') === FALSE) {
|
||||
drupal_add_http_header('Permissions-Policy', 'interest-cohort=()', TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Menu status constants are integers; page content is a string or array.
|
||||
if (is_int($page_callback_result)) {
|
||||
// @todo: Break these up into separate functions?
|
||||
@ -3392,7 +3405,7 @@ function drupal_group_css($css) {
|
||||
* @see system_element_info()
|
||||
*/
|
||||
function drupal_aggregate_css(&$css_groups) {
|
||||
$preprocess_css = (variable_get('preprocess_css', FALSE) && (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update'));
|
||||
$preprocess_css = (variable_get('preprocess_css', FALSE) && !defined('MAINTENANCE_MODE'));
|
||||
|
||||
// For each group that needs aggregation, aggregate its items.
|
||||
foreach ($css_groups as $key => $group) {
|
||||
@ -3851,8 +3864,10 @@ function drupal_load_stylesheet_content($contents, $optimize = FALSE) {
|
||||
// whitespace.
|
||||
// @see http://php.net/manual/regexp.reference.subpatterns.php
|
||||
$contents = preg_replace('<
|
||||
# Do not strip any space from within single or double quotes
|
||||
(' . $double_quot . '|' . $single_quot . ')
|
||||
# Strip leading and trailing whitespace.
|
||||
\s*([@{};,])\s*
|
||||
| \s*([@{};,])\s*
|
||||
# Strip only leading whitespace from:
|
||||
# - Closing parenthesis: Retain "@media (bar) and foo".
|
||||
| \s+([\)])
|
||||
@ -3860,11 +3875,11 @@ function drupal_load_stylesheet_content($contents, $optimize = FALSE) {
|
||||
# - Opening parenthesis: Retain "@media (bar) and foo".
|
||||
# - Colon: Retain :pseudo-selectors.
|
||||
| ([\(:])\s+
|
||||
>xS',
|
||||
// Only one of the three capturing groups will match, so its reference
|
||||
>xSs',
|
||||
// Only one of the four capturing groups will match, so its reference
|
||||
// will contain the wanted value and the references for the
|
||||
// two non-matching groups will be replaced with empty strings.
|
||||
'$1$2$3',
|
||||
'$1$2$3$4',
|
||||
$contents
|
||||
);
|
||||
// End the file with a new line.
|
||||
@ -4505,7 +4520,7 @@ function drupal_get_js($scope = 'header', $javascript = NULL, $skip_alter = FALS
|
||||
* @see drupal_add_js()
|
||||
*/
|
||||
function drupal_pre_render_scripts(array $elements) {
|
||||
$preprocess_js = (variable_get('preprocess_js', FALSE) && (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update'));
|
||||
$preprocess_js = (variable_get('preprocess_js', FALSE) && !defined('MAINTENANCE_MODE'));
|
||||
|
||||
// A dummy query-string is added to filenames, to gain control over
|
||||
// browser-caching. The string changes on every update or full cache
|
||||
@ -6924,7 +6939,7 @@ function drupal_array_set_nested_value(array &$array, array $parents, $value, $f
|
||||
function &drupal_array_get_nested_value(array &$array, array $parents, &$key_exists = NULL) {
|
||||
$ref = &$array;
|
||||
foreach ($parents as $parent) {
|
||||
if (is_array($ref) && array_key_exists($parent, $ref)) {
|
||||
if (is_array($ref) && (isset($ref[$parent]) || array_key_exists($parent, $ref))) {
|
||||
$ref = &$ref[$parent];
|
||||
}
|
||||
else {
|
||||
|
@ -3924,6 +3924,11 @@ function theme_button($variables) {
|
||||
$element['#attributes']['type'] = 'submit';
|
||||
element_set_attributes($element, array('id', 'name', 'value'));
|
||||
|
||||
// Remove name attribute, if empty, for W3C compliance.
|
||||
if (isset($element['#attributes']['name']) && $element['#attributes']['name'] === '') {
|
||||
unset($element['#attributes']['name']);
|
||||
}
|
||||
|
||||
$element['#attributes']['class'][] = 'form-' . $element['#button_type'];
|
||||
if (!empty($element['#attributes']['disabled'])) {
|
||||
$element['#attributes']['class'][] = 'form-button-disabled';
|
||||
|
@ -1500,13 +1500,25 @@ function menu_tree_check_access(&$tree, $node_links = array()) {
|
||||
$nids = array_keys($node_links);
|
||||
$select = db_select('node', 'n');
|
||||
$select->addField('n', 'nid');
|
||||
// When a menu administrator who we know has permission to see unpublished
|
||||
// nodes is administering the menu, included the unpublished nodes in the
|
||||
// tree, with a special flag so that the Menu module can label them.
|
||||
// Otherwise, exclude these nodes from the tree.
|
||||
if (!empty($GLOBALS['menu_admin']) && user_access('bypass node access')) {
|
||||
$select->addField('n', 'status');
|
||||
}
|
||||
else {
|
||||
$select->condition('n.status', 1);
|
||||
}
|
||||
$select->condition('n.nid', $nids, 'IN');
|
||||
$select->addTag('node_access');
|
||||
$nids = $select->execute()->fetchCol();
|
||||
foreach ($nids as $nid) {
|
||||
foreach ($node_links[$nid] as $mlid => $link) {
|
||||
$node_links[$nid][$mlid]['access'] = TRUE;
|
||||
$node_objects = $select->execute()->fetchAll();
|
||||
foreach ($node_objects as $node_object) {
|
||||
foreach ($node_links[$node_object->nid] as $mlid => $link) {
|
||||
$node_links[$node_object->nid][$mlid]['access'] = TRUE;
|
||||
if (isset($node_object->status)) {
|
||||
$node_links[$node_object->nid][$mlid]['node_unpublished'] = !$node_object->status;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1868,7 +1880,7 @@ function menu_navigation_links($menu_name, $level = 0) {
|
||||
$router_item = menu_get_item();
|
||||
$links = array();
|
||||
foreach ($tree as $item) {
|
||||
if (!$item['link']['hidden']) {
|
||||
if ($item['link']['access'] && !$item['link']['hidden']) {
|
||||
$class = '';
|
||||
$l = $item['link']['localized_options'];
|
||||
$l['href'] = $item['link']['href'];
|
||||
|
@ -418,7 +418,7 @@ class ThemeRegistry Extends DrupalCacheArray {
|
||||
// are not registered, just check the existence of the key in the registry.
|
||||
// Use array_key_exists() here since a NULL value indicates that the theme
|
||||
// hook exists but has not yet been requested.
|
||||
return array_key_exists($offset, $this->storage);
|
||||
return isset($this->storage[$offset]) || array_key_exists($offset, $this->storage);
|
||||
}
|
||||
|
||||
public function offsetGet($offset) {
|
||||
|
@ -17,7 +17,7 @@ Drupal.behaviors.autocomplete = {
|
||||
$($input[0].form).submit(Drupal.autocompleteSubmit);
|
||||
$input.parent()
|
||||
.attr('role', 'application')
|
||||
.append($('<span class="element-invisible" aria-live="assertive"></span>')
|
||||
.append($('<span class="element-invisible" aria-live="assertive" aria-atomic="true"></span>')
|
||||
.attr('id', $input.attr('id') + '-autocomplete-aria-live')
|
||||
);
|
||||
new Drupal.jsAC($input, acdb[uri]);
|
||||
|
@ -7,7 +7,7 @@ files[] = aggregator.test
|
||||
configure = admin/config/services/aggregator/settings
|
||||
stylesheets[all][] = aggregator.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = block.test
|
||||
configure = admin/structure/block
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -13,7 +13,7 @@ regions[footer] = Footer
|
||||
regions[highlighted] = Highlighted
|
||||
regions[help] = Help
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = blog.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ files[] = book.test
|
||||
configure = admin/content/book/settings
|
||||
stylesheets[all][] = book.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = color.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -9,7 +9,7 @@ files[] = comment.test
|
||||
configure = admin/content/comment
|
||||
stylesheets[all][] = comment.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = contact.test
|
||||
configure = admin/structure/contact
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = contextual.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ files[] = dashboard.test
|
||||
dependencies[] = block
|
||||
configure = admin/dashboard/customize
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = dblog.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -213,14 +213,25 @@ function field_multiple_value_form($field, $instance, $langcode, $items, &$form,
|
||||
'#language' => $langcode,
|
||||
'#field_parents' => $parents,
|
||||
'#columns' => array_keys($field['columns']),
|
||||
// For multiple fields, title and description are handled by the wrapping table.
|
||||
'#title' => $multiple ? '' : $title,
|
||||
'#description' => $multiple ? '' : $description,
|
||||
'#title' => $title,
|
||||
'#description' => $description,
|
||||
// Only the first widget should be required.
|
||||
'#required' => $delta == 0 && $instance['required'],
|
||||
'#delta' => $delta,
|
||||
'#weight' => $delta,
|
||||
);
|
||||
// For multiple fields, title and description are handled by the wrapping
|
||||
// table.
|
||||
if ($multiple) {
|
||||
if ($delta == 0) {
|
||||
$element['#title'] = $title;
|
||||
}
|
||||
else {
|
||||
$element['#title'] = t('!title (value @number)', array('@number' => $delta + 1, '!title' => $title));
|
||||
}
|
||||
$element['#title_display'] = 'invisible';
|
||||
$element['#description'] = '';
|
||||
}
|
||||
if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) {
|
||||
// Input field for the delta (drag-n-drop reordering).
|
||||
if ($multiple) {
|
||||
|
@ -11,7 +11,7 @@ dependencies[] = field_sql_storage
|
||||
required = TRUE
|
||||
stylesheets[all][] = theme/field.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ dependencies[] = field
|
||||
files[] = field_sql_storage.test
|
||||
required = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ dependencies[] = field
|
||||
dependencies[] = options
|
||||
files[] = tests/list.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
dependencies[] = field
|
||||
files[] = number.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
dependencies[] = field
|
||||
files[] = options.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ dependencies[] = field
|
||||
files[] = text.test
|
||||
required = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -1810,6 +1810,27 @@ class FieldFormTestCase extends FieldTestCase {
|
||||
// Test with several multiple fields in a form
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the position of the required label.
|
||||
*/
|
||||
public function testFieldFormUnlimitedRequired() {
|
||||
$this->field = $this->field_unlimited;
|
||||
$this->field_name = $this->field['field_name'];
|
||||
$this->instance['field_name'] = $this->field_name;
|
||||
$this->instance['required'] = TRUE;
|
||||
field_create_field($this->field);
|
||||
field_create_instance($this->instance);
|
||||
|
||||
// Display creation form -> 1 widget.
|
||||
$this->drupalGet('test-entity/add/test-bundle');
|
||||
$result = $this->xpath("//label[not(contains(@class, 'element-invisible')) and contains(text(), :label)]/span/text()", array(':label' => $this->instance['label']));
|
||||
$this->assertEqual($result[0], '*', 'Required symbol added to field label.');
|
||||
// Check that the label of the field input is visually hidden and contains
|
||||
// the field title and an indication of the delta for a11y.
|
||||
$result = $this->xpath("//label[contains(@class, 'element-invisible') and contains(text(), :label)]/span/text()", array(':label' => $this->instance['label']));
|
||||
$this->assertEqual($result[0], '*', 'Required symbol and field label are visually hidden.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests widget handling of multiple required radios.
|
||||
*/
|
||||
|
@ -6,7 +6,7 @@ files[] = field_test.entity.inc
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
dependencies[] = field
|
||||
files[] = field_ui.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
dependencies[] = field
|
||||
files[] = tests/file.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ files[] = filter.test
|
||||
required = TRUE
|
||||
configure = admin/config/content/formats
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -9,7 +9,7 @@ files[] = forum.test
|
||||
configure = admin/structure/forum
|
||||
stylesheets[all][] = forum.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = help.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ dependencies[] = file
|
||||
files[] = image.test
|
||||
configure = admin/config/media/image-styles
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = image_module_test.module
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = locale.test
|
||||
configure = admin/config/regional/language
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = menu.test
|
||||
configure = admin/structure/menu
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -222,6 +222,14 @@ class MenuTestCase extends DrupalWebTestCase {
|
||||
$this->assertMenuLink($item2['mlid'], array('depth' => 2, 'has_children' => 1, 'p1' => $item1['mlid'], 'p2' => $item2['mlid'], 'p3' => 0));
|
||||
$this->assertMenuLink($item3['mlid'], array('depth' => 3, 'has_children' => 0, 'p1' => $item1['mlid'], 'p2' => $item2['mlid'], 'p3' => $item3['mlid'], 'p4' => 0));
|
||||
|
||||
// Add 102 menu links with increasing weights, then make sure the last-added
|
||||
// item's weight doesn't get changed because of the old hardcoded delta = 50
|
||||
$items = array();
|
||||
for ($i = -50; $i <= 51; $i++) {
|
||||
$items[$i] = $this->addMenuLink(0, 'node/' . $node1->nid, $menu_name, TRUE, strval($i));
|
||||
}
|
||||
$this->assertMenuLink($items[51]['mlid'], array('weight' => '51'));
|
||||
|
||||
// Verify menu links.
|
||||
$this->verifyMenuLink($item1, $node1);
|
||||
$this->verifyMenuLink($item2, $node2, $item1, $node1);
|
||||
@ -286,15 +294,37 @@ class MenuTestCase extends DrupalWebTestCase {
|
||||
$this->assertFieldByName('link_path', $path, 'Path no longer has query or fragment.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to use the navigation menu as the source for secondary links.
|
||||
*/
|
||||
function testNavigationAsSecondaryMenu() {
|
||||
$this->drupalLogin($this->big_user);
|
||||
|
||||
// Go to the menu settings page and make the navigation the source for the
|
||||
// secondary menu.
|
||||
$edit = array(
|
||||
'menu_main_links_source' => 'main-menu',
|
||||
'menu_secondary_links_source' => 'navigation',
|
||||
);
|
||||
$this->drupalGet('admin/structure/menu/settings');
|
||||
$this->drupalPost(NULL, $edit, t('Save configuration'));
|
||||
|
||||
// Now visit the user page. There should be an 'Add content' link in the
|
||||
// navigation block and one in the secondary menu.
|
||||
$this->drupalGet('user');
|
||||
$this->assertNoUniqueText(t('Add content'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a menu link using the menu module UI.
|
||||
*
|
||||
* @param integer $plid Parent menu link id.
|
||||
* @param string $link Link path.
|
||||
* @param string $menu_name Menu name.
|
||||
* @param string $weight Menu link weight
|
||||
* @return array Menu link created.
|
||||
*/
|
||||
function addMenuLink($plid = 0, $link = '<front>', $menu_name = 'navigation', $expanded = TRUE) {
|
||||
function addMenuLink($plid = 0, $link = '<front>', $menu_name = 'navigation', $expanded = TRUE, $weight = '0') {
|
||||
// View add menu link page.
|
||||
$this->drupalGet("admin/structure/menu/manage/$menu_name/add");
|
||||
$this->assertResponse(200);
|
||||
@ -307,7 +337,7 @@ class MenuTestCase extends DrupalWebTestCase {
|
||||
'enabled' => TRUE, // Use this to disable the menu and test.
|
||||
'expanded' => $expanded, // Setting this to true should test whether it works when we do the std_user tests.
|
||||
'parent' => $menu_name . ':' . $plid,
|
||||
'weight' => '0',
|
||||
'weight' => $weight,
|
||||
);
|
||||
|
||||
// Add menu link.
|
||||
@ -604,6 +634,50 @@ class MenuTestCase extends DrupalWebTestCase {
|
||||
$this->assertText(t('Menus'), 'Add menu node was displayed');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that menu admin lists can include menu items for unpublished nodes.
|
||||
*/
|
||||
function testUnpublishedNodeMenuItem() {
|
||||
// Log in as an administrator who can view unpublished nodes.
|
||||
$menu_and_node_admin_user = $this->drupalCreateUser(array(
|
||||
'bypass node access',
|
||||
'administer menu',
|
||||
));
|
||||
$this->drupalLogin($menu_and_node_admin_user);
|
||||
|
||||
// Create an unpublished node with a menu link.
|
||||
$title = $this->randomName();
|
||||
$node = $this->drupalCreateNode(array(
|
||||
'type' => 'article',
|
||||
'title' => $title,
|
||||
'status' => NODE_NOT_PUBLISHED,
|
||||
));
|
||||
$edit = array(
|
||||
'link_path' => 'node/' . $node->nid,
|
||||
'link_title' => $title,
|
||||
'description' => '',
|
||||
'enabled' => TRUE,
|
||||
'expanded' => TRUE,
|
||||
'parent' => 'navigation:0',
|
||||
'weight' => '0',
|
||||
);
|
||||
$this->drupalPost('admin/structure/menu/manage/navigation/add', $edit, t('Save'));
|
||||
|
||||
// Verify that the administrator can see the menu link (with a label
|
||||
// indicating that it is unpublished) on the menu management page.
|
||||
$this->drupalGet('admin/structure/menu/manage/navigation');
|
||||
$this->assertText($title . ' (unpublished)', 'Menu link to unpublished node is visible to users with "bypass node access" permission.');
|
||||
|
||||
// Verify that a user who cannot view unpublished nodes does not see the
|
||||
// menu link on the menu management page.
|
||||
$menu_admin_user = $this->drupalCreateUser(array('administer menu'));
|
||||
$this->drupalLogin($menu_admin_user);
|
||||
$this->drupalGet('admin/structure/menu/manage/navigation');
|
||||
$this->assertResponse(200);
|
||||
$this->assertNoText($title, 'Menu link to unpublished node is not visible to users without the "bypass node access" permission.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -758,4 +832,5 @@ class MenuNodeTestCase extends DrupalWebTestCase {
|
||||
$options = $this->xpath('//select[@id=:id]//option[@value=:option]', array(':id' => $id, ':option' => $option));
|
||||
return $this->assertTrue(isset($selects[0]) && !isset($options[0]), $message ? $message : t('Option @option for field @id does not exist.', array('@option' => $option, '@id' => $id)), t('Browser'));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -417,14 +417,16 @@ function node_type_delete_confirm($form, &$form_state, $type) {
|
||||
$form['name'] = array('#type' => 'value', '#value' => $type->name);
|
||||
|
||||
$message = t('Are you sure you want to delete the content type %type?', array('%type' => $type->name));
|
||||
$caption = '';
|
||||
|
||||
$num_nodes = db_query("SELECT COUNT(*) FROM {node} WHERE type = :type", array(':type' => $type->type))->fetchField();
|
||||
if ($num_nodes) {
|
||||
$caption .= '<p>' . format_plural($num_nodes, '%type is used by 1 piece of content on your site. If you remove this content type, you will not be able to edit the %type content and it may not display correctly.', '%type is used by @count pieces of content on your site. If you remove %type, you will not be able to edit the %type content and it may not display correctly.', array('%type' => $type->name)) . '</p>';
|
||||
drupal_set_title($message, PASS_THROUGH);
|
||||
$caption = '<p>' . format_plural($num_nodes, '%type is used by 1 piece of content on your site. You cannot remove this content type until you have removed all of the %type content.', '%type is used by @count pieces of content on your site. You cannot remove this content type until you have removed all of the %type content.', array('%type' => $type->name)) . '</p>';
|
||||
$form['description'] = array('#markup' => $caption);
|
||||
return $form;
|
||||
}
|
||||
|
||||
$caption .= '<p>' . t('This action cannot be undone.') . '</p>';
|
||||
$caption = '<p>' . t('This action cannot be undone.') . '</p>';
|
||||
|
||||
return confirm_form($form, $message, 'admin/structure/types', $caption, t('Delete'));
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ required = TRUE
|
||||
configure = admin/structure/types
|
||||
stylesheets[all][] = node.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -3055,18 +3055,12 @@ function node_access($op, $node, $account = NULL) {
|
||||
$query->condition($nids);
|
||||
$query->range(0, 1);
|
||||
|
||||
$grants = db_or();
|
||||
foreach (node_access_grants($op, $account) as $realm => $gids) {
|
||||
foreach ($gids as $gid) {
|
||||
$grants->condition(db_and()
|
||||
->condition('gid', $gid)
|
||||
->condition('realm', $realm)
|
||||
);
|
||||
}
|
||||
}
|
||||
$grants = node_add_node_grants_to_query(node_access_grants($op, $account));
|
||||
|
||||
if (count($grants) > 0) {
|
||||
$query->condition($grants);
|
||||
}
|
||||
|
||||
$result = (bool) $query
|
||||
->execute()
|
||||
->fetchField();
|
||||
@ -3084,6 +3078,31 @@ function node_access($op, $node, $account = NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to create the or condition for a node grants check.
|
||||
*
|
||||
* @param $account
|
||||
* The grants to add to the query, usually gotten via node_access_grants().
|
||||
* @param $table_alias
|
||||
* Optional, the alias to the node access table.
|
||||
*
|
||||
* @return
|
||||
* TRUE if the operation may be performed, FALSE otherwise.
|
||||
*/
|
||||
function node_add_node_grants_to_query($node_access_grants, $table_alias = '') {
|
||||
$grants = db_or();
|
||||
$prefix = $table_alias ? $table_alias . '.' : '';
|
||||
foreach ($node_access_grants as $realm => $gids) {
|
||||
if (!empty($gids)) {
|
||||
$grants->condition(db_and()
|
||||
->condition($prefix . 'gid', $gids, 'IN')
|
||||
->condition($prefix . 'realm', $realm)
|
||||
);
|
||||
}
|
||||
}
|
||||
return $grants;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_node_access().
|
||||
*/
|
||||
@ -3252,15 +3271,8 @@ function node_access_view_all_nodes($account = NULL) {
|
||||
->condition('nid', 0)
|
||||
->condition('grant_view', 1, '>=');
|
||||
|
||||
$grants = db_or();
|
||||
foreach (node_access_grants('view', $account) as $realm => $gids) {
|
||||
foreach ($gids as $gid) {
|
||||
$grants->condition(db_and()
|
||||
->condition('gid', $gid)
|
||||
->condition('realm', $realm)
|
||||
);
|
||||
}
|
||||
}
|
||||
$grants = node_add_node_grants_to_query(node_access_grants('view', $account));
|
||||
|
||||
if (count($grants) > 0 ) {
|
||||
$query->condition($grants);
|
||||
}
|
||||
@ -3422,17 +3434,7 @@ function _node_query_node_access_alter($query, $type) {
|
||||
$subquery = db_select('node_access', 'na')
|
||||
->fields('na', array('nid'));
|
||||
|
||||
$grant_conditions = db_or();
|
||||
// If any grant exists for the specified user, then user has access
|
||||
// to the node for the specified operation.
|
||||
foreach ($grants as $realm => $gids) {
|
||||
foreach ($gids as $gid) {
|
||||
$grant_conditions->condition(db_and()
|
||||
->condition('na.gid', $gid)
|
||||
->condition('na.realm', $realm)
|
||||
);
|
||||
}
|
||||
}
|
||||
$grant_conditions = node_add_node_grants_to_query($grants, 'na');
|
||||
|
||||
// Attach conditions to the subquery for nodes.
|
||||
if (count($grant_conditions->conditions())) {
|
||||
|
@ -1614,6 +1614,48 @@ class NodeTypeTestCase extends DrupalWebTestCase {
|
||||
$this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), format_string('%type type is enabled.', array('%type' => $type)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests deleting a content type that still has content.
|
||||
*/
|
||||
function testNodeTypeDeletion() {
|
||||
// Create a content type programmatically.
|
||||
$type = $this->drupalCreateContentType();
|
||||
|
||||
// Log in a test user.
|
||||
$web_user = $this->drupalCreateUser(array(
|
||||
'bypass node access',
|
||||
'administer content types',
|
||||
));
|
||||
$this->drupalLogin($web_user);
|
||||
|
||||
// Add a new node of this type.
|
||||
$node = $this->drupalCreateNode(array('type' => $type->type));
|
||||
// Attempt to delete the content type, which should not be allowed.
|
||||
$this->drupalGet('admin/structure/types/manage/' . $type->name . '/delete');
|
||||
$this->assertRaw(
|
||||
t(
|
||||
'%type is used by 1 piece of content on your site. You cannot remove this content type until you have removed all of the %type content.',
|
||||
array('%type' => $type->name)
|
||||
),
|
||||
'The content type will not be deleted until all nodes of that type are removed.'
|
||||
);
|
||||
$this->assertNoText(t('This action cannot be undone.'), 'The node type deletion confirmation form is not available.');
|
||||
|
||||
// Delete the node.
|
||||
node_delete($node->nid);
|
||||
// Attempt to delete the content type, which should now be allowed.
|
||||
$this->drupalGet('admin/structure/types/manage/' . $type->name . '/delete');
|
||||
$this->assertRaw(
|
||||
t(
|
||||
'Are you sure you want to delete the content type %type?',
|
||||
array('%type' => $type->name)
|
||||
),
|
||||
'The content type is available for deletion.'
|
||||
);
|
||||
$this->assertText(t('This action cannot be undone.'), 'The node type deletion confirmation form is available.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Core
|
||||
core = 7.x
|
||||
files[] = openid.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
dependencies[] = openid
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -4,7 +4,7 @@ package = Core
|
||||
version = VERSION
|
||||
core = 7.x
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -11,7 +11,11 @@
|
||||
* When filter key passed, perform a standard search on the given key,
|
||||
* and return the list of matching URL aliases.
|
||||
*/
|
||||
function path_admin_overview($keys = NULL) {
|
||||
function path_admin_overview() {
|
||||
// Get search keys.
|
||||
$args = func_get_args();
|
||||
$keys = implode('/', $args);
|
||||
|
||||
// Add the filter form above the overview table.
|
||||
$build['path_admin_filter_form'] = drupal_get_form('path_admin_filter_form', $keys);
|
||||
// Enable language column if locale is enabled or if we have any alias with language
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = path.test
|
||||
configure = admin/config/search/path
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -107,6 +107,55 @@ class PathTestCase extends DrupalWebTestCase {
|
||||
$this->drupalGet($edit['alias']);
|
||||
$this->assertNoText($node1->title, 'Alias was successfully deleted.');
|
||||
$this->assertResponse(404);
|
||||
|
||||
// Create third and fourth test node.
|
||||
$node3 = $this->drupalCreateNode();
|
||||
$node4 = $this->drupalCreateNode();
|
||||
|
||||
// Give the node aliases a common first part.
|
||||
$name = $this->randomName(4);
|
||||
|
||||
// Create aliases containing a slash.
|
||||
$edit = array();
|
||||
$edit['source'] = 'node/' . $node3->nid;
|
||||
$alias3 = $name . '/' . $this->randomName(5);
|
||||
$edit['alias'] = $alias3;
|
||||
$this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
||||
$edit['source'] = 'node/' . $node4->nid;
|
||||
$alias4 = $name . '/' . $this->randomName(4);
|
||||
$edit['alias'] = $alias4;
|
||||
$this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
|
||||
|
||||
// Confirm that the aliases work.
|
||||
$this->drupalGet($alias3);
|
||||
$this->assertText($node3->title, 'Alias works.');
|
||||
$this->assertResponse(200);
|
||||
$this->drupalGet($alias4);
|
||||
$this->assertText($node4->title, 'Alias works.');
|
||||
$this->assertResponse(200);
|
||||
|
||||
// Confirm that filters containing slashes work.
|
||||
$this->drupalGet('admin/config/search/path/list/' . $alias3);
|
||||
$this->assertFieldByName('filter', $alias3);
|
||||
$this->assertText($alias3, 'Searched-for alias with slash found.');
|
||||
$this->assertNoText($alias4, 'Different alias with slash not found.');
|
||||
$this->assertResponse(200);
|
||||
|
||||
// Delete aliases.
|
||||
$pid = $this->getPID($alias3);
|
||||
$this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
|
||||
$this->drupalPost(NULL, array(), t('Confirm'));
|
||||
$pid = $this->getPID($alias4);
|
||||
$this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
|
||||
$this->drupalPost(NULL, array(), t('Confirm'));
|
||||
|
||||
// Confirm that the aliases no longer work.
|
||||
$this->drupalGet($alias3);
|
||||
$this->assertNoText($node3->title, 'Alias was successfully deleted.');
|
||||
$this->assertResponse(404);
|
||||
$this->drupalGet($alias4);
|
||||
$this->assertNoText($node4->title, 'Alias was successfully deleted.');
|
||||
$this->assertResponse(404);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = php.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = poll.test
|
||||
stylesheets[all][] = poll.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -11,7 +11,7 @@ configure = admin/config/people/profile
|
||||
; See user_system_info_alter().
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
files[] = rdf.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
hidden = TRUE
|
||||
dependencies[] = blog
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -8,7 +8,7 @@ files[] = search.test
|
||||
configure = admin/config/search/settings
|
||||
stylesheets[all][] = search.css
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
files[] = shortcut.test
|
||||
configure = admin/config/user-interface/shortcut
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -51,6 +51,20 @@ abstract class DrupalTestCase {
|
||||
*/
|
||||
protected $timeLimit = 500;
|
||||
|
||||
/**
|
||||
* Whether to cache the installation part of the setUp() method.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $useSetupInstallationCache = FALSE;
|
||||
|
||||
/**
|
||||
* Whether to cache the modules installation part of the setUp() method.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $useSetupModulesCache = FALSE;
|
||||
|
||||
/**
|
||||
* Current results of this test case.
|
||||
*
|
||||
@ -1448,6 +1462,159 @@ class DrupalWebTestCase extends DrupalTestCase {
|
||||
$this->setupEnvironment = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the cached tables and files for a cached installation setup.
|
||||
*
|
||||
* @param string $cache_key_prefix
|
||||
* (optional) Additional prefix for the cache key.
|
||||
*
|
||||
* @return bool
|
||||
* TRUE when the cache was usable and loaded, FALSE when cache was not
|
||||
* available.
|
||||
*
|
||||
* @see DrupalWebTestCase::setUp()
|
||||
*/
|
||||
protected function loadSetupCache($cache_key_prefix = '') {
|
||||
$cache_key = $this->getSetupCacheKey($cache_key_prefix);
|
||||
$cache_file = $this->originalFileDirectory . '/simpletest/' . $cache_key . '/simpletest-cache-setup';
|
||||
|
||||
if (file_exists($cache_file)) {
|
||||
return $this->copySetupCache($cache_key, substr($this->databasePrefix, 10));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the cache key used for the setup caching.
|
||||
*
|
||||
* @param string $cache_key_prefix
|
||||
* (optional) Additional prefix for the cache key.
|
||||
*
|
||||
* @return string
|
||||
* The cache key to use, by default only based on the profile used by the
|
||||
* test.
|
||||
*/
|
||||
protected function getSetupCacheKey($cache_key_prefix = '') {
|
||||
// The cache key needs to start with a numeric character, so that the cached
|
||||
// installation gets cleaned up properly.
|
||||
$cache_key_prefix = hash('crc32b', $cache_key_prefix . $this->profile);
|
||||
return '1c' . $cache_key_prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the installation setup to a cache.
|
||||
*
|
||||
* @param string $cache_key_prefix
|
||||
* (optional) Additional prefix for the cache key.
|
||||
*
|
||||
* @return bool
|
||||
* TRUE if the installation was stored in the cache, FALSE otherwise.
|
||||
*/
|
||||
protected function storeSetupCache($cache_key_prefix = '') {
|
||||
$cache_key = $this->getSetupCacheKey($cache_key_prefix);
|
||||
$lock_key = 'simpletest_store_cache_' . $cache_key . '_' . $this->testId;
|
||||
|
||||
// All concurrent tests share the same test id. Therefore it is possible to
|
||||
// use the lock to ensure that only one process will store the cache. This
|
||||
// is important as else DB tables created by one process could be deleted
|
||||
// by another as the cache copying is idempotent.
|
||||
if (! lock_acquire($lock_key)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Try to copy the installation to the setup cache - now that we have a
|
||||
// lock to do so.
|
||||
if (!$this->copySetupCache(substr($this->databasePrefix, 10), $cache_key)) {
|
||||
// It is non-fatal if the cache cannot be copied as the next test run
|
||||
// will try it again.
|
||||
$this->assert('debug', t('Storing cache with key @key failed', array('@key' => $cache_key)), 'storeSetupCache');
|
||||
|
||||
lock_release($lock_key);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Inform others that this cache is usable now.
|
||||
$cache_file = $this->originalFileDirectory . '/simpletest/' . $cache_key . '/simpletest-cache-setup';
|
||||
file_put_contents($cache_file, time(NULL));
|
||||
|
||||
lock_release($lock_key);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy the setup cache from/to another table and files directory.
|
||||
*
|
||||
* @param string $from
|
||||
* The prefix_id / cache_key from where to copy.
|
||||
* @param string $to
|
||||
* The prefix_id / cache_key to where to copy.
|
||||
*
|
||||
* @return bool
|
||||
* TRUE if the setup cache was copied to the current installation, FALSE
|
||||
* otherwise.
|
||||
*/
|
||||
protected function copySetupCache($from, $to) {
|
||||
$from_prefix = 'simpletest' . $from;
|
||||
$to_prefix = 'simpletest' . $to;
|
||||
|
||||
try {
|
||||
$tables = db_query("SHOW TABLES LIKE :prefix", array(':prefix' => db_like($from_prefix) . '%' ))->fetchCol();
|
||||
|
||||
if (count($tables) == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
foreach ($tables as $from_table) {
|
||||
$table = substr($from_table, strlen($from_prefix));
|
||||
$to_table = $to_prefix . $table;
|
||||
|
||||
// Remove the table in case the copying process was interrupted.
|
||||
db_query('DROP TABLE IF EXISTS ' . $to_table);
|
||||
db_query('CREATE TABLE ' . $to_table . ' LIKE ' . $from_table);
|
||||
db_query('ALTER TABLE ' . $to_table . ' DISABLE KEYS');
|
||||
db_query('INSERT ' . $to_table . ' SELECT * FROM ' . $from_table);
|
||||
db_query('ALTER TABLE ' . $to_table . ' ENABLE KEYS');
|
||||
}
|
||||
}
|
||||
catch (Exception $e) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$from_dir = $this->originalFileDirectory . '/simpletest/' . $from;
|
||||
$to_dir = $this->originalFileDirectory . '/simpletest/' . $to;
|
||||
$this->recursiveDirectoryCopy($from_dir, $to_dir);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively copy one directory to another.
|
||||
*
|
||||
* @param $src
|
||||
* The source directory.
|
||||
* @param $dest
|
||||
* The destination directory.
|
||||
*/
|
||||
protected function recursiveDirectoryCopy($src, $dst) {
|
||||
$dir = opendir($src);
|
||||
|
||||
if (!file_exists($dst)){
|
||||
mkdir($dst);
|
||||
}
|
||||
while (($file = readdir($dir)) !== FALSE) {
|
||||
if ($file != '.' && $file != '..') {
|
||||
if (is_dir($src . '/' . $file)) {
|
||||
$this->recursiveDirectoryCopy($src . '/' . $file, $dst . '/' . $file);
|
||||
}
|
||||
else {
|
||||
copy($src . '/' . $file, $dst . '/' . $file);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up a Drupal site for running functional and integration tests.
|
||||
*
|
||||
@ -1501,6 +1668,42 @@ class DrupalWebTestCase extends DrupalTestCase {
|
||||
// profile's hook_install() and other hook implementations are never invoked.
|
||||
$conf['install_profile'] = $this->profile;
|
||||
|
||||
$has_installation_cache = FALSE;
|
||||
$has_modules_cache = FALSE;
|
||||
|
||||
if ($this->useSetupModulesCache) {
|
||||
$modules = func_get_args();
|
||||
// Modules can be either one parameter or multiple.
|
||||
if (isset($modules[0]) && is_array($modules[0])) {
|
||||
$modules = $modules[0];
|
||||
}
|
||||
$modules = array_unique($modules);
|
||||
sort($modules);
|
||||
|
||||
$modules_cache_key_prefix = hash('crc32b', serialize($modules)) . '_';
|
||||
$has_modules_cache = $this->loadSetupCache($modules_cache_key_prefix);
|
||||
}
|
||||
|
||||
if (!$has_modules_cache && $this->useSetupInstallationCache) {
|
||||
$has_installation_cache = $this->loadSetupCache();
|
||||
}
|
||||
|
||||
if ($has_modules_cache || $has_installation_cache) {
|
||||
// Reset path variables.
|
||||
variable_set('file_public_path', $this->public_files_directory);
|
||||
variable_set('file_private_path', $this->private_files_directory);
|
||||
variable_set('file_temporary_path', $this->temp_files_directory);
|
||||
$this->refreshVariables();
|
||||
|
||||
// Load all enabled modules
|
||||
module_load_all();
|
||||
|
||||
$this->pass(t('Using cache: @cache (@key)', array(
|
||||
'@cache' => $has_modules_cache ? t('Modules Cache') : t('Installation Cache'),
|
||||
'@key' => $this->getSetupCacheKey($has_modules_cache ? $modules_cache_key_prefix : ''),
|
||||
)));
|
||||
}
|
||||
else {
|
||||
// Perform the actual Drupal installation.
|
||||
include_once DRUPAL_ROOT . '/includes/install.inc';
|
||||
drupal_install_system();
|
||||
@ -1525,6 +1728,12 @@ class DrupalWebTestCase extends DrupalTestCase {
|
||||
// Install the modules specified by the testing profile.
|
||||
module_enable($profile_details['dependencies'], FALSE);
|
||||
|
||||
if ($this->useSetupInstallationCache) {
|
||||
$this->storeSetupCache();
|
||||
}
|
||||
}
|
||||
|
||||
if (!$has_modules_cache) {
|
||||
// Install modules needed for this test. This could have been passed in as
|
||||
// either a single array argument or a variable number of string arguments.
|
||||
// @todo Remove this compatibility layer in Drupal 8, and only accept
|
||||
@ -1553,6 +1762,15 @@ class DrupalWebTestCase extends DrupalTestCase {
|
||||
// the installation process.
|
||||
drupal_cron_run();
|
||||
|
||||
if ($this->useSetupModulesCache) {
|
||||
$this->storeSetupCache($modules_cache_key_prefix);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Reset/rebuild all data structures after enabling the modules.
|
||||
$this->resetAll();
|
||||
}
|
||||
|
||||
// Ensure that the session is not written to the new environment and replace
|
||||
// the global $user session with uid 1 from the new test site.
|
||||
drupal_save_session(FALSE);
|
||||
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
.test1{display:block;}html .clear-block{height:1%;}.clear-block{display:block;font:italic bold 12px/30px Georgia,serif;}.test2{display:block;}.bkslshv1{background-color:#C00;}.test3{display:block;}.test4{display:block;}.comment-in-double-quotes:before{content:"/* ";}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-double-quotes:after{content:" */";}.comment-in-single-quotes:before{content:'/*';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-single-quotes:after{content:'*/';}.comment-in-mixed-quotes:before{content:'"/*"';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-mixed-quotes:after{content:"'*/'";}.comment-in-quotes-with-escaped:before{content:'/* \" \' */';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-quotes-with-escaped:after{content:"*/ \" \ '";}
|
||||
.test1{display:block;}img[style*="float: right"]{padding-left:5px;}html .clear-block{height:1%;}.clear-block{display:block;font:italic bold 12px/30px Georgia,serif;}.test2{display:block;}.bkslshv1{background-color:#C00;}.test3{display:block;}.test4{display:block;}.comment-in-double-quotes:before{content:"/* ";}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-double-quotes:after{content:" */";}.comment-in-single-quotes:before{content:'/*';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-single-quotes:after{content:'*/';}.comment-in-mixed-quotes:before{content:'"/*"';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-mixed-quotes:after{content:"'*/'";}.comment-in-quotes-with-escaped:before{content:'/* \" \' */';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-quotes-with-escaped:after{content:"*/ \" \ '";}
|
||||
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,31 @@
|
||||
/* Example from https://www.w3.org/TR/CSS2/syndata.html#rule-sets */
|
||||
q[example="public class foo\
|
||||
{\
|
||||
private int x;\
|
||||
\
|
||||
foo(int x) {\
|
||||
this.x = x;\
|
||||
}\
|
||||
\
|
||||
}"] { color: red }
|
||||
|
||||
/* A pseudo selector with essential whitespace wrapped in quotes. */
|
||||
q[style*="quotes: none"] {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
q[style*='quotes: none'] {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
q:after {
|
||||
content: ": colon & escaped double \" quotes \".";
|
||||
}
|
||||
|
||||
q:after {
|
||||
content: ' (brackets & escaped single \' quotes \') ';
|
||||
}
|
||||
|
||||
q:after {
|
||||
content: "I'm Quote";
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
q[example="public class foo\
|
||||
{\
|
||||
private int x;\
|
||||
\
|
||||
foo(int x) {\
|
||||
this.x = x;\
|
||||
}\
|
||||
\
|
||||
}"]{color:red}q[style*="quotes: none"]{quotes:none;}q[style*='quotes: none']{quotes:none;}q:after{content:": colon & escaped double \" quotes \".";}q:after{content:' (brackets & escaped single \' quotes \') ';}q:after{content:"I'm Quote";}
|
@ -0,0 +1,31 @@
|
||||
/* Example from https://www.w3.org/TR/CSS2/syndata.html#rule-sets */
|
||||
q[example="public class foo\
|
||||
{\
|
||||
private int x;\
|
||||
\
|
||||
foo(int x) {\
|
||||
this.x = x;\
|
||||
}\
|
||||
\
|
||||
}"] { color: red }
|
||||
|
||||
/* A pseudo selector with essential whitespace wrapped in quotes. */
|
||||
q[style*="quotes: none"] {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
q[style*='quotes: none'] {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
q:after {
|
||||
content: ": colon & escaped double \" quotes \".";
|
||||
}
|
||||
|
||||
q:after {
|
||||
content: ' (brackets & escaped single \' quotes \') ';
|
||||
}
|
||||
|
||||
q:after {
|
||||
content: "I'm Quote";
|
||||
}
|
@ -58,7 +58,7 @@ files[] = tests/upgrade/update.trigger.test
|
||||
files[] = tests/upgrade/update.field.test
|
||||
files[] = tests/upgrade/update.user.test
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -592,7 +592,8 @@ function simpletest_clean_temporary_directories() {
|
||||
$files = scandir('public://simpletest');
|
||||
foreach ($files as $file) {
|
||||
$path = 'public://simpletest/' . $file;
|
||||
if (is_dir($path) && is_numeric($file)) {
|
||||
// Ensure that cache directories are cleaned as well.
|
||||
if (is_dir($path) && (is_numeric($file) || strpos($file, '1c') === 0)) {
|
||||
file_unmanaged_delete_recursive($path);
|
||||
$count++;
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -1069,7 +1069,8 @@ class CascadingStylesheetsUnitTest extends DrupalUnitTestCase {
|
||||
'css_input_without_import.css',
|
||||
'css_input_with_import.css',
|
||||
'css_subfolder/css_input_with_import.css',
|
||||
'comment_hacks.css'
|
||||
'comment_hacks.css',
|
||||
'quotes.css',
|
||||
);
|
||||
$path = drupal_get_path('module', 'simpletest') . '/files/css_test_files';
|
||||
foreach ($testfiles as $file) {
|
||||
@ -3244,3 +3245,55 @@ class DrupalGetQueryArrayTestCase extends DrupalWebTestCase {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for block_interest_cohort.
|
||||
*/
|
||||
class BlockInterestCohortTest extends DrupalWebTestCase {
|
||||
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'Block Interest Cohort',
|
||||
'description' => 'Check Permissions-Policy header to disable Google FLoC',
|
||||
'group' => 'System',
|
||||
);
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
parent::setUp('common_test');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that FLoC is blocked by default.
|
||||
*/
|
||||
function testDefaultBlocking() {
|
||||
$this->drupalGet('node');
|
||||
$this->assertEqual($this->drupalGetHeader('Permissions-Policy'), 'interest-cohort=()', 'FLoC is blocked by default.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that an existing interest-cohort policy is not overwritten.
|
||||
*/
|
||||
function testExistingInterestCohortPolicy() {
|
||||
$this->drupalGet('common-test/existing_interest_cohort_policy');
|
||||
$this->assertEqual($this->drupalGetHeader('Permissions-Policy'), 'interest-cohort=*', 'Existing interest-cohort policy is not overwritten.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that an existing header is appended to correctly.
|
||||
*/
|
||||
function testExistingPolicyHeader() {
|
||||
$this->drupalGet('common-test/existing_permissions_policy_header');
|
||||
$this->assertTrue((strpos($this->drupalGetHeader('Permissions-Policy'), 'geolocation=(),interest-cohort=()') !== FALSE), 'The existing header is appended to.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that FLoC blocking can be disabled.
|
||||
*/
|
||||
function testDisableBlocking() {
|
||||
variable_set('block_interest_cohort', FALSE);
|
||||
$this->drupalGet('node');
|
||||
$this->assertFalse($this->drupalGetHeader('Permissions-Policy'), 'FLoC blocking can be disabled.');
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ stylesheets[all][] = common_test.css
|
||||
stylesheets[print][] = common_test.print.css
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -52,6 +52,18 @@ function common_test_menu() {
|
||||
'access arguments' => array('access content'),
|
||||
'type' => MENU_CALLBACK,
|
||||
);
|
||||
$items['common-test/existing_interest_cohort_policy'] = array(
|
||||
'title' => 'Test existing interest-cohort policy',
|
||||
'page callback' => 'existing_interest_cohort_policy',
|
||||
'access arguments' => array('access content'),
|
||||
'type' => MENU_CALLBACK,
|
||||
);
|
||||
$items['common-test/existing_permissions_policy_header'] = array(
|
||||
'title' => 'Test existing Permissions-Policy header',
|
||||
'page callback' => 'existing_permissions_policy_header',
|
||||
'access arguments' => array('access content'),
|
||||
'type' => MENU_CALLBACK,
|
||||
);
|
||||
return $items;
|
||||
}
|
||||
|
||||
@ -286,3 +298,19 @@ function common_test_js_and_css_querystring() {
|
||||
function common_test_cron() {
|
||||
throw new Exception(t('Uncaught exception'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Page callback.
|
||||
*/
|
||||
function existing_interest_cohort_policy() {
|
||||
drupal_add_http_header('Permissions-Policy', 'interest-cohort=*');
|
||||
print __FUNCTION__;
|
||||
}
|
||||
|
||||
/**
|
||||
* Page callback.
|
||||
*/
|
||||
function existing_permissions_policy_header() {
|
||||
drupal_add_http_header('Permissions-Policy', 'geolocation=()');
|
||||
print __FUNCTION__;
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -7,7 +7,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -6,7 +6,7 @@ core = 7.x
|
||||
dependencies[] = entity_cache_test_dependency
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ package = Testing
|
||||
version = VERSION
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
@ -5,7 +5,7 @@ version = VERSION
|
||||
core = 7.x
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by Drupal.org packaging script on 2021-04-21
|
||||
version = "7.80"
|
||||
; Information added by Drupal.org packaging script on 2021-06-02
|
||||
version = "7.81"
|
||||
project = "drupal"
|
||||
datestamp = "1619021862"
|
||||
datestamp = "1622633234"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user